diff --git a/backend/src/main/java/com/zzang/chongdae/comment/domain/CommentWithRole.java b/backend/src/main/java/com/zzang/chongdae/comment/domain/CommentWithRole.java deleted file mode 100644 index b81ae7057..000000000 --- a/backend/src/main/java/com/zzang/chongdae/comment/domain/CommentWithRole.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zzang.chongdae.comment.domain; - -import com.zzang.chongdae.comment.repository.entity.CommentEntity; -import com.zzang.chongdae.offeringmember.domain.OfferingMemberRole; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public class CommentWithRole { - - private final CommentEntity comment; - private final OfferingMemberRole role; -} diff --git a/backend/src/main/java/com/zzang/chongdae/comment/repository/CommentRepository.java b/backend/src/main/java/com/zzang/chongdae/comment/repository/CommentRepository.java index cee837309..004835a42 100644 --- a/backend/src/main/java/com/zzang/chongdae/comment/repository/CommentRepository.java +++ b/backend/src/main/java/com/zzang/chongdae/comment/repository/CommentRepository.java @@ -1,25 +1,14 @@ package com.zzang.chongdae.comment.repository; -import com.zzang.chongdae.comment.domain.CommentWithRole; import com.zzang.chongdae.comment.repository.entity.CommentEntity; import com.zzang.chongdae.offering.repository.entity.OfferingEntity; import java.util.List; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; public interface CommentRepository extends JpaRepository { - @Query(""" - SELECT new com.zzang.chongdae.comment.domain.CommentWithRole(c, om.role) - FROM CommentEntity as c JOIN OfferingMemberEntity as om - ON c.offering = om.offering AND c.member = om.member - WHERE om.offering = :offering - ORDER BY c.createdAt - """) - List findAllWithRoleByOffering(OfferingEntity offering); + List findAllByOfferingOrderByCreatedAt(OfferingEntity offering); Optional findTopByOfferingOrderByCreatedAtDesc(OfferingEntity offering); - - Boolean existsByOffering(OfferingEntity offering); } diff --git a/backend/src/main/java/com/zzang/chongdae/comment/repository/entity/CommentEntity.java b/backend/src/main/java/com/zzang/chongdae/comment/repository/entity/CommentEntity.java index 28d48244b..8cacf4715 100644 --- a/backend/src/main/java/com/zzang/chongdae/comment/repository/entity/CommentEntity.java +++ b/backend/src/main/java/com/zzang/chongdae/comment/repository/entity/CommentEntity.java @@ -42,4 +42,8 @@ public class CommentEntity extends BaseTimeEntity { public CommentEntity(MemberEntity member, OfferingEntity offering, String content) { this(null, member, offering, content); } + + public boolean isOwnedBy(MemberEntity other) { + return this.member.isSame(other); + } } diff --git a/backend/src/main/java/com/zzang/chongdae/comment/service/CommentService.java b/backend/src/main/java/com/zzang/chongdae/comment/service/CommentService.java index f61e44d6e..4da6fe0ca 100644 --- a/backend/src/main/java/com/zzang/chongdae/comment/service/CommentService.java +++ b/backend/src/main/java/com/zzang/chongdae/comment/service/CommentService.java @@ -1,23 +1,18 @@ package com.zzang.chongdae.comment.service; -import com.zzang.chongdae.comment.domain.CommentWithRole; import com.zzang.chongdae.comment.repository.CommentRepository; import com.zzang.chongdae.comment.repository.entity.CommentEntity; import com.zzang.chongdae.comment.service.dto.CommentAllResponse; import com.zzang.chongdae.comment.service.dto.CommentAllResponseItem; -import com.zzang.chongdae.comment.service.dto.CommentCreatedAtResponse; import com.zzang.chongdae.comment.service.dto.CommentLatestResponse; import com.zzang.chongdae.comment.service.dto.CommentRoomAllResponse; import com.zzang.chongdae.comment.service.dto.CommentRoomAllResponseItem; import com.zzang.chongdae.comment.service.dto.CommentSaveRequest; import com.zzang.chongdae.global.exception.MarketException; -import com.zzang.chongdae.member.repository.MemberRepository; import com.zzang.chongdae.member.repository.entity.MemberEntity; -import com.zzang.chongdae.offering.domain.OfferingWithRole; import com.zzang.chongdae.offering.exception.OfferingErrorCode; import com.zzang.chongdae.offering.repository.OfferingRepository; import com.zzang.chongdae.offering.repository.entity.OfferingEntity; -import com.zzang.chongdae.offeringmember.domain.OfferingMemberRole; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -28,7 +23,6 @@ public class CommentService { private final CommentRepository commentRepository; - private final MemberRepository memberRepository; private final OfferingRepository offeringRepository; public Long saveComment(CommentSaveRequest request, MemberEntity member) { @@ -41,52 +35,29 @@ public Long saveComment(CommentSaveRequest request, MemberEntity member) { } public CommentRoomAllResponse getAllCommentRoom(MemberEntity member) { - List offeringsWithRole = offeringRepository.findAllWithRoleByMember(member); - List responseItems = offeringsWithRole.stream() - .filter(offeringWithRole -> offeringWithRole.getOffering().hasParticipant()) - .map(this::toCommentRoomAllResponseItem) + List commentRooms = offeringRepository.findCommentRoomsByMember(member); + List responseItems = commentRooms.stream() + .map(commentsRoom -> toCommentRoomAllResponseItem(commentsRoom, member)) .toList(); return new CommentRoomAllResponse(responseItems); } - private CommentRoomAllResponseItem toCommentRoomAllResponseItem(OfferingWithRole offeringWithRole) { - OfferingEntity offering = offeringWithRole.getOffering(); - OfferingMemberRole role = offeringWithRole.getRole(); - return new CommentRoomAllResponseItem( - offering.getId(), - offering.getTitle(), - toCommentLatestResponse(offering), - role.isProposer()); - } - - private CommentLatestResponse toCommentLatestResponse(OfferingEntity offering) { - Optional rawComment = commentRepository.findTopByOfferingOrderByCreatedAtDesc(offering); - return rawComment + private CommentRoomAllResponseItem toCommentRoomAllResponseItem(OfferingEntity offering, MemberEntity member) { + Optional comment = commentRepository.findTopByOfferingOrderByCreatedAtDesc(offering); + CommentLatestResponse commentLatestResponse = comment .map(CommentLatestResponse::new) .orElseGet(() -> new CommentLatestResponse(null, null)); + return new CommentRoomAllResponseItem(offering, member, commentLatestResponse); } public CommentAllResponse getAllComment(Long offeringId, MemberEntity member) { OfferingEntity offering = offeringRepository.findById(offeringId) .orElseThrow(() -> new MarketException(OfferingErrorCode.NOT_FOUND)); - List commentsWithRole = commentRepository.findAllWithRoleByOffering(offering); - List responseItems = commentsWithRole.stream() - .map(commentWithRole -> toCommentAllResponseItem(commentWithRole, member.getId())) + List comments = commentRepository.findAllByOfferingOrderByCreatedAt(offering); + List responseItems = comments.stream() + .map(comment -> new CommentAllResponseItem(comment, member)) .toList(); return new CommentAllResponse(responseItems); } - - private CommentAllResponseItem toCommentAllResponseItem(CommentWithRole commentWithRole, long loginMemberId) { - CommentEntity comment = commentWithRole.getComment(); - OfferingMemberRole role = commentWithRole.getRole(); - MemberEntity member = comment.getMember(); - return new CommentAllResponseItem( - comment.getId(), - new CommentCreatedAtResponse(comment.getCreatedAt()), - comment.getContent(), - member.getNickname(), - role.isProposer(), - member.isSameMember(loginMemberId)); - } } diff --git a/backend/src/main/java/com/zzang/chongdae/comment/service/dto/CommentAllResponseItem.java b/backend/src/main/java/com/zzang/chongdae/comment/service/dto/CommentAllResponseItem.java index dd403c7c2..0dd1a0d0c 100644 --- a/backend/src/main/java/com/zzang/chongdae/comment/service/dto/CommentAllResponseItem.java +++ b/backend/src/main/java/com/zzang/chongdae/comment/service/dto/CommentAllResponseItem.java @@ -1,9 +1,21 @@ package com.zzang.chongdae.comment.service.dto; +import com.zzang.chongdae.comment.repository.entity.CommentEntity; +import com.zzang.chongdae.member.repository.entity.MemberEntity; + public record CommentAllResponseItem(Long commentId, CommentCreatedAtResponse createdAt, String content, String nickname, - Boolean isProposer, - Boolean isMine) { + boolean isProposer, + boolean isMine) { + + public CommentAllResponseItem(CommentEntity comment, MemberEntity member) { + this(comment.getId(), + new CommentCreatedAtResponse(comment.getCreatedAt()), + comment.getContent(), + comment.getMember().getNickname(), + comment.getOffering().isProposedBy(comment.getMember()), + comment.isOwnedBy(member)); + } } diff --git a/backend/src/main/java/com/zzang/chongdae/comment/service/dto/CommentRoomAllResponseItem.java b/backend/src/main/java/com/zzang/chongdae/comment/service/dto/CommentRoomAllResponseItem.java index ca4fcc1d2..f68c5e1ba 100644 --- a/backend/src/main/java/com/zzang/chongdae/comment/service/dto/CommentRoomAllResponseItem.java +++ b/backend/src/main/java/com/zzang/chongdae/comment/service/dto/CommentRoomAllResponseItem.java @@ -1,7 +1,19 @@ package com.zzang.chongdae.comment.service.dto; +import com.zzang.chongdae.member.repository.entity.MemberEntity; +import com.zzang.chongdae.offering.repository.entity.OfferingEntity; + public record CommentRoomAllResponseItem(Long offeringId, String offeringTitle, - CommentLatestResponse latestComment, - Boolean isProposer) { + Boolean isProposer, + CommentLatestResponse latestComment) { + + public CommentRoomAllResponseItem(OfferingEntity offering, + MemberEntity member, + CommentLatestResponse latestComment) { + this(offering.getId(), + offering.getTitle(), + offering.isProposedBy(member), + latestComment); + } } diff --git a/backend/src/main/java/com/zzang/chongdae/member/repository/entity/MemberEntity.java b/backend/src/main/java/com/zzang/chongdae/member/repository/entity/MemberEntity.java index ff03b74ce..e840affb5 100644 --- a/backend/src/main/java/com/zzang/chongdae/member/repository/entity/MemberEntity.java +++ b/backend/src/main/java/com/zzang/chongdae/member/repository/entity/MemberEntity.java @@ -37,7 +37,7 @@ public MemberEntity(String nickname, String password) { this(null, nickname, password); } - public boolean isSameMember(Long memberId) { - return this.id.equals(memberId); + public boolean isSame(MemberEntity other) { + return this.equals(other); } } diff --git a/backend/src/main/java/com/zzang/chongdae/offering/domain/OfferingWithRole.java b/backend/src/main/java/com/zzang/chongdae/offering/domain/OfferingWithRole.java deleted file mode 100644 index ab58d5cb5..000000000 --- a/backend/src/main/java/com/zzang/chongdae/offering/domain/OfferingWithRole.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.zzang.chongdae.offering.domain; - -import com.zzang.chongdae.offering.repository.entity.OfferingEntity; -import com.zzang.chongdae.offeringmember.domain.OfferingMemberRole; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public class OfferingWithRole { - - private final OfferingEntity offering; - private final OfferingMemberRole role; -} diff --git a/backend/src/main/java/com/zzang/chongdae/offering/repository/OfferingRepository.java b/backend/src/main/java/com/zzang/chongdae/offering/repository/OfferingRepository.java index 5fef7a15a..80e1cfba1 100644 --- a/backend/src/main/java/com/zzang/chongdae/offering/repository/OfferingRepository.java +++ b/backend/src/main/java/com/zzang/chongdae/offering/repository/OfferingRepository.java @@ -1,7 +1,6 @@ package com.zzang.chongdae.offering.repository; import com.zzang.chongdae.member.repository.entity.MemberEntity; -import com.zzang.chongdae.offering.domain.OfferingWithRole; import com.zzang.chongdae.offering.repository.entity.OfferingEntity; import java.time.LocalDateTime; import java.util.List; @@ -12,12 +11,12 @@ public interface OfferingRepository extends JpaRepository { @Query(""" - SELECT new com.zzang.chongdae.offering.domain.OfferingWithRole(o, om.role) + SELECT o FROM OfferingEntity as o JOIN OfferingMemberEntity as om ON o.id = om.offering.id WHERE om.member = :member """) - List findAllWithRoleByMember(MemberEntity member); + List findCommentRoomsByMember(MemberEntity member); @Query(""" SELECT o diff --git a/backend/src/main/java/com/zzang/chongdae/offering/repository/entity/OfferingEntity.java b/backend/src/main/java/com/zzang/chongdae/offering/repository/entity/OfferingEntity.java index 96dafe7c3..692e8b3d8 100644 --- a/backend/src/main/java/com/zzang/chongdae/offering/repository/entity/OfferingEntity.java +++ b/backend/src/main/java/com/zzang/chongdae/offering/repository/entity/OfferingEntity.java @@ -126,16 +126,16 @@ public OfferingMeeting toOfferingMeeting() { return new OfferingMeeting(deadline, meetingAddress, meetingAddressDetail, meetingAddressDong); } - public boolean hasParticipant() { - return currentCount > INITIAL_COUNT; - } - public boolean isStatusGrouping() { return this.roomStatus.isGrouping(); } + public boolean isProposedBy(MemberEntity other) { + return this.member.isSame(other); + } + public boolean isNotProposedBy(MemberEntity other) { - return !this.member.equals(other); + return !isProposedBy(other); } public void updateMeeting(OfferingMeeting offeringMeeting) {