Skip to content

Commit 4edeab8

Browse files
authored
Merge pull request #157 from Modagbul/feat/alarm_minsu
fix: 게시글 조회할 때 닉네임, 프로필 이미지 바뀐 것 반영하게 수정
2 parents 7fb90e1 + d0aa96a commit 4edeab8

File tree

11 files changed

+68
-75
lines changed

11 files changed

+68
-75
lines changed

src/main/java/com/moing/backend/domain/board/application/dto/response/BoardBlocks.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ public class BoardBlocks {
2828

2929
private Boolean writerIsDeleted;
3030

31+
private boolean isNotice;
32+
33+
3134
@QueryProjection
32-
public BoardBlocks(Long boardId, String writerNickName, Boolean writerIsLeader, String writerProfileImage, String title, String content, Integer commentNum, Boolean writerIsDeleted) {
35+
public BoardBlocks(Long boardId, String writerNickName, Boolean writerIsLeader, String writerProfileImage, String title, String content, Integer commentNum, Boolean writerIsDeleted, boolean isNotice) {
3336
this.boardId = boardId;
3437
this.writerNickName = writerNickName;
3538
this.writerIsLeader = writerIsLeader;
@@ -39,13 +42,18 @@ public BoardBlocks(Long boardId, String writerNickName, Boolean writerIsLeader,
3942
this.commentNum = commentNum;
4043
this.isRead = false;
4144
this.writerIsDeleted=writerIsDeleted;
45+
this.isNotice=isNotice;
4246
deleteMember();
4347
}
4448

4549
public void readBoard() {
4650
this.isRead = true;
4751
}
4852

53+
public boolean isNotice() {
54+
return isNotice;
55+
}
56+
4957
public void deleteMember() {
5058
if(Boolean.TRUE.equals(writerIsDeleted)) {
5159
this.writerNickName = "(알 수 없음)";

src/main/java/com/moing/backend/domain/board/application/mapper/BoardMapper.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@
1717
@RequiredArgsConstructor
1818
public class BoardMapper {
1919

20-
public Board toBoard(Member member, TeamMember teamMember, Team team, CreateBoardRequest createBoardRequest, boolean isLeader) {
20+
public Board toBoard(TeamMember teamMember, Team team, CreateBoardRequest createBoardRequest, boolean isLeader) {
2121
Board board = Board.builder()
22-
.writerNickName(member.getNickName())
23-
.writerProfileImage(member.getProfileImage())
2422
.title(createBoardRequest.getTitle())
2523
.content(createBoardRequest.getContent())
2624
.isNotice(createBoardRequest.getIsNotice())
@@ -35,8 +33,8 @@ public Board toBoard(Member member, TeamMember teamMember, Team team, CreateBoar
3533
}
3634

3735
public GetBoardDetailResponse toBoardDetail(Board board, boolean isWriter, boolean writerIsDeleted) {
38-
String nickName = writerIsDeleted ? "(알 수 없음)" : board.getWriterNickName();
39-
String writerProfileImage = writerIsDeleted ? null : board.getWriterProfileImage();
36+
String nickName = writerIsDeleted ? "(알 수 없음)" : board.getTeamMember().getMember().getNickName();
37+
String writerProfileImage = writerIsDeleted ? null : board.getTeamMember().getMember().getProfileImage();
4038
return GetBoardDetailResponse.builder()
4139
.boardId(board.getBoardId())
4240
.title(board.getTitle())

src/main/java/com/moing/backend/domain/board/application/service/CreateBoardUseCase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public CreateBoardResponse createBoard(String socialId, Long teamId, CreateBoard
3939
//1, 게시글 생성, 저장
4040
BaseServiceResponse data=baseService.getCommonData(socialId, teamId);
4141
boolean isLeader = checkLeaderUseCase.isTeamLeader(data.getMember(), data.getTeam()); //작성자 리더 여부
42-
Board board=boardSaveService.saveBoard(boardMapper.toBoard(data.getMember(), data.getTeamMember(), data.getTeam(), createBoardRequest, isLeader));
42+
Board board=boardSaveService.saveBoard(boardMapper.toBoard(data.getTeamMember(), data.getTeam(), createBoardRequest, isLeader));
4343

4444
//2. 읽음 처리 - 생성한 사람은 무조건 읽음
4545
createBoardReadUseCase.createBoardRead(data.getTeam(), data.getMember(), board);

src/main/java/com/moing/backend/domain/board/domain/entity/Board.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.moing.backend.domain.team.domain.entity.Team;
77
import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
88
import com.moing.backend.global.entity.BaseTimeEntity;
9-
import com.moing.backend.global.utils.AesConverter;
109
import lombok.AllArgsConstructor;
1110
import lombok.Builder;
1211
import lombok.Getter;
@@ -28,14 +27,8 @@ public class Board extends BaseTimeEntity {
2827
@Column(name = "board_id")
2928
private Long boardId;
3029

31-
//반정규화 -> 작성자에 대한 정보
32-
@Convert(converter = AesConverter.class)
33-
@Column(nullable = false)
34-
private String writerNickName; /*작성자 닉네임*/
35-
3630
private boolean isLeader; /*작성자 소모임장유무*/
3731

38-
private String writerProfileImage; /*작성자 프로필 사진*/
3932

4033
@Column(nullable = false, length = 15)
4134
private String title;
@@ -52,6 +45,7 @@ public class Board extends BaseTimeEntity {
5245
@JoinColumn(name = "team_member_id")
5346
private TeamMember teamMember;
5447

48+
5549
@ManyToOne(fetch = FetchType.LAZY)
5650
@JoinColumn(name = "team_id")
5751
private Team team;

src/main/java/com/moing/backend/domain/board/domain/repository/BoardCustomRepositoryImpl.java

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,72 +2,69 @@
22

33
import com.moing.backend.domain.board.application.dto.response.BoardBlocks;
44
import com.moing.backend.domain.board.application.dto.response.GetAllBoardResponse;
5-
import com.moing.backend.domain.board.domain.entity.Board;
6-
import com.moing.backend.domain.teamMember.domain.entity.QTeamMember;
5+
import com.moing.backend.domain.board.application.dto.response.QBoardBlocks;
76
import com.querydsl.jpa.impl.JPAQueryFactory;
87

98
import javax.persistence.EntityManager;
109
import java.util.List;
11-
import java.util.function.Function;
1210
import java.util.stream.Collectors;
1311

1412
import static com.moing.backend.domain.board.domain.entity.QBoard.board;
1513
import static com.moing.backend.domain.boardRead.domain.entity.QBoardRead.boardRead;
14+
import static com.moing.backend.domain.member.domain.entity.QMember.member;
15+
import static com.moing.backend.domain.teamMember.domain.entity.QTeamMember.teamMember;
1616

1717
public class BoardCustomRepositoryImpl implements BoardCustomRepository {
1818

1919
private final JPAQueryFactory queryFactory;
2020
public BoardCustomRepositoryImpl(EntityManager em) {
2121
this.queryFactory = new JPAQueryFactory(em);
2222
}
23-
2423
@Override
2524
public GetAllBoardResponse findBoardAll(Long teamId, Long memberId) {
25+
2626
// 전체 게시글 보기
27-
List<Board> allBoards = queryFactory.selectFrom(board)
28-
.distinct()
29-
.leftJoin(board.teamMember, QTeamMember.teamMember).fetchJoin() // TeamMember를 함께 로드
27+
List<BoardBlocks> allBoardBlocks = queryFactory
28+
.select(new QBoardBlocks(
29+
board.boardId,
30+
board.teamMember.member.nickName,
31+
board.isLeader,
32+
board.teamMember.member.profileImage,
33+
board.title,
34+
board.content,
35+
board.commentNum,
36+
board.teamMember.isDeleted,
37+
board.isNotice
38+
))
39+
.from(board)
40+
.leftJoin(board.teamMember, teamMember)
41+
.leftJoin(board.teamMember.member, member)
3042
.where(board.team.teamId.eq(teamId))
3143
.orderBy(board.createdDate.desc())
3244
.fetch();
3345

34-
// 읽은 게시글 보기
35-
List<Board> readBoards = queryFactory.selectFrom(board)
36-
.distinct()
37-
.leftJoin(board.teamMember, QTeamMember.teamMember).fetchJoin() // TeamMember를 함께 로드
38-
.join(boardRead).on(boardRead.board.eq(board))
39-
.where(board.team.teamId.eq(teamId))
46+
// 읽은 게시글 목록 조회
47+
List<Long> readBoardIds = queryFactory
48+
.select(boardRead.board.boardId)
49+
.from(boardRead)
4050
.where(boardRead.member.memberId.eq(memberId))
41-
.groupBy(board.boardId)
42-
.orderBy(board.createdDate.desc())
51+
.where(boardRead.board.team.teamId.eq(teamId))
4352
.fetch();
4453

45-
// 공지와 일반 게시글로 나누기
46-
List<Board> notices = allBoards.stream().filter(Board::isNotice).collect(Collectors.toList());
47-
List<Board> regularPosts = allBoards.stream().filter(b -> !b.isNotice()).collect(Collectors.toList());
48-
49-
// Board -> BoardBlocks 변환
50-
Function<Board, BoardBlocks> toBoardBlocks = b -> {
51-
boolean isRead = readBoards.contains(b);
52-
BoardBlocks boardBlocks = new BoardBlocks(
53-
b.getBoardId(),
54-
b.getWriterNickName(),
55-
b.isLeader(),
56-
b.getWriterProfileImage(),
57-
b.getTitle(),
58-
b.getContent(),
59-
b.getCommentNum(),
60-
b.getTeamMember().isDeleted()
61-
);
62-
if (isRead) {
63-
boardBlocks.readBoard();
54+
// 읽은 게시글 표시
55+
allBoardBlocks.forEach(boardBlock -> {
56+
if (readBoardIds.contains(boardBlock.getBoardId())) {
57+
boardBlock.readBoard();
6458
}
59+
});
6560

66-
return boardBlocks;
67-
};
68-
69-
List<BoardBlocks> noticeBlocks = notices.stream().map(toBoardBlocks).collect(Collectors.toList());
70-
List<BoardBlocks> regularBlocks = regularPosts.stream().map(toBoardBlocks).collect(Collectors.toList());
61+
// 공지와 일반 게시글로 나누기
62+
List<BoardBlocks> noticeBlocks = allBoardBlocks.stream()
63+
.filter(BoardBlocks::isNotice)
64+
.collect(Collectors.toList());
65+
List<BoardBlocks> regularBlocks = allBoardBlocks.stream()
66+
.filter(b -> !b.isNotice())
67+
.collect(Collectors.toList());
7168

7269
return new GetAllBoardResponse(noticeBlocks.size(), noticeBlocks, regularBlocks.size(), regularBlocks);
7370
}

src/main/java/com/moing/backend/domain/boardComment/application/mapper/BoardCommentMapper.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,16 @@
33
import com.moing.backend.domain.board.domain.entity.Board;
44
import com.moing.backend.domain.boardComment.application.dto.request.CreateBoardCommentRequest;
55
import com.moing.backend.domain.boardComment.domain.entity.BoardComment;
6-
import com.moing.backend.domain.member.domain.entity.Member;
76
import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
87
import lombok.RequiredArgsConstructor;
98
import org.springframework.stereotype.Component;
109

1110
@Component
1211
@RequiredArgsConstructor
1312
public class BoardCommentMapper {
14-
public BoardComment toBoardComment(Member member, TeamMember teamMember, Board board, CreateBoardCommentRequest createBoardCommentRequest, boolean isLeader){
13+
public BoardComment toBoardComment(TeamMember teamMember, Board board, CreateBoardCommentRequest createBoardCommentRequest, boolean isLeader) {
1514
BoardComment boardComment= BoardComment.builder()
1615
.content(createBoardCommentRequest.getContent())
17-
.writerNickName(member.getNickName())
18-
.writerProfileImage(member.getProfileImage())
1916
.isLeader(isLeader)
2017
.build();
2118
boardComment.updateBoard(board);

src/main/java/com/moing/backend/domain/boardComment/application/service/CreateBoardCommentUseCase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public CreateBoardCommentResponse createBoardComment(String socialId, Long teamI
3030
// 1. 게시글 댓글 생성
3131
BaseBoardServiceResponse data = baseBoardService.getCommonData(socialId, teamId, boardId);
3232
boolean isLeader = checkLeaderUseCase.isTeamLeader(data.getMember(), data.getTeam());
33-
BoardComment boardComment = boardCommentSaveService.saveBoardComment(boardCommentMapper.toBoardComment(data.getMember(), data.getTeamMember(), data.getBoard(), createBoardCommentRequest, isLeader));
33+
BoardComment boardComment = boardCommentSaveService.saveBoardComment(boardCommentMapper.toBoardComment(data.getTeamMember(), data.getBoard(), createBoardCommentRequest, isLeader));
3434
// 2. 게시글 댓글 개수 증가
3535
data.getBoard().incrComNum();
3636
return new CreateBoardCommentResponse(boardComment.getBoardCommentId());

src/main/java/com/moing/backend/domain/boardComment/domain/entity/BoardComment.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.moing.backend.domain.board.domain.entity.Board;
44
import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
55
import com.moing.backend.global.entity.BaseTimeEntity;
6-
import com.moing.backend.global.utils.AesConverter;
76
import lombok.AllArgsConstructor;
87
import lombok.Builder;
98
import lombok.Getter;
@@ -34,15 +33,8 @@ public class BoardComment extends BaseTimeEntity {
3433
@JoinColumn(name = "board_id")
3534
private Board board;
3635

37-
//반정규화 -> 작성자에 대한 정보
38-
@Convert(converter = AesConverter.class)
39-
@Column(nullable = false)
40-
private String writerNickName; /*작성자 닉네임*/
41-
4236
private boolean isLeader; /*작성자 소모임장유무*/
4337

44-
private String writerProfileImage; /*작성자 프로필 사진*/
45-
4638
/**
4739
* 연관관계 매핑
4840
*/

src/main/java/com/moing/backend/domain/boardComment/domain/repository/BoardCommentCustomRepositoryImpl.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
import com.moing.backend.domain.teamMember.domain.entity.QTeamMember;
77
import com.moing.backend.domain.teamMember.domain.entity.TeamMember;
88
import com.querydsl.core.types.ExpressionUtils;
9-
import com.querydsl.core.types.Projections;
109
import com.querydsl.jpa.JPAExpressions;
1110
import com.querydsl.jpa.impl.JPAQueryFactory;
1211

1312
import javax.persistence.EntityManager;
1413
import java.util.List;
1514

1615
import static com.moing.backend.domain.boardComment.domain.entity.QBoardComment.boardComment;
16+
import static com.moing.backend.domain.member.domain.entity.QMember.member;
1717

1818
public class BoardCommentCustomRepositoryImpl implements BoardCommentCustomRepository{
1919

@@ -30,9 +30,9 @@ public GetBoardCommentResponse findBoardCommentAll(Long boardId, TeamMember team
3030
.select(new QCommentBlocks(
3131
boardComment.boardCommentId,
3232
boardComment.content,
33-
boardComment.writerNickName,
33+
boardComment.teamMember.member.nickName,
3434
boardComment.isLeader,
35-
boardComment.writerProfileImage,
35+
boardComment.teamMember.member.profileImage,
3636
ExpressionUtils.as(JPAExpressions
3737
.selectOne()
3838
.from(QTeamMember.teamMember)
@@ -42,6 +42,8 @@ public GetBoardCommentResponse findBoardCommentAll(Long boardId, TeamMember team
4242
boardComment.teamMember.isDeleted,
4343
boardComment.createdDate))
4444
.from(boardComment)
45+
.leftJoin(boardComment.teamMember, QTeamMember.teamMember)
46+
.leftJoin(boardComment.teamMember.member, member)
4547
.where(boardComment.board.boardId.eq(boardId))
4648
.orderBy(boardComment.createdDate.asc())
4749
.fetch();

src/main/java/com/moing/backend/domain/mypage/domain/entity/Feedback.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package com.moing.backend.domain.mypage.domain.entity;
22

33
import com.moing.backend.global.entity.BaseTimeEntity;
4-
import lombok.AllArgsConstructor;
5-
import lombok.Builder;
6-
import lombok.NoArgsConstructor;
7-
import lombok.RequiredArgsConstructor;
4+
import lombok.*;
85

96
import javax.persistence.*;
107

118

9+
@Builder
10+
@NoArgsConstructor
11+
@AllArgsConstructor
12+
@Getter
1213
@Entity
1314
public class Feedback extends BaseTimeEntity {
1415

src/test/java/com/moing/backend/domain/board/presentation/BoardControllerTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ public void get_board_all() throws Exception {
199199
.content("공지 내용")
200200
.commentNum(2)
201201
.isRead(false)
202+
.isNotice(true)
202203
.build();
203204

204205
BoardBlocks notNoticeBlock = BoardBlocks.builder()
@@ -211,6 +212,7 @@ public void get_board_all() throws Exception {
211212
.content("게시글 내용")
212213
.commentNum(2)
213214
.isRead(false)
215+
.isNotice(false)
214216
.build();
215217

216218
noticeBlocks.add(noticeBlock);
@@ -253,6 +255,7 @@ public void get_board_all() throws Exception {
253255
fieldWithPath("data.noticeBlocks[0].content").description("공지 내용"),
254256
fieldWithPath("data.noticeBlocks[0].commentNum").description("공지 댓글 개수"),
255257
fieldWithPath("data.noticeBlocks[0].isRead").description("공지 읽음 처리 여부"),
258+
fieldWithPath("data.noticeBlocks[0].notice").description("true"),
256259
fieldWithPath("data.notNoticeNum").description("일반 게시글 개수"),
257260
fieldWithPath("data.notNoticeBlocks[0].boardId").description("일반 게시글 아이디"),
258261
fieldWithPath("data.notNoticeBlocks[0].writerNickName").description("작성자 닉네임"),
@@ -262,8 +265,9 @@ public void get_board_all() throws Exception {
262265
fieldWithPath("data.notNoticeBlocks[0].title").description("일반 게시글 제목"),
263266
fieldWithPath("data.notNoticeBlocks[0].content").description("일반 게시글 내용"),
264267
fieldWithPath("data.notNoticeBlocks[0].commentNum").description("일반 게시글 댓글 개수"),
265-
fieldWithPath("data.notNoticeBlocks[0].isRead").description("일반 게시글 읽음 처리 여부")
266-
)
268+
fieldWithPath("data.notNoticeBlocks[0].isRead").description("일반 게시글 읽음 처리 여부"),
269+
fieldWithPath("data.notNoticeBlocks[0].notice").description("false")
270+
)
267271

268272
)
269273
);

0 commit comments

Comments
 (0)