diff --git a/board/docs/board-erd.svg b/board/docs/board-erd.svg index 85e2c69e..0c498de3 100644 --- a/board/docs/board-erd.svg +++ b/board/docs/board-erd.svg @@ -1,4 +1,4 @@ -Article (게시글)PKid - biginttitle (제목) - varchar(255)content (본문) -varchar(65535)hashtag (해시태그) - varchar(255)createdAt (생성일시) - datetimecreatedBy (생성자) - varchar(100)modifiedAt (수정일시) - datetimemodifiedBy (수정자) - varchar(100)ArticleComment (댓글)PKid - bigintFKarticle_id (게시글 id) - bigintcontent (본문) - varchar(2000)createdAt (생성일시) - datetimecreatedBy (생성자) - varchar(100)modifiedAt (수정일시) - datetimemodifiedBy (수정자) - varchar(100) \ No newline at end of file +Article (게시글)PKid - biginttitle (제목) - varchar(255)content (본문) -varchar(10000)hashtag (해시태그) - varchar(255)createdAt (생성일시) - datetimecreatedBy (생성자) - varchar(100)modifiedAt (수정일시) - datetimemodifiedBy (수정자) - varchar(100)ArticleComment (댓글)PKid - bigintFKarticle_id (게시글 id) - bigintcontent (본문) - varchar(500)createdAt (생성일시) - datetimecreatedBy (생성자) - varchar(100)modifiedAt (수정일시) - datetimemodifiedBy (수정자) - varchar(100) \ No newline at end of file diff --git a/board/src/main/java/com/example/board/config/JpaConfig.java b/board/src/main/java/com/example/board/config/JpaConfig.java new file mode 100644 index 00000000..57c36619 --- /dev/null +++ b/board/src/main/java/com/example/board/config/JpaConfig.java @@ -0,0 +1,18 @@ +package com.example.board.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.domain.AuditorAware; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; + +import java.util.Optional; + +@EnableJpaAuditing +@Configuration +public class JpaConfig { + + @Bean + public AuditorAware auditorAware() { + return () -> Optional.of("bobby"); // TODO: 인증기능 구현 시 수정 + } +} diff --git a/board/src/main/java/com/example/board/domain/Article.java b/board/src/main/java/com/example/board/domain/Article.java index 0e7db6e6..8a8966d9 100644 --- a/board/src/main/java/com/example/board/domain/Article.java +++ b/board/src/main/java/com/example/board/domain/Article.java @@ -1,15 +1,80 @@ package com.example.board.domain; -import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.springframework.data.annotation.CreatedBy; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedBy; +import org.springframework.data.annotation.LastModifiedDate; +import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.Objects; + +@Getter +@ToString +@Table(indexes = { + @Index(columnList = "title"), + @Index(columnList = "hashtag"), + @Index(columnList = "createdAt"), + @Index(columnList = "createdBy") +}) +@Entity public class Article { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + + @Setter + @Column(nullable = false) private String title; // 제목 + + @Setter + @Column(nullable = false, length = 10000) private String content; // 본문 + + @Setter private String hashtag; // 해시태그 + @CreatedDate + @Column(nullable = false) private LocalDateTime createdAt; // 생성일시 + + @CreatedBy + @Column(nullable = false, length = 100) private String createdBy; // 생성자 + + @LastModifiedDate + @Column(nullable = false) private LocalDateTime modifiedAt; // 수정일시 + + @LastModifiedBy + @Column(nullable = false, length = 100) private String modifiedBy; //수정자 + + protected Article() {} + + private Article(String title, String content, String hashtag) { + this.title = title; + this.content = content; + this.hashtag = hashtag; + } + + public static Article of(String title, String content, String hashtag) { + return new Article(title, content, hashtag); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Article article)) return false; + return id != null && id.equals(article.id); + } + + @Override + public int hashCode() { + return Objects.hash(id); + } }