diff --git a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/TaskEntity.java b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/TaskEntity.java index d5f465c0..6227a4ea 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/TaskEntity.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/TaskEntity.java @@ -5,9 +5,11 @@ import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; import jakarta.persistence.*; import lombok.AccessLevel; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import org.hibernate.annotations.SQLRestriction; import java.time.LocalDateTime; @@ -16,6 +18,7 @@ @Getter @SuperBuilder @NoArgsConstructor(access = AccessLevel.PROTECTED) +@SQLRestriction("is_deleted = false") public class TaskEntity extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -68,4 +71,8 @@ public class TaskEntity extends BaseTimeEntity { @Column(nullable = false) private int attachmentCount; + + @Column(name="is_deleted", nullable = false) + @Builder.Default + private boolean isDeleted = Boolean.FALSE; } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/mapper/TaskPersistenceMapper.java b/src/main/java/clap/server/adapter/outbound/persistense/mapper/TaskPersistenceMapper.java index 053d8290..1f312abe 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/mapper/TaskPersistenceMapper.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/mapper/TaskPersistenceMapper.java @@ -1,10 +1,20 @@ package clap.server.adapter.outbound.persistense.mapper; +import clap.server.adapter.outbound.persistense.entity.task.CommentEntity; import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; import clap.server.adapter.outbound.persistense.mapper.common.PersistenceMapper; +import clap.server.domain.model.task.Comment; import clap.server.domain.model.task.Task; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; @Mapper(componentModel = "spring", uses = {MemberPersistenceMapper.class, LabelPersistenceMapper.class, CategoryPersistenceMapper.class}) public interface TaskPersistenceMapper extends PersistenceMapper { + @Override + @Mapping(source = "deleted", target = "isDeleted") + Task toDomain(final TaskEntity entity); + + @Override + @Mapping(source = "deleted", target = "isDeleted") + TaskEntity toEntity(final Task domain); } diff --git a/src/main/java/clap/server/domain/model/task/Task.java b/src/main/java/clap/server/domain/model/task/Task.java index 0352b2e0..d3b80a16 100644 --- a/src/main/java/clap/server/domain/model/task/Task.java +++ b/src/main/java/clap/server/domain/model/task/Task.java @@ -36,6 +36,7 @@ public class Task extends BaseTime { private LocalDateTime dueDate; private LocalDateTime finishedAt; private int attachmentCount; + private boolean isDeleted; public static Task createTask(Member member, Category category, String title, String description, int attachmentCount) { return Task.builder() @@ -116,6 +117,7 @@ public void cancelTask(Long requesterId) { throw new DomainException(NOT_A_REQUESTER); } this.taskStatus = TaskStatus.TERMINATED; + this.isDeleted = true; this.finishedAt = LocalDateTime.now(); } } diff --git a/src/main/resources/db/migration/dev/V20250210367__Add_Is_Deleted_From_Task.sql b/src/main/resources/db/migration/dev/V20250210367__Add_Is_Deleted_From_Task.sql new file mode 100644 index 00000000..bcda8a24 --- /dev/null +++ b/src/main/resources/db/migration/dev/V20250210367__Add_Is_Deleted_From_Task.sql @@ -0,0 +1,2 @@ +ALTER TABLE task + ADD COLUMN is_deleted BOOLEAN DEFAULT FALSE; \ No newline at end of file