From 4db4431090ba31ccdd5b0c3a198c1e3af0176d06 Mon Sep 17 00:00:00 2001 From: jihhyeong Date: Sat, 18 Jan 2025 16:48:03 +0900 Subject: [PATCH 1/2] =?UTF-8?q?:sparkles:=20[Feat]=20=EB=82=B4=EA=B0=80=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=ED=95=9C=20=EA=B2=8C=EC=8B=9C=ED=8C=90=20?= =?UTF-8?q?=EA=B8=80=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/controller/BoardController.java | 8 ++++ .../dto/response/MyBoardListResponse.java | 39 +++++++++++++++++++ .../board/dto/response/MyBoardResponse.java | 37 ++++++++++++++++++ .../board/repository/BoardRepository.java | 4 +- .../board/service/BoardFacadeService.java | 9 +++++ .../content/board/service/BoardService.java | 12 ++++++ 6 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/gamegoo/gamegoo_v2/content/board/dto/response/MyBoardListResponse.java create mode 100644 src/main/java/com/gamegoo/gamegoo_v2/content/board/dto/response/MyBoardResponse.java diff --git a/src/main/java/com/gamegoo/gamegoo_v2/content/board/controller/BoardController.java b/src/main/java/com/gamegoo/gamegoo_v2/content/board/controller/BoardController.java index 639025a9..cc6f2125 100644 --- a/src/main/java/com/gamegoo/gamegoo_v2/content/board/controller/BoardController.java +++ b/src/main/java/com/gamegoo/gamegoo_v2/content/board/controller/BoardController.java @@ -10,6 +10,7 @@ import com.gamegoo.gamegoo_v2.content.board.dto.response.BoardInsertResponse; import com.gamegoo.gamegoo_v2.content.board.dto.response.BoardResponse; import com.gamegoo.gamegoo_v2.content.board.dto.response.BoardUpdateResponse; +import com.gamegoo.gamegoo_v2.content.board.dto.response.MyBoardResponse; import com.gamegoo.gamegoo_v2.content.board.service.BoardFacadeService; import com.gamegoo.gamegoo_v2.core.common.ApiResponse; import com.gamegoo.gamegoo_v2.core.common.annotation.ValidPage; @@ -110,5 +111,12 @@ public ApiResponse delete(@PathVariable Long boardId, @AuthMember Member return ApiResponse.ok("게시글을 삭제하였습니다."); } + @GetMapping("/my") + @Operation(summary = "내가 작성한 게시판 글 목록 조회 API", description = "내가 작성한 게시판 글을 조회하는 API 입니다. 페이지 당 10개의 게시물이 표시됩니다.") + @Parameter(name = "pageIdx", description = "조회할 페이지 번호를 입력해주세요.") + public ApiResponse getMyBoardList(@RequestParam(defaultValue = "1") int pageIdx, + @AuthMember Member member) { + return ApiResponse.ok(boardFacadeService.getMyBoardList(member, pageIdx)); + } } diff --git a/src/main/java/com/gamegoo/gamegoo_v2/content/board/dto/response/MyBoardListResponse.java b/src/main/java/com/gamegoo/gamegoo_v2/content/board/dto/response/MyBoardListResponse.java new file mode 100644 index 00000000..2f0b436d --- /dev/null +++ b/src/main/java/com/gamegoo/gamegoo_v2/content/board/dto/response/MyBoardListResponse.java @@ -0,0 +1,39 @@ +package com.gamegoo.gamegoo_v2.content.board.dto.response; + +import com.gamegoo.gamegoo_v2.account.member.domain.Member; +import com.gamegoo.gamegoo_v2.account.member.domain.Tier; +import com.gamegoo.gamegoo_v2.content.board.domain.Board; +import lombok.Builder; +import lombok.Getter; + +import java.time.LocalDateTime; + +@Getter +@Builder +public class MyBoardListResponse { + + long boardId; + long memberId; + Integer profileImage; + String gameName; + String tag; + Tier tier; + int rank; + String contents; + LocalDateTime createdAt; + + public static MyBoardListResponse of(Board board) { + Member member = board.getMember(); + return MyBoardListResponse.builder() + .boardId(board.getId()) + .memberId(member.getId()) + .profileImage(board.getBoardProfileImage()) + .gameName(member.getGameName()) + .tag(member.getTag()) + .tier(member.getTier()) + .rank(member.getGameRank()) + .createdAt(board.getCreatedAt()) + .build(); + } + +} diff --git a/src/main/java/com/gamegoo/gamegoo_v2/content/board/dto/response/MyBoardResponse.java b/src/main/java/com/gamegoo/gamegoo_v2/content/board/dto/response/MyBoardResponse.java new file mode 100644 index 00000000..c5a6d450 --- /dev/null +++ b/src/main/java/com/gamegoo/gamegoo_v2/content/board/dto/response/MyBoardResponse.java @@ -0,0 +1,37 @@ +package com.gamegoo.gamegoo_v2.content.board.dto.response; + +import com.gamegoo.gamegoo_v2.content.board.domain.Board; +import lombok.Builder; +import lombok.Getter; +import org.springframework.data.domain.Page; + +import java.util.List; +import java.util.stream.Collectors; + +@Getter +@Builder +public class MyBoardResponse { + + Integer totalPage; + Integer totalCount; + List myBoards; + + public static MyBoardResponse of(Page boardPage) { + // 전체 페이지/개수 추출 + int totalCount = (int) boardPage.getTotalElements(); + int totalPage = (boardPage.getTotalPages() == 0) ? 1 : boardPage.getTotalPages(); + + // Board -> MyBoardListResponse 변환 + List boardList = boardPage.getContent().stream() + .map(MyBoardListResponse::of) + .collect(Collectors.toList()); + + // DTO 생성 + return MyBoardResponse.builder() + .totalPage(totalPage) + .totalCount(totalCount) + .myBoards(boardList) + .build(); + } + +} diff --git a/src/main/java/com/gamegoo/gamegoo_v2/content/board/repository/BoardRepository.java b/src/main/java/com/gamegoo/gamegoo_v2/content/board/repository/BoardRepository.java index 10e15d11..a07e4b39 100644 --- a/src/main/java/com/gamegoo/gamegoo_v2/content/board/repository/BoardRepository.java +++ b/src/main/java/com/gamegoo/gamegoo_v2/content/board/repository/BoardRepository.java @@ -26,6 +26,8 @@ Page findByFilters(@Param("mode") Integer mode, Optional findByIdAndDeleted(Long boardId, boolean b); - + + + Page findByMemberIdAndDeletedFalse(Long memberId, Pageable pageable); } diff --git a/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardFacadeService.java b/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardFacadeService.java index ed0378a2..fb0609ae 100644 --- a/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardFacadeService.java +++ b/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardFacadeService.java @@ -11,6 +11,7 @@ import com.gamegoo.gamegoo_v2.content.board.dto.response.BoardInsertResponse; import com.gamegoo.gamegoo_v2.content.board.dto.response.BoardResponse; import com.gamegoo.gamegoo_v2.content.board.dto.response.BoardUpdateResponse; +import com.gamegoo.gamegoo_v2.content.board.dto.response.MyBoardResponse; import com.gamegoo.gamegoo_v2.core.common.annotation.ValidPage; import com.gamegoo.gamegoo_v2.social.block.service.BlockService; import com.gamegoo.gamegoo_v2.social.friend.service.FriendService; @@ -117,5 +118,13 @@ public void deleteBoard(Member member, Long boardId) { boardService.deleteBoard(boardId, member.getId()); } + /** + * 내가 작성한 게시글 목록 조회 (파사드) + */ + public MyBoardResponse getMyBoardList(Member member, int pageIdx) { + Page boardPage = boardService.getMyBoards(member.getId(), pageIdx, 10); + return MyBoardResponse.of(boardPage); + } + } diff --git a/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardService.java b/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardService.java index be05d8ef..38b314d0 100644 --- a/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardService.java +++ b/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardService.java @@ -112,6 +112,18 @@ public void deleteBoard(Long boardId, Long memberId) { boardRepository.save(board); } + /** + * 내가 작성한 게시글(Page) 조회 + */ + public Page getMyBoards(Long memberId, int pageIdx, int pageSize) { + if (pageIdx <= 0) { + throw new IllegalArgumentException("pageIdx는 1 이상의 값이어야 합니다."); + } + // PageRequest.of의 첫 번째 인자(pageIdx - 1)는 0-based index + Pageable pageable = PageRequest.of(pageIdx - 1, pageSize, Sort.by(Sort.Direction.DESC, "createdAt")); + return boardRepository.findByMemberIdAndDeletedFalse(memberId, pageable); + } + /** * Board 저장 */ From 617f13354dd3043aa48a38b2aa1c5fac565948be Mon Sep 17 00:00:00 2001 From: jihhyeong Date: Sun, 19 Jan 2025 16:57:31 +0900 Subject: [PATCH 2/2] =?UTF-8?q?:bug:=20[Fix]=20=EB=B0=A9=EC=8B=9D=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gamegoo_v2/content/board/controller/BoardController.java | 4 ++-- .../gamegoo_v2/content/board/service/BoardFacadeService.java | 2 +- .../gamegoo_v2/content/board/service/BoardService.java | 5 +++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gamegoo/gamegoo_v2/content/board/controller/BoardController.java b/src/main/java/com/gamegoo/gamegoo_v2/content/board/controller/BoardController.java index cc6f2125..1aebbcd0 100644 --- a/src/main/java/com/gamegoo/gamegoo_v2/content/board/controller/BoardController.java +++ b/src/main/java/com/gamegoo/gamegoo_v2/content/board/controller/BoardController.java @@ -114,9 +114,9 @@ public ApiResponse delete(@PathVariable Long boardId, @AuthMember Member @GetMapping("/my") @Operation(summary = "내가 작성한 게시판 글 목록 조회 API", description = "내가 작성한 게시판 글을 조회하는 API 입니다. 페이지 당 10개의 게시물이 표시됩니다.") @Parameter(name = "pageIdx", description = "조회할 페이지 번호를 입력해주세요.") - public ApiResponse getMyBoardList(@RequestParam(defaultValue = "1") int pageIdx, + public ApiResponse getMyBoardList(@ValidPage @RequestParam(name = "page") Integer page, @AuthMember Member member) { - return ApiResponse.ok(boardFacadeService.getMyBoardList(member, pageIdx)); + return ApiResponse.ok(boardFacadeService.getMyBoardList(member, page)); } } diff --git a/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardFacadeService.java b/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardFacadeService.java index fb0609ae..254bf1b6 100644 --- a/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardFacadeService.java +++ b/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardFacadeService.java @@ -122,7 +122,7 @@ public void deleteBoard(Member member, Long boardId) { * 내가 작성한 게시글 목록 조회 (파사드) */ public MyBoardResponse getMyBoardList(Member member, int pageIdx) { - Page boardPage = boardService.getMyBoards(member.getId(), pageIdx, 10); + Page boardPage = boardService.getMyBoards(member.getId(), pageIdx); return MyBoardResponse.of(boardPage); } diff --git a/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardService.java b/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardService.java index 38b314d0..a87d24a0 100644 --- a/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardService.java +++ b/src/main/java/com/gamegoo/gamegoo_v2/content/board/service/BoardService.java @@ -23,6 +23,7 @@ public class BoardService { private final BoardRepository boardRepository; public static final int PAGE_SIZE = 20; + public static final int MY_PAGE_SIZE = 10; /** * 게시글 엔티티 생성 및 저장 @@ -115,12 +116,12 @@ public void deleteBoard(Long boardId, Long memberId) { /** * 내가 작성한 게시글(Page) 조회 */ - public Page getMyBoards(Long memberId, int pageIdx, int pageSize) { + public Page getMyBoards(Long memberId, int pageIdx) { if (pageIdx <= 0) { throw new IllegalArgumentException("pageIdx는 1 이상의 값이어야 합니다."); } // PageRequest.of의 첫 번째 인자(pageIdx - 1)는 0-based index - Pageable pageable = PageRequest.of(pageIdx - 1, pageSize, Sort.by(Sort.Direction.DESC, "createdAt")); + Pageable pageable = PageRequest.of(pageIdx - 1, MY_PAGE_SIZE, Sort.by(Sort.Direction.DESC, "createdAt")); return boardRepository.findByMemberIdAndDeletedFalse(memberId, pageable); }