Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat/161] 내가 작성한 게시판 글 목록 조회 API #170

Merged
merged 2 commits into from
Jan 20, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -110,5 +111,12 @@ public ApiResponse<String> delete(@PathVariable Long boardId, @AuthMember Member
return ApiResponse.ok("게시글을 삭제하였습니다.");
}

@GetMapping("/my")
@Operation(summary = "내가 작성한 게시판 글 목록 조회 API", description = "내가 작성한 게시판 글을 조회하는 API 입니다. 페이지 당 10개의 게시물이 표시됩니다.")
@Parameter(name = "pageIdx", description = "조회할 페이지 번호를 입력해주세요.")
public ApiResponse<MyBoardResponse> getMyBoardList(@RequestParam(defaultValue = "1") int pageIdx,
@AuthMember Member member) {
return ApiResponse.ok(boardFacadeService.getMyBoardList(member, pageIdx));
}

}
Original file line number Diff line number Diff line change
@@ -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();
}

}
Original file line number Diff line number Diff line change
@@ -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<MyBoardListResponse> myBoards;

public static MyBoardResponse of(Page<Board> boardPage) {
// 전체 페이지/개수 추출
int totalCount = (int) boardPage.getTotalElements();
int totalPage = (boardPage.getTotalPages() == 0) ? 1 : boardPage.getTotalPages();

// Board -> MyBoardListResponse 변환
List<MyBoardListResponse> boardList = boardPage.getContent().stream()
.map(MyBoardListResponse::of)
.collect(Collectors.toList());

// DTO 생성
return MyBoardResponse.builder()
.totalPage(totalPage)
.totalCount(totalCount)
.myBoards(boardList)
.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ Page<Board> findByFilters(@Param("mode") Integer mode,


Optional<Board> findByIdAndDeleted(Long boardId, boolean b);



Page<Board> findByMemberIdAndDeletedFalse(Long memberId, Pageable pageable);

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -117,5 +118,13 @@ public void deleteBoard(Member member, Long boardId) {
boardService.deleteBoard(boardId, member.getId());
}

/**
* 내가 작성한 게시글 목록 조회 (파사드)
*/
public MyBoardResponse getMyBoardList(Member member, int pageIdx) {
Page<Board> boardPage = boardService.getMyBoards(member.getId(), pageIdx, 10);
return MyBoardResponse.of(boardPage);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,18 @@ public void deleteBoard(Long boardId, Long memberId) {
boardRepository.save(board);
}

/**
* 내가 작성한 게시글(Page) 조회
*/
public Page<Board> 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 저장
*/
Expand Down
Loading