From 637259fc7701afe9cc708050c15bf3ce49b45b3a Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Thu, 6 Feb 2025 09:23:15 +0900 Subject: [PATCH 1/2] =?UTF-8?q?CLAP-291=20HotFix:=20=EB=8C=93=EA=B8=80=20?= =?UTF-8?q?=ED=9E=88=EC=8A=A4=ED=86=A0=EB=A6=AC=20=EC=95=84=EC=9D=B4?= =?UTF-8?q?=EB=94=94=20=EC=A0=84=EB=8B=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/dto/history/response/FindTaskHistoryResponse.java | 2 ++ .../server/application/mapper/TaskHistoryResponseMapper.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/history/response/FindTaskHistoryResponse.java b/src/main/java/clap/server/adapter/inbound/web/dto/history/response/FindTaskHistoryResponse.java index 3a32b5f9..471d5b0b 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/history/response/FindTaskHistoryResponse.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/history/response/FindTaskHistoryResponse.java @@ -28,6 +28,7 @@ public static record TaskDetails( ) {} public static record CommentDetails( + Long commentId, String nickName, String profileImageUrl, boolean isModified, @@ -35,6 +36,7 @@ public static record CommentDetails( ) {} public static record CommentFileDetails( + Long commentId, String nickName, String profileImageUrl, boolean isModified, diff --git a/src/main/java/clap/server/application/mapper/TaskHistoryResponseMapper.java b/src/main/java/clap/server/application/mapper/TaskHistoryResponseMapper.java index f8dee5c3..1330e3af 100644 --- a/src/main/java/clap/server/application/mapper/TaskHistoryResponseMapper.java +++ b/src/main/java/clap/server/application/mapper/TaskHistoryResponseMapper.java @@ -36,6 +36,7 @@ public static FindTaskHistoryResponse toFindTaskHistoryResponse(List new FindTaskHistoryResponse.Details( null, new FindTaskHistoryResponse.CommentDetails( + taskHistory.getComment().getCommentId(), taskHistory.getComment().getMember().getNickname(), taskHistory.getComment().getMember().getImageUrl(), taskHistory.getComment().isModified(), @@ -50,6 +51,7 @@ public static FindTaskHistoryResponse toFindTaskHistoryResponse(List attachment.getComment().getCommentId().equals(taskHistory.getComment().getCommentId())) .findFirst() .map(attachment -> new FindTaskHistoryResponse.CommentFileDetails( + taskHistory.getComment().getCommentId(), taskHistory.getComment().getMember().getNickname(), taskHistory.getComment().getMember().getImageUrl(), taskHistory.getComment().isModified(), From 797de42b58fb545e2d007a34b261c3343bae2952 Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Thu, 6 Feb 2025 09:37:55 +0900 Subject: [PATCH 2/2] =?UTF-8?q?CLAP-291=20HotFix:=20=EB=8C=93=EA=B8=80=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=8B=9C=20=ED=9E=88=EC=8A=A4=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=8F=20=EC=B2=A8=EB=B6=80=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AttachmentPersistenceAdapter.java | 8 ++--- .../CommentPersistenceAdapter.java | 6 ++-- .../TaskHistoryPersistenceAdapter.java | 3 +- .../entity/task/AttachmentEntity.java | 9 ++++-- .../entity/task/CommentEntity.java | 5 ++- .../entity/task/TaskHistoryEntity.java | 8 +++++ .../history/CommentCustomRepository.java | 6 ++++ .../history/CommentCustomRepositoryImpl.java | 26 ++++++++++++++++ .../{task => history}/CommentRepository.java | 4 +-- .../TaskHistoryCustomRepository.java | 2 +- .../TaskHistoryCustomRepositoryImpl.java | 3 +- .../TaskHistoryRepository.java | 8 ++--- .../repository/task/AttachmentRepository.java | 8 ++--- .../port/inbound/domain/CommentService.java | 19 ++++++++++++ .../outbound/task/CommandCommentPort.java | 2 +- .../taskhistory/CommandTaskHistoryPort.java | 2 +- .../history/CommandCommentService.java | 31 +++++++++++-------- ...6291__Add_Is_Deleted_From_Task_History.sql | 2 ++ 18 files changed, 113 insertions(+), 39 deletions(-) create mode 100644 src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentCustomRepository.java create mode 100644 src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentCustomRepositoryImpl.java rename src/main/java/clap/server/adapter/outbound/persistense/repository/{task => history}/CommentRepository.java (70%) rename src/main/java/clap/server/adapter/outbound/persistense/repository/{task => history}/TaskHistoryCustomRepository.java (76%) rename src/main/java/clap/server/adapter/outbound/persistense/repository/{task => history}/TaskHistoryCustomRepositoryImpl.java (95%) rename src/main/java/clap/server/adapter/outbound/persistense/repository/{task => history}/TaskHistoryRepository.java (57%) create mode 100644 src/main/java/clap/server/application/port/inbound/domain/CommentService.java create mode 100644 src/main/resources/db/migration/dev/V20250206291__Add_Is_Deleted_From_Task_History.sql diff --git a/src/main/java/clap/server/adapter/outbound/persistense/AttachmentPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/AttachmentPersistenceAdapter.java index 5c6c9d2e..fd38930e 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/AttachmentPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/AttachmentPersistenceAdapter.java @@ -39,7 +39,7 @@ public void saveAll(List attachments) { @Override public List findAllByTaskIdAndCommentIsNull(final Long taskId) { - List attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNullAndIsDeletedIsFalse(taskId); + List attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNull(taskId); return attachmentEntities.stream() .map(attachmentPersistenceMapper::toDomain) .collect(Collectors.toList()); @@ -47,7 +47,7 @@ public List findAllByTaskIdAndCommentIsNull(final Long taskId) { @Override public List findAllByTaskIdAndCommentIsNullAndAttachmentId(final Long taskId, final List attachmentIds) { - List attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNullAndIsDeletedIsFalseAndAttachmentIdIn(taskId, attachmentIds); + List attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNullAndAttachmentIdIn(taskId, attachmentIds); return attachmentEntities.stream() .map(attachmentPersistenceMapper::toDomain) .collect(Collectors.toList()); @@ -55,13 +55,13 @@ public List findAllByTaskIdAndCommentIsNullAndAttachmentId(final Lon @Override public Optional findByCommentId(Long commentId) { - Optional attachmentEntity = attachmentRepository.findByComment_CommentIdAndIsDeletedFalse(commentId); + Optional attachmentEntity = attachmentRepository.findByComment_CommentId(commentId); return attachmentEntity.map(attachmentPersistenceMapper::toDomain); } @Override public List findAllByTaskIdAndCommentIsNotNull(final Long taskId) { - List attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNotNullAndIsDeletedIsFalse(taskId); + List attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNotNull(taskId); return attachmentEntities.stream() .map(attachmentPersistenceMapper::toDomain) .collect(Collectors.toList()); diff --git a/src/main/java/clap/server/adapter/outbound/persistense/CommentPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/CommentPersistenceAdapter.java index 77cbf428..427bf08a 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/CommentPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/CommentPersistenceAdapter.java @@ -2,7 +2,7 @@ import clap.server.adapter.outbound.persistense.entity.task.CommentEntity; import clap.server.adapter.outbound.persistense.mapper.CommentPersistenceMapper; -import clap.server.adapter.outbound.persistense.repository.task.CommentRepository; +import clap.server.adapter.outbound.persistense.repository.history.CommentRepository; import clap.server.application.port.outbound.task.CommandCommentPort; import clap.server.application.port.outbound.task.LoadCommentPort; import clap.server.common.annotation.architecture.PersistenceAdapter; @@ -31,7 +31,7 @@ public Comment saveComment(Comment comment) { } @Override - public void deleteComment(Comment comment) { - commentRepository.delete(commentPersistenceMapper.toEntity(comment)); + public void deleteCommentWithTaskHistory(Long commentId) { + commentRepository.deleteCommentWithTaskHistory(commentId); } } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/TaskHistoryPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/TaskHistoryPersistenceAdapter.java index 9d9b3e31..42a22bde 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/TaskHistoryPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/TaskHistoryPersistenceAdapter.java @@ -3,11 +3,12 @@ import clap.server.adapter.outbound.persistense.entity.task.TaskHistoryEntity; import clap.server.adapter.outbound.persistense.mapper.TaskHistoryPersistenceMapper; -import clap.server.adapter.outbound.persistense.repository.task.TaskHistoryRepository; +import clap.server.adapter.outbound.persistense.repository.history.TaskHistoryRepository; import clap.server.application.port.outbound.taskhistory.CommandTaskHistoryPort; import clap.server.application.port.outbound.taskhistory.LoadTaskHistoryPort; import clap.server.common.annotation.architecture.PersistenceAdapter; + import clap.server.domain.model.task.TaskHistory; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/AttachmentEntity.java b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/AttachmentEntity.java index 07336a1c..2ff0eba7 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/AttachmentEntity.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/AttachmentEntity.java @@ -3,15 +3,19 @@ import clap.server.adapter.outbound.persistense.entity.common.BaseTimeEntity; import jakarta.persistence.*; import lombok.AccessLevel; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.SQLRestriction; @Entity @Table(name = "attachment") @Getter @SuperBuilder @NoArgsConstructor(access = AccessLevel.PROTECTED) +@SQLRestriction("is_deleted = false") public class AttachmentEntity extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -35,6 +39,7 @@ public class AttachmentEntity extends BaseTimeEntity { @JoinColumn(name = "comment_id") private CommentEntity comment; - @Column(nullable = false) - private boolean isDeleted; + @Column(name= "is_deleted", nullable = false) + @Builder.Default + private boolean isDeleted = Boolean.FALSE; } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/CommentEntity.java b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/CommentEntity.java index eb7f6483..affd3089 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/CommentEntity.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/CommentEntity.java @@ -9,13 +9,16 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.SQLRestriction; +import org.hibernate.annotations.Where; @Entity @Table(name = "comment") @Getter @SuperBuilder @NoArgsConstructor(access = AccessLevel.PROTECTED) -@SQLDelete(sql = "UPDATE Comment SET is_Deleted = true WHERE comment_id = ?") +@SQLDelete(sql = "UPDATE comment SET is_deleted = true WHERE comment_id = ?") +@SQLRestriction("is_deleted = false") public class CommentEntity extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/TaskHistoryEntity.java b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/TaskHistoryEntity.java index 709572c6..1ca60f95 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/TaskHistoryEntity.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/TaskHistoryEntity.java @@ -4,15 +4,19 @@ import clap.server.adapter.outbound.persistense.entity.task.constant.TaskHistoryType; import jakarta.persistence.*; import lombok.AccessLevel; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.SQLRestriction; @Entity @Table(name = "task_history") @Getter @SuperBuilder @NoArgsConstructor(access = AccessLevel.PROTECTED) +@SQLRestriction("is_deleted = false") public class TaskHistoryEntity extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -29,4 +33,8 @@ public class TaskHistoryEntity extends BaseTimeEntity { @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "comment_id") private CommentEntity comment; + + @Column(name="is_deleted", nullable = false) + @Builder.Default + private boolean isDeleted = Boolean.FALSE; } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentCustomRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentCustomRepository.java new file mode 100644 index 00000000..b1a0fef8 --- /dev/null +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentCustomRepository.java @@ -0,0 +1,6 @@ +package clap.server.adapter.outbound.persistense.repository.history; + + +public interface CommentCustomRepository { + void deleteCommentWithTaskHistory(Long commentId); +} diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentCustomRepositoryImpl.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentCustomRepositoryImpl.java new file mode 100644 index 00000000..c8652bdd --- /dev/null +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentCustomRepositoryImpl.java @@ -0,0 +1,26 @@ +package clap.server.adapter.outbound.persistense.repository.history; + +import clap.server.adapter.outbound.persistense.entity.task.QCommentEntity; +import clap.server.adapter.outbound.persistense.entity.task.QTaskHistoryEntity; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public class CommentCustomRepositoryImpl implements CommentCustomRepository{ + private final JPAQueryFactory queryFactory; + public void deleteCommentWithTaskHistory(Long commentId) { + QTaskHistoryEntity taskHistory = QTaskHistoryEntity.taskHistoryEntity; + QCommentEntity comment = QCommentEntity.commentEntity; + + queryFactory + .update(comment) + .set(comment.isDeleted, true) + .where(comment.commentId.eq(commentId)) + .execute(); + queryFactory + .update(taskHistory) + .set(taskHistory.isDeleted, true) + .where(taskHistory.comment.commentId.eq(commentId)) + .execute(); + } +} diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/CommentRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentRepository.java similarity index 70% rename from src/main/java/clap/server/adapter/outbound/persistense/repository/task/CommentRepository.java rename to src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentRepository.java index 86afbff8..edcc9622 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/CommentRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/CommentRepository.java @@ -1,9 +1,9 @@ -package clap.server.adapter.outbound.persistense.repository.task; +package clap.server.adapter.outbound.persistense.repository.history; import clap.server.adapter.outbound.persistense.entity.task.CommentEntity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository -public interface CommentRepository extends JpaRepository { +public interface CommentRepository extends JpaRepository, CommentCustomRepository { } \ No newline at end of file diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskHistoryCustomRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryCustomRepository.java similarity index 76% rename from src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskHistoryCustomRepository.java rename to src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryCustomRepository.java index f9e82ab3..b2dda60b 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskHistoryCustomRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryCustomRepository.java @@ -1,4 +1,4 @@ -package clap.server.adapter.outbound.persistense.repository.task; +package clap.server.adapter.outbound.persistense.repository.history; import clap.server.adapter.outbound.persistense.entity.task.TaskHistoryEntity; diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskHistoryCustomRepositoryImpl.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryCustomRepositoryImpl.java similarity index 95% rename from src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskHistoryCustomRepositoryImpl.java rename to src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryCustomRepositoryImpl.java index 3a94f180..4de37a20 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskHistoryCustomRepositoryImpl.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryCustomRepositoryImpl.java @@ -1,4 +1,4 @@ -package clap.server.adapter.outbound.persistense.repository.task; +package clap.server.adapter.outbound.persistense.repository.history; import clap.server.adapter.outbound.persistense.entity.task.QCommentEntity; import clap.server.adapter.outbound.persistense.entity.task.QTaskHistoryEntity; @@ -7,7 +7,6 @@ import lombok.RequiredArgsConstructor; - import java.util.List; @RequiredArgsConstructor diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskHistoryRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryRepository.java similarity index 57% rename from src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskHistoryRepository.java rename to src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryRepository.java index b3787fa4..d5e1cc04 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskHistoryRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/history/TaskHistoryRepository.java @@ -1,12 +1,12 @@ -package clap.server.adapter.outbound.persistense.repository.task; +package clap.server.adapter.outbound.persistense.repository.history; import clap.server.adapter.outbound.persistense.entity.task.TaskHistoryEntity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; -import java.util.List; - @Repository public interface TaskHistoryRepository extends JpaRepository , TaskHistoryCustomRepository{ - List findAllByTaskModificationInfo_Task_TaskId(Long taskId); } \ No newline at end of file diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java index 9e8d9336..1c5321a7 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java @@ -8,9 +8,9 @@ @Repository public interface AttachmentRepository extends JpaRepository { - List findAllByTask_TaskIdAndCommentIsNullAndIsDeletedIsFalse(Long taskId); - List findAllByTask_TaskIdAndCommentIsNullAndIsDeletedIsFalseAndAttachmentIdIn(Long task_taskId, List attachmentId); - Optional findByComment_CommentIdAndIsDeletedFalse(Long commentId); + List findAllByTask_TaskIdAndCommentIsNull(Long taskId); + List findAllByTask_TaskIdAndCommentIsNullAndAttachmentIdIn(Long task_taskId, List attachmentId); + Optional findByComment_CommentId(Long commentId); boolean existsByComment_CommentId(Long commentId); - List findAllByTask_TaskIdAndCommentIsNotNullAndIsDeletedIsFalse(Long taskId); + List findAllByTask_TaskIdAndCommentIsNotNull(Long taskId); } \ No newline at end of file diff --git a/src/main/java/clap/server/application/port/inbound/domain/CommentService.java b/src/main/java/clap/server/application/port/inbound/domain/CommentService.java new file mode 100644 index 00000000..099318a8 --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/domain/CommentService.java @@ -0,0 +1,19 @@ +package clap.server.application.port.inbound.domain; + +import clap.server.application.port.outbound.task.LoadCommentPort; +import clap.server.domain.model.task.Comment; +import clap.server.exception.ApplicationException; +import clap.server.exception.code.CommentErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class CommentService { + private final LoadCommentPort loadCommentPort; + + public Comment findById(Long commentId) { + return loadCommentPort.findById(commentId) + .orElseThrow(() -> new ApplicationException(CommentErrorCode.COMMENT_NOT_FOUND)); + } +} diff --git a/src/main/java/clap/server/application/port/outbound/task/CommandCommentPort.java b/src/main/java/clap/server/application/port/outbound/task/CommandCommentPort.java index 55c74d1b..71a60c8c 100644 --- a/src/main/java/clap/server/application/port/outbound/task/CommandCommentPort.java +++ b/src/main/java/clap/server/application/port/outbound/task/CommandCommentPort.java @@ -6,5 +6,5 @@ public interface CommandCommentPort { Comment saveComment(Comment comment); - void deleteComment(Comment comment); + void deleteCommentWithTaskHistory(Long commentId); } diff --git a/src/main/java/clap/server/application/port/outbound/taskhistory/CommandTaskHistoryPort.java b/src/main/java/clap/server/application/port/outbound/taskhistory/CommandTaskHistoryPort.java index 007b0661..9a8b3145 100644 --- a/src/main/java/clap/server/application/port/outbound/taskhistory/CommandTaskHistoryPort.java +++ b/src/main/java/clap/server/application/port/outbound/taskhistory/CommandTaskHistoryPort.java @@ -1,8 +1,8 @@ package clap.server.application.port.outbound.taskhistory; +import clap.server.domain.model.task.Comment; import clap.server.domain.model.task.TaskHistory; public interface CommandTaskHistoryPort { TaskHistory save(TaskHistory taskHistory); - } diff --git a/src/main/java/clap/server/application/service/history/CommandCommentService.java b/src/main/java/clap/server/application/service/history/CommandCommentService.java index 431e8169..4459a68e 100644 --- a/src/main/java/clap/server/application/service/history/CommandCommentService.java +++ b/src/main/java/clap/server/application/service/history/CommandCommentService.java @@ -1,6 +1,7 @@ package clap.server.application.service.history; import clap.server.adapter.inbound.web.dto.history.request.EditCommentRequest; +import clap.server.application.port.inbound.domain.CommentService; import clap.server.application.port.inbound.history.DeleteCommentUsecase; import clap.server.application.port.inbound.history.EditCommentUsecase; import clap.server.application.port.inbound.domain.MemberService; @@ -8,36 +9,41 @@ import clap.server.application.port.outbound.task.CommandCommentPort; import clap.server.application.port.outbound.task.LoadAttachmentPort; import clap.server.application.port.outbound.task.LoadCommentPort; +import clap.server.application.port.outbound.taskhistory.CommandTaskHistoryPort; import clap.server.common.annotation.architecture.ApplicationService; import clap.server.domain.model.member.Member; import clap.server.domain.model.task.Attachment; import clap.server.domain.model.task.Comment; import clap.server.exception.ApplicationException; +import clap.server.exception.DomainException; import clap.server.exception.code.CommentErrorCode; +import clap.server.exception.code.MemberErrorCode; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.transaction.annotation.Transactional; +import java.util.Objects; + @ApplicationService @RequiredArgsConstructor +@Slf4j public class CommandCommentService implements EditCommentUsecase, DeleteCommentUsecase { private final MemberService memberService; - private final LoadCommentPort loadCommentPort; + private final CommentService commentService; + private final CommandCommentPort commandCommentPort; private final LoadAttachmentPort loadAttachmentPort; private final CommandAttachmentPort commandAttachmentPort; + private final CommandTaskHistoryPort commandTaskHistoryPort; @Transactional @Override public void editComment(Long userId, Long commentId, EditCommentRequest request) { - Member member = memberService.findActiveMember(userId); - - Comment comment = loadCommentPort.findById(commentId) - .orElseThrow(() -> new ApplicationException(CommentErrorCode.COMMENT_NOT_FOUND)); + Comment comment = commentService.findById(commentId); if (Member.checkCommenter(comment.getTask(), member)) { - comment.updateComment(request.content()); commandCommentPort.saveComment(comment); }; @@ -47,17 +53,16 @@ public void editComment(Long userId, Long commentId, EditCommentRequest request) @Override public void deleteComment(Long userId, Long commentId) { Member member = memberService.findActiveMember(userId); + Comment comment = commentService.findById(commentId); - - Comment comment = loadCommentPort.findById(commentId) - .orElseThrow(() -> new ApplicationException(CommentErrorCode.COMMENT_NOT_FOUND)); - - if (Member.checkCommenter(comment.getTask(), member)) { + if (Objects.equals(comment.getMember().getMemberId(), member.getMemberId())) { if (loadAttachmentPort.exitsByCommentId(commentId)) { deleteAttachments(commentId); } - commandCommentPort.deleteComment(comment); - }; + commandCommentPort.deleteCommentWithTaskHistory(commentId); + }else{ + throw new DomainException(MemberErrorCode.NOT_A_COMMENTER); + } } private void deleteAttachments(Long commentId) { diff --git a/src/main/resources/db/migration/dev/V20250206291__Add_Is_Deleted_From_Task_History.sql b/src/main/resources/db/migration/dev/V20250206291__Add_Is_Deleted_From_Task_History.sql new file mode 100644 index 00000000..c918d1fb --- /dev/null +++ b/src/main/resources/db/migration/dev/V20250206291__Add_Is_Deleted_From_Task_History.sql @@ -0,0 +1,2 @@ +ALTER TABLE task_history + ADD COLUMN is_deleted BOOLEAN DEFAULT FALSE; \ No newline at end of file