diff --git a/src/main/java/com/progbe/domain/category/entity/CategoryEntity.java b/src/main/java/com/progbe/domain/category/entity/CategoryEntity.java index 4276a8e..e45d8d5 100644 --- a/src/main/java/com/progbe/domain/category/entity/CategoryEntity.java +++ b/src/main/java/com/progbe/domain/category/entity/CategoryEntity.java @@ -1,15 +1,11 @@ package com.progbe.domain.category.entity; +import com.progbe.global.common.BaseEntity; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; @Entity @Table( @@ -23,39 +19,35 @@ ) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@EntityListeners(AuditingEntityListener.class) -public class CategoryEntity { +public class CategoryEntity extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "category_id") private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parent_id") + private CategoryEntity parent; + @Column(nullable = false, unique = true) private String name; @Column(columnDefinition = "TEXT") private String description; - @CreatedDate - @Column(name = "created_at", updatable = false) - private LocalDateTime createdAt; - - @LastModifiedDate - @Column(name = "updated_at") - private LocalDateTime updatedAt; - - @Column(name = "deleted_at") - private LocalDateTime deletedAt; - @Builder - public CategoryEntity(String name, String description) { + public CategoryEntity(CategoryEntity parent, String name, String description) { + this.parent = parent; this.name = name; this.description = description; } // 어드민에서 카테고리 관리 고려 - public void update(String name, String description) { + public void update(CategoryEntity parent, String name, String description) { + if (parent != null) { + this.parent = parent; + } if (name != null) { this.name = name; } @@ -63,9 +55,5 @@ public void update(String name, String description) { this.description = description; } } - - public void delete() { - this.deletedAt = LocalDateTime.now(); - } } diff --git a/src/main/java/com/progbe/domain/prompt/entity/PromptDraftEntity.java b/src/main/java/com/progbe/domain/prompt/entity/PromptDraftEntity.java index 987f79e..1ffe607 100644 --- a/src/main/java/com/progbe/domain/prompt/entity/PromptDraftEntity.java +++ b/src/main/java/com/progbe/domain/prompt/entity/PromptDraftEntity.java @@ -2,22 +2,25 @@ import com.progbe.domain.category.entity.CategoryEntity; import com.progbe.domain.user.entity.UserEntity; +import com.progbe.global.common.BaseEntity; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; @Entity -@Table(name = "prompt_drafts") +@Table( + name = "prompt_drafts", + indexes = { + @Index(name = "idx_prompt_drafts_user_id", columnList = "user_id"), + @Index(name = "idx_prompt_drafts_category_id", columnList = "category_id"), + @Index(name = "idx_prompt_drafts_updated_at", columnList = "updated_at") + } +) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@EntityListeners(AuditingEntityListener.class) -public class PromptDraftEntity { +public class PromptDraftEntity extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -46,10 +49,6 @@ public class PromptDraftEntity { @Column(name = "tag_ids_json") private String tagIdsJson; - @LastModifiedDate - @Column(name = "updated_at") - private LocalDateTime updatedAt; - @Builder public PromptDraftEntity( UserEntity user, diff --git a/src/main/java/com/progbe/domain/prompt/entity/PromptEntity.java b/src/main/java/com/progbe/domain/prompt/entity/PromptEntity.java index c35312e..8604246 100644 --- a/src/main/java/com/progbe/domain/prompt/entity/PromptEntity.java +++ b/src/main/java/com/progbe/domain/prompt/entity/PromptEntity.java @@ -2,16 +2,12 @@ import com.progbe.domain.category.entity.CategoryEntity; import com.progbe.domain.user.entity.UserEntity; +import com.progbe.global.common.BaseEntity; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.annotation.LastModifiedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; @Entity @Table( @@ -24,8 +20,7 @@ ) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@EntityListeners(AuditingEntityListener.class) -public class PromptEntity { +public class PromptEntity extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -46,16 +41,8 @@ public class PromptEntity { @Column(nullable = false, columnDefinition = "TEXT") private String content; - @CreatedDate - @Column(name = "created_at", updatable = false) - private LocalDateTime createdAt; - - @LastModifiedDate - @Column(name = "updated_at") - private LocalDateTime updatedAt; - - @Column(name = "deleted_at") - private LocalDateTime deletedAt; + @OneToOne(mappedBy = "prompt", cascade = CascadeType.ALL, orphanRemoval = true) + private PromptStatusEntity statusEntity; @Builder public PromptEntity(UserEntity user, CategoryEntity category, String title, String content) { @@ -77,8 +64,9 @@ public void update(CategoryEntity category, String title, String content) { } } - public void delete() { - this.deletedAt = LocalDateTime.now(); + //프롬프트 생성 시 또는 status 테이블과 연결 시 + public void attachStatus(PromptStatusEntity statusEntity) { + this.statusEntity = statusEntity; } } diff --git a/src/main/java/com/progbe/domain/prompt/entity/PromptLikeEntity.java b/src/main/java/com/progbe/domain/prompt/entity/PromptLikeEntity.java index c8272cf..e8ddad8 100644 --- a/src/main/java/com/progbe/domain/prompt/entity/PromptLikeEntity.java +++ b/src/main/java/com/progbe/domain/prompt/entity/PromptLikeEntity.java @@ -1,15 +1,12 @@ package com.progbe.domain.prompt.entity; import com.progbe.domain.user.entity.UserEntity; +import com.progbe.global.common.BaseEntity; import jakarta.persistence.*; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.springframework.data.annotation.CreatedDate; -import org.springframework.data.jpa.domain.support.AuditingEntityListener; - -import java.time.LocalDateTime; @Entity @Table( @@ -26,8 +23,7 @@ ) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@EntityListeners(AuditingEntityListener.class) -public class PromptLikeEntity { +public class PromptLikeEntity extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -42,10 +38,6 @@ public class PromptLikeEntity { @JoinColumn(name = "prompt_id", nullable = false) private PromptEntity prompt; - @CreatedDate - @Column(name = "created_at", updatable = false) - private LocalDateTime createdAt; - @Builder public PromptLikeEntity(UserEntity user, PromptEntity prompt) { this.user = user; diff --git a/src/main/java/com/progbe/domain/prompt/entity/PromptStatusEntity.java b/src/main/java/com/progbe/domain/prompt/entity/PromptStatusEntity.java new file mode 100644 index 0000000..bfe4533 --- /dev/null +++ b/src/main/java/com/progbe/domain/prompt/entity/PromptStatusEntity.java @@ -0,0 +1,44 @@ +package com.progbe.domain.prompt.entity; + +import com.progbe.domain.prompt.type.PromptStatus; +import com.progbe.global.common.BaseEntity; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Table( + name = "prompt_statuses", + uniqueConstraints = { + @UniqueConstraint(name = "uk_prompt_statuses_prompt_id", columnNames = {"prompt_id"}) + } +) +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class PromptStatusEntity extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "prompt_status_id") + private Long id; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "prompt_id", nullable = false, unique = true) + private PromptEntity prompt; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private PromptStatus status; + + @Builder + public PromptStatusEntity(PromptEntity prompt, PromptStatus status) { + this.prompt = prompt; + this.status = status; + } + + public void changeStatus(PromptStatus status) { + this.status = status; + } +} diff --git a/src/main/java/com/progbe/domain/prompt/type/PromptStatus.java b/src/main/java/com/progbe/domain/prompt/type/PromptStatus.java new file mode 100644 index 0000000..03f5071 --- /dev/null +++ b/src/main/java/com/progbe/domain/prompt/type/PromptStatus.java @@ -0,0 +1,8 @@ +package com.progbe.domain.prompt.type; + +// 프롬프트 게시물 공개 상태 +public enum PromptStatus { + PUBLIC, // 공개 + PRIVATE, // 비공개 + DELETED, // 삭제됨 +}