diff --git a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/controller/CommentController.java b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/controller/CommentController.java index 491e30d..fa7f659 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/controller/CommentController.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/controller/CommentController.java @@ -2,7 +2,8 @@ import core.kobaco.application.comment.service.CommentLikeDetailResponse; import core.kobaco.application.comment.service.CommentService; -import core.kobaco.application.comment.service.dto.CommentDetail; +import core.kobaco.application.comment.service.dto.CommentCreateRequest; +import core.kobaco.application.comment.service.dto.CommentDetailResponse; import core.kobaco.global.ApiResponse; import io.swagger.v3.oas.annotations.Operation; @@ -18,19 +19,18 @@ @RequestMapping("/api/comments") public class CommentController { private final CommentService commentService; - - @Operation(summary = "댓글 생성") @PostMapping("/{advertiseId}") - public ResponseEntity createComment(@RequestBody CommentDetail commentDTO, @PathVariable Long advertiseId) { - CommentDetail createdComment = commentService.createComment(commentDTO, advertiseId); + public ResponseEntity createComment(@RequestBody CommentCreateRequest commentDTO, @PathVariable Long advertiseId) { + CommentCreateRequest createdComment = commentService.createComment(commentDTO.getContent(), advertiseId); return ResponseEntity.status(HttpStatus.CREATED).body(createdComment); } + @Operation(summary = "댓글 조회") @GetMapping("/{advertiseId}") - public ResponseEntity> getAllComments(@PathVariable Long advertiseId) { - List comments = commentService.getAllComments(advertiseId); + public ResponseEntity> getAllComments(@PathVariable Long advertiseId) { + List comments = commentService.getAllComments(advertiseId); return ApiResponse.success(comments); } @@ -48,3 +48,4 @@ public CommentLikeDetailResponse getCommentLikeCount(@PathVariable Long commentI } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentLikeDetailResponse.java b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentLikeDetailResponse.java index 15f53b9..ee1f6b3 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentLikeDetailResponse.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentLikeDetailResponse.java @@ -7,3 +7,4 @@ public static CommentLikeDetailResponse of(Boolean isLike, Long likeCount){ } } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentService.java b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentService.java index a49f5e7..26b34aa 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentService.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentService.java @@ -1,8 +1,10 @@ package core.kobaco.application.comment.service; -import core.kobaco.application.comment.service.dto.CommentDetail; +import core.kobaco.application.comment.service.dto.CommentCreateRequest; +import core.kobaco.application.comment.service.dto.CommentDetailResponse; import core.kobaco.domain.comment.*; +import core.kobaco.domain.commentlike.service.CommentLikeManager; import core.kobaco.domain.user.UserUtils; import core.kobaco.domain.user.service.UserReader; @@ -14,6 +16,7 @@ import java.util.*; import java.util.stream.Collectors; + @Service @Transactional public class CommentService { @@ -30,52 +33,43 @@ public CommentService(CommentRepository commentRepository, UserReader userReader } @Transactional - public CommentDetail createComment(CommentDetail commentDetail, Long advertiseId) { - final Long userId = userUtils.getRequestUserId(); - - if (userId == null) { - throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "사용자가 인증되지 않았습니다."); + public CommentCreateRequest createComment(String content, Long advertiseId) { + final Long userId = userUtils.getRequestUserId(); + if (userId == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "사용자가 인증되지 않았습니다."); + } + Comment comment = new Comment(null, content, userId); + Comment savedCommentEntity = commentRepository.save(comment, advertiseId); + return CommentCreateRequest.of(savedCommentEntity.getContent()); } - Comment comment = new Comment( - null, - commentDetail.getContent(), - userId, - advertiseId - ); - - Comment savedCommentEntity = commentRepository.save(comment, advertiseId); - - String userEmail = getUserEmail(userId); - - return new CommentDetail( - savedCommentEntity.getCommentId(), - savedCommentEntity.getContent(), - userEmail - ); - } - - public List getAllComments(Long advertiseId) { - List comments = commentRepository.findAllByAdvertiseId(advertiseId); - return comments.stream() - .map(comment -> new CommentDetail(comment.getCommentId(), comment.getContent(), getUserEmail(comment.getCommenterId()))) - .collect(Collectors.toList()); - } - - private String getUserEmail(Long userId) { - return userReader.read(userId).getEmail(); + public List getAllComments(Long advertiseId) { + List comments = commentRepository.findAllByAdvertiseId(advertiseId); + return comments.stream() + .map(comment -> { + String userEmail = getUserEmail(comment.getCommenterId()); + return CommentDetailResponse.of(comment.getCommentId(), comment.getContent(), userEmail); + }) + .collect(Collectors.toList()); + } - } + private String getUserEmail(Long userId) { + return userReader.read(userId).getEmail(); + } - @Transactional - public void likeComment(Long commentId) { - final Long userId = userUtils.getRequestUserId(); - commentLikeManager.like(commentId, userId); - } - public CommentLikeDetailResponse getCommentLikeCount(final Long commentId) { - return CommentLikeDetailResponse.of( - commentLikeManager.isLike(commentId), - commentLikeManager.getLikeCount(commentId) + @Transactional + public void likeComment(Long commentId) { + final Long userId = userUtils.getRequestUserId(); + if (userId == null) { + throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, "사용자가 인증되지 않았습니다."); + } + commentLikeManager.like(commentId, userId); + } + public CommentLikeDetailResponse getCommentLikeCount(final Long commentId) { + return CommentLikeDetailResponse.of( + commentLikeManager.isLike(commentId), + commentLikeManager.getLikeCount(commentId) ); } } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/dto/CommentCreateRequest.java b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/dto/CommentCreateRequest.java new file mode 100644 index 0000000..c950806 --- /dev/null +++ b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/dto/CommentCreateRequest.java @@ -0,0 +1,19 @@ +package core.kobaco.application.comment.service.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +public class CommentCreateRequest { + private String content; + + public CommentCreateRequest(String content) { + this.content = content; + } + + public static CommentCreateRequest of(String content) { + return new CommentCreateRequest(content); + } +} + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/dto/CommentDetail.java b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/dto/CommentDetail.java deleted file mode 100644 index 5bdceeb..0000000 --- a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/dto/CommentDetail.java +++ /dev/null @@ -1,22 +0,0 @@ -package core.kobaco.application.comment.service.dto; - -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Getter -@NoArgsConstructor -public class CommentDetail { - private Long commentId; - private String content; - private String commenterEmail; - - public CommentDetail(Long commentId, String content, String commenterEmail) { - this.commentId = commentId; - this.content = content; - this.commenterEmail = commenterEmail; - } - - public static CommentDetail of(Long commentId, String content, String commenterEmail) { - return new CommentDetail(commentId, content, commenterEmail); - } -} \ No newline at end of file diff --git a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/dto/CommentDetailResponse.java b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/dto/CommentDetailResponse.java new file mode 100644 index 0000000..3c1f51f --- /dev/null +++ b/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/dto/CommentDetailResponse.java @@ -0,0 +1,23 @@ +package core.kobaco.application.comment.service.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; + + +@Getter +@NoArgsConstructor +public class CommentDetailResponse { + private Long commentId; + private String content; + private String userEmail; + + public CommentDetailResponse(Long commentId, String content, String userEmail) { + this.commentId = commentId; + this.content = content; + this.userEmail = userEmail; + } + + public static CommentDetailResponse of(Long commentId, String content, String userEmail) { + return new CommentDetailResponse(commentId, content, userEmail); + } +} diff --git a/kobaco/kobaco/src/main/java/core/kobaco/domain/comment/Comment.java b/kobaco/kobaco/src/main/java/core/kobaco/domain/comment/Comment.java index b872e57..6985d68 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/domain/comment/Comment.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/domain/comment/Comment.java @@ -19,3 +19,4 @@ public Comment(Long commentId, String content, Long commenterId) { } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/domain/comment/CommentRepository.java b/kobaco/kobaco/src/main/java/core/kobaco/domain/comment/CommentRepository.java index 8bc16cb..750124f 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/domain/comment/CommentRepository.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/domain/comment/CommentRepository.java @@ -9,3 +9,4 @@ public interface CommentRepository { List findAllByAdvertiseId(Long advertiseId); } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/domain/commentLike/adapter/CommentLikeManagerAdapter.java b/kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/adapter/CommentLikeManagerAdapter.java similarity index 80% rename from kobaco/kobaco/src/main/java/core/kobaco/domain/commentLike/adapter/CommentLikeManagerAdapter.java rename to kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/adapter/CommentLikeManagerAdapter.java index a3dc7d8..2896675 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/domain/commentLike/adapter/CommentLikeManagerAdapter.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/adapter/CommentLikeManagerAdapter.java @@ -1,8 +1,8 @@ -package core.kobaco.domain.commentLike.adapter; +package core.kobaco.domain.commentlike.adapter; -import core.kobaco.application.comment.service.CommentLikeManager; -import core.kobaco.domain.commentLike.service.CommentLike; -import core.kobaco.domain.commentLike.service.CommentLikeRepository; +import core.kobaco.domain.commentlike.service.CommentLikeManager; +import core.kobaco.domain.commentlike.service.CommentLike; +import core.kobaco.domain.commentlike.service.CommentLikeRepository; import core.kobaco.domain.user.UserUtils; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -32,3 +32,4 @@ public void like(Long commentId, Long userId) { ); } } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/domain/commentLike/service/CommentLike.java b/kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/service/CommentLike.java similarity index 90% rename from kobaco/kobaco/src/main/java/core/kobaco/domain/commentLike/service/CommentLike.java rename to kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/service/CommentLike.java index 244daf6..fbd74b5 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/domain/commentLike/service/CommentLike.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/service/CommentLike.java @@ -1,4 +1,4 @@ -package core.kobaco.domain.commentLike.service; +package core.kobaco.domain.commentlike.service; import lombok.Getter; @@ -19,3 +19,4 @@ public static CommentLike of(Long likeId, Long commentId, Long userId) { return new CommentLike(likeId, commentId, userId); } } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentLikeManager.java b/kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/service/CommentLikeManager.java similarity index 77% rename from kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentLikeManager.java rename to kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/service/CommentLikeManager.java index c78e4f3..bee15d9 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/application/comment/service/CommentLikeManager.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/service/CommentLikeManager.java @@ -1,4 +1,4 @@ -package core.kobaco.application.comment.service; +package core.kobaco.domain.commentlike.service; public interface CommentLikeManager { Long getLikeCount(Long commentId); @@ -8,3 +8,4 @@ public interface CommentLikeManager { } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/domain/commentLike/service/CommentLikeRepository.java b/kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/service/CommentLikeRepository.java similarity index 88% rename from kobaco/kobaco/src/main/java/core/kobaco/domain/commentLike/service/CommentLikeRepository.java rename to kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/service/CommentLikeRepository.java index f595c0e..170a50d 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/domain/commentLike/service/CommentLikeRepository.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/domain/commentlike/service/CommentLikeRepository.java @@ -1,4 +1,4 @@ -package core.kobaco.domain.commentLike.service; +package core.kobaco.domain.commentlike.service; import java.util.Optional; @@ -14,3 +14,4 @@ public interface CommentLikeRepository { Optional findByCommentIdAndUserId(Long commentId, Long userId); } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/infra/comment/CommentJpaRepository.java b/kobaco/kobaco/src/main/java/core/kobaco/infra/comment/CommentJpaRepository.java index 917259b..af63451 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/infra/comment/CommentJpaRepository.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/infra/comment/CommentJpaRepository.java @@ -7,5 +7,6 @@ public interface CommentJpaRepository extends JpaRepository { List findAllByAdvertiseId(Long advertiseId); +} + -} \ No newline at end of file diff --git a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/entity/CommentEntity.java b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/entity/CommentEntity.java index 5bc78f7..71e8148 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/entity/CommentEntity.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/entity/CommentEntity.java @@ -1,6 +1,6 @@ package core.kobaco.infra.jpa.comment.entity; -import core.kobaco.domain.advertise.Advertisement; + import core.kobaco.infra.jpa.advertisement.entity.AdvertisementEntity; import core.kobaco.infra.jpa.user.UserEntity; import jakarta.persistence.*; @@ -26,17 +26,18 @@ public class CommentEntity { @JoinColumn(name = "advertise_id", nullable = false) private AdvertisementEntity advertise; - private CommentEntity(String content, UserEntity user, AdvertisementEntity advertise) { + private CommentEntity(Long id,String content, UserEntity user, AdvertisementEntity advertise) { + this.id = id; this.content = content; this.user = user; this.advertise = advertise; } - public static CommentEntity of(String content, UserEntity user, AdvertisementEntity advertise) { - return new CommentEntity(content, user, advertise); + public static CommentEntity of(Long id, String content, UserEntity user, AdvertisementEntity advertise) { + return new CommentEntity(id, content, user, advertise); } public static CommentEntity from(Long id) { - return new CommentEntity(null, null, null); + return new CommentEntity(id,null, null, null); } -} \ No newline at end of file +} diff --git a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/repository/CommentMapper.java b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/repository/CommentMapper.java index fc5d5ac..9303a8d 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/repository/CommentMapper.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/repository/CommentMapper.java @@ -17,8 +17,10 @@ public class CommentMapper { public CommentEntity toEntity(Comment comment, Long userId, Long advertiseId) { UserEntity userEntity = UserEntity.from(userId); AdvertisementEntity advertisementEntity = AdvertisementEntity.from(advertiseId); - return CommentEntity.of(comment.getContent(), userEntity, advertisementEntity); + return CommentEntity.of(comment.getCommentId(), comment.getContent(), userEntity, advertisementEntity); } + + public Comment toDomain(CommentEntity commentEntity) { return new Comment( commentEntity.getId(), @@ -33,3 +35,4 @@ public List toDomainList(List commentEntities) { .collect(Collectors.toList()); } } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/repository/CommentRepositoryImpl.java b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/repository/CommentRepositoryImpl.java index 168be22..7b4ffcf 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/repository/CommentRepositoryImpl.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/comment/repository/CommentRepositoryImpl.java @@ -42,3 +42,4 @@ public List findAllByAdvertiseId(Long advertiseId) { } } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeEntity.java b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeEntity.java index 42b0e07..da9a5a0 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeEntity.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeEntity.java @@ -35,3 +35,4 @@ public static CommentLikeEntity of(Long id, UserEntity user, CommentEntity comme return new CommentLikeEntity(id, user, comment); } } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeJpaRepository.java b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeJpaRepository.java index 05ba6ee..0a0265a 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeJpaRepository.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeJpaRepository.java @@ -14,3 +14,4 @@ public interface CommentLikeJpaRepository extends JpaRepository findByCommentIdAndUserId(Long commentId, Long userId); } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeMapper.java b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeMapper.java index a074652..8197c24 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeMapper.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeMapper.java @@ -1,9 +1,8 @@ package core.kobaco.infra.jpa.commentLike; -import core.kobaco.domain.commentLike.service.CommentLike; +import core.kobaco.domain.commentlike.service.CommentLike; import core.kobaco.infra.jpa.comment.entity.CommentEntity; -import core.kobaco.infra.jpa.commentLike.CommentLikeEntity; import core.kobaco.infra.jpa.user.UserEntity; import org.springframework.stereotype.Component; @@ -20,8 +19,9 @@ public CommentLikeEntity toEntity(CommentLike commentLike) { public CommentLike toDomain(CommentLikeEntity commentLikeEntity) { return CommentLike.of( commentLikeEntity.getId(), - commentLikeEntity.getUser().getId(), - commentLikeEntity.getComment().getId() + commentLikeEntity.getComment().getId(), + commentLikeEntity.getUser().getId() ); } } + diff --git a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeRepositoryImpl.java b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeRepositoryImpl.java index a1d9e0d..e2f5c81 100644 --- a/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeRepositoryImpl.java +++ b/kobaco/kobaco/src/main/java/core/kobaco/infra/jpa/commentLike/CommentLikeRepositoryImpl.java @@ -1,9 +1,7 @@ package core.kobaco.infra.jpa.commentLike; -import core.kobaco.domain.commentLike.service.CommentLike; -import core.kobaco.domain.commentLike.service.CommentLikeRepository; -import core.kobaco.infra.jpa.commentLike.CommentLikeJpaRepository; -import core.kobaco.infra.jpa.commentLike.CommentLikeMapper; +import core.kobaco.domain.commentlike.service.CommentLike; +import core.kobaco.domain.commentlike.service.CommentLikeRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -40,3 +38,4 @@ public Optional findByCommentIdAndUserId(Long commentId, Long userI return commentLikeJpaRepository.findByCommentIdAndUserId(commentId, userId).map(likeMapper::toDomain); } } +