Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions src/main/java/kr/warmlink/common/entity/BaseEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package kr.warmlink.common.entity;

import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.MappedSuperclass;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.SQLRestriction;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@SQLDelete(sql = "UPDATE #{entityName} SET deleted_at = NOW() WHERE id = ?")
@SQLRestriction("deleted_at IS NULL")
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@CreatedDate
@Column(name = "created_at", nullable = false, updatable = false, columnDefinition = "TIMESTAMP")
private LocalDateTime createdAt;

@LastModifiedDate
@Column(name = "updated_at", nullable = false, columnDefinition = "TIMESTAMP")
private LocalDateTime updatedAt;

@Column(name = "deleted_at", columnDefinition = "TIMESTAMP")
private LocalDateTime deletedAt;

public void delete() {
this.deletedAt = LocalDateTime.now();
}

public boolean isDeleted() {
return deletedAt != null;
}

public void restore() {
this.deletedAt = null;
}

public Long getId() {
return this.id;
}
}
45 changes: 45 additions & 0 deletions src/main/java/kr/warmlink/domain/article/entity/Article.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package kr.warmlink.domain.article.entity;

import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode;
import jakarta.persistence.Entity;
import jakarta.persistence.ForeignKey;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import kr.warmlink.common.entity.BaseEntity;
import kr.warmlink.domain.auth.entity.User;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity(name = "article")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Article extends BaseEntity {
@ManyToOne
@JoinColumn(name = "user_id", nullable = false, foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
private User user;

@Column(name = "title", nullable = false)
private String title;

@Column(name = "content", nullable = false, columnDefinition = "TEXT")
private String content;

@Builder
public Article(User user, String title, String content) {
this.user = user;
this.title = title;
this.content = content;
}

public void changeTitle(String title) {
this.title = title;
}

public void changeContent(String content) {
this.content = content;
}

}
50 changes: 50 additions & 0 deletions src/main/java/kr/warmlink/domain/auth/entity/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package kr.warmlink.domain.auth.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.OneToMany;
import kr.warmlink.common.entity.BaseEntity;
import kr.warmlink.domain.article.entity.Article;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.util.List;

@Entity(name = "user")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User extends BaseEntity {
@Column(name = "email", nullable = false, updatable = false, length = 50)
private String email;

@Column(name = "name", nullable = false, length = 8)
private String name;

@Column(name = "interest_field", nullable = false, length = 10)
private String interestField;

@Column(name = "birth", nullable = false)
private LocalDate birth;

@Column(name = "region", nullable = false, length = 10)
private String region;

@Column(name = "job", nullable = false, length = 10)
private String job;

@OneToMany(mappedBy = "user")
private List<Article> articles;

@Builder
public User(String email, String name, String interestField, LocalDate birth, String region, String job) {
this.email = email;
this.name = name;
this.interestField = interestField;
this.birth = birth;
this.region = region;
this.job = job;
}
}
Loading