Skip to content

Commit

Permalink
Merge pull request #2 from PoolC/dev
Browse files Browse the repository at this point in the history
scrap
  • Loading branch information
jimmy0006 authored May 16, 2024
2 parents b2f7d05 + 4282da7 commit fbf9f55
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 30 deletions.
10 changes: 6 additions & 4 deletions src/main/java/org/poolc/api/post/controller/PostController.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,21 @@
import org.poolc.api.post.service.PostService;
import org.poolc.api.post.vo.PostCreateValues;
import org.poolc.api.post.vo.PostUpdateValues;
import org.poolc.api.scrap.service.ScrapService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;


@RestController
@RequiredArgsConstructor
public class PostController {
private final PostService postService;
private final LikeService likeService;
private final ScrapService scrapService;

@PostMapping(value = "/post/new")
public ResponseEntity<Void> registerPost(@AuthenticationPrincipal Member member,
Expand All @@ -39,7 +40,8 @@ public ResponseEntity<Void> registerPost(@AuthenticationPrincipal Member member,
@GetMapping("/post/{postId}")
public ResponseEntity<PostResponse> viewPost(@AuthenticationPrincipal Member member, @PathVariable Long postId) {
Post post = postService.findPostById(member, postId);
return ResponseEntity.status(HttpStatus.OK).body(PostResponse.of(post));
PostResponse response = PostResponse.of(post, scrapService.isScrap(member.getLoginID(),postId));
return ResponseEntity.status(HttpStatus.OK).body(response);
}

@GetMapping("/board/{boardTitle}")
Expand Down Expand Up @@ -78,10 +80,10 @@ public ResponseEntity<Void> deletePost(@AuthenticationPrincipal Member member, @
}

@GetMapping("/post/search")
public ResponseEntity<List<PostResponse>> searchPost(@AuthenticationPrincipal Member member,
public ResponseEntity<GetBoardResponse> searchPost(@AuthenticationPrincipal Member member,
@RequestParam String keyword,
@RequestParam int page) {
List<PostResponse> postResponses = postService.searchPost(member, keyword, page);
GetBoardResponse postResponses = postService.searchPost(member, keyword, page);
return ResponseEntity.status(HttpStatus.OK).body(postResponses);
}
}
1 change: 1 addition & 0 deletions src/main/java/org/poolc/api/post/dto/GetPostsResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public static GetPostsResponse of(Post post) {
response.setRegion(post.getRegion());
response.setField(post.getField());
response.setDeadline(post.getDeadline());
response.setScrapCount(post.getScrapCount());
return response;
}
}
5 changes: 4 additions & 1 deletion src/main/java/org/poolc/api/post/dto/PostResponse.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ public class PostResponse {
private String region;
private String field;
private LocalDate deadline;
private Boolean isScraped;

public static PostResponse of(Post post) {
public static PostResponse of(Post post, boolean isScraped) {
PostResponse response = new PostResponse();

if (post.getIsDeleted()) return null;
Expand Down Expand Up @@ -73,6 +74,8 @@ public static PostResponse of(Post post) {
response.setDeadline(post.getDeadline());
response.setBoardPostCount(response.getBoardType().getPostCount());
response.setBoardPageNum(response.getBoardPostCount() / 15 + 1);
response.setIsScraped(isScraped);
response.setScrapCount(post.getScrapCount());
return response;
}
}
20 changes: 10 additions & 10 deletions src/main/java/org/poolc/api/post/service/PostService.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import org.poolc.api.post.domain.Post;
import org.poolc.api.post.dto.GetBoardResponse;
import org.poolc.api.post.dto.GetPostsResponse;
import org.poolc.api.post.dto.PostResponse;
import org.poolc.api.post.repository.PostRepository;
import org.poolc.api.post.vo.PostCreateValues;
import org.poolc.api.post.vo.PostUpdateValues;
Expand All @@ -20,7 +19,6 @@
import org.springframework.transaction.annotation.Transactional;

import java.util.Comparator;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -124,14 +122,17 @@ public void deletePost(Member member, Long postId) {
postRepository.save(post);
}

public List<PostResponse> searchPost(Member member, String keyword, int page) {
public GetBoardResponse searchPost(Member member, String keyword, int page) {
PageRequest pr = PageRequest.of(page, size);
Page<Post> posts = postRepository.findByTitleContainingOrBodyContaining(keyword, keyword, pr);
return posts.stream()
.filter(post -> checkReadPermissionBoolean(member, post.getBoardType()))
.sorted(Comparator.comparing(Post::getCreatedAt).reversed())
.map(PostResponse::of)
.collect(Collectors.toList());
return new GetBoardResponse(
posts.getTotalPages(),
posts.stream()
.filter(post -> checkReadPermissionBoolean(member, post.getBoardType()))
.sorted(Comparator.comparing(Post::getCreatedAt).reversed())
.map(GetPostsResponse::of)
.collect(Collectors.toList())
);
}


Expand All @@ -150,8 +151,7 @@ private boolean checkReadPermissionBoolean(Member user, BoardType board) {
}

private boolean checkWritePermissionBoolean(Member user, BoardType board) {
if (user == null || !user.isMember() || (!user.isAdmin() && board == BoardType.NOTICE)) return false;
return true;
return user != null && user.isMember() && (user.isAdmin() || board != BoardType.NOTICE);
}

private void checkWriter(Member member, Post post) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import lombok.RequiredArgsConstructor;
import org.poolc.api.member.domain.Member;
import org.poolc.api.post.dto.PostResponse;
import org.poolc.api.post.dto.GetBoardResponse;
import org.poolc.api.post.service.PostService;
import org.poolc.api.scrap.service.ScrapService;
import org.springframework.http.HttpStatus;
Expand All @@ -11,8 +11,6 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
@RequestMapping("/scrap")
@RequiredArgsConstructor
Expand All @@ -21,9 +19,9 @@ public class ScrapController {
private final PostService postService;

@GetMapping
public ResponseEntity<List<PostResponse>> viewMyScraps(@AuthenticationPrincipal Member member,
@RequestParam int page) {
List<PostResponse> responses = scrapService.viewMyPosts(member, page);
public ResponseEntity<GetBoardResponse> viewMyScraps(@AuthenticationPrincipal Member member,
@RequestParam int page) {
GetBoardResponse responses = scrapService.viewMyPosts(member, page);
return ResponseEntity.status(HttpStatus.OK).body(responses);
}

Expand Down
34 changes: 25 additions & 9 deletions src/main/java/org/poolc/api/scrap/service/ScrapService.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package org.poolc.api.scrap.service;

import lombok.RequiredArgsConstructor;
import org.poolc.api.common.exception.ConflictException;
import org.poolc.api.member.domain.Member;
import org.poolc.api.post.domain.Post;
import org.poolc.api.post.dto.PostResponse;
import org.poolc.api.post.dto.GetBoardResponse;
import org.poolc.api.post.dto.GetPostsResponse;
import org.poolc.api.post.service.PostService;
import org.poolc.api.scrap.domain.Scrap;
import org.poolc.api.scrap.repository.ScrapRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.NoSuchElementException;
import java.util.stream.Collectors;

Expand All @@ -21,12 +22,24 @@ public class ScrapService {
private final ScrapRepository scrapRepository;
private final PostService postService;

private static final int size = 15;
private static final int size = 10;

public void scrap(String memberId, Long postId) {
//check scrap exist
if (!scrapRepository.existsByMemberIdAndPostId(memberId, postId)) {
scrapRepository.save(new Scrap(memberId, postId));
}
else{
//already scrapped
throw new ConflictException("Already Scrapped");
}
}

public boolean isScrap(String memberId, Long postId){
if(scrapRepository.existsByMemberIdAndPostId(memberId, postId)) {
return true;
}
return false;
}

public void removeScrap(String memberId, Long postId) {
Expand All @@ -35,16 +48,19 @@ public void removeScrap(String memberId, Long postId) {
scrapRepository.deleteById(scrap.getId());
}

public List<PostResponse> viewMyPosts(Member member, int page) {
public GetBoardResponse viewMyPosts(Member member, int page) {
PageRequest pr = PageRequest.of(page, size);
Page<Scrap> scraps = scrapRepository.findAllByMemberId(member.getLoginID(), pr);
return scraps.stream()
.map(s -> scrapToPostResponse(member, s))
.collect(Collectors.toList());
return new GetBoardResponse(
scraps.getTotalPages(),
scraps.stream()
.map(s -> scrapToPostResponse(member, s))
.collect(Collectors.toList())
);
}

private PostResponse scrapToPostResponse(Member member, Scrap scrap) {
private GetPostsResponse scrapToPostResponse(Member member, Scrap scrap) {
Post post = postService.findPostById(member, scrap.getPostId());
return PostResponse.of(post);
return GetPostsResponse.of(post);
}
}

0 comments on commit fbf9f55

Please sign in to comment.