Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Entity 구성 #2 #17

Merged
merged 11 commits into from
Jul 22, 2024
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.staccato.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@Configuration
@EnableJpaAuditing
public class JpaAuditingConfig {
}
23 changes: 23 additions & 0 deletions backend/src/main/java/com/staccato/config/domain/BaseEntity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.staccato.config.domain;

import java.time.LocalDateTime;

import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import lombok.Getter;

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
@Getter
public abstract class BaseEntity {
@CreatedDate
private LocalDateTime createdDateTIme;
@LastModifiedDate
private LocalDateTime modifiedDateTime;
private Boolean isDeleted = false;
}
27 changes: 27 additions & 0 deletions backend/src/main/java/com/staccato/member/domain/Member.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.staccato.member.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

import org.hibernate.annotations.SQLDelete;

import com.staccato.config.domain.BaseEntity;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@SQLDelete(sql = "UPDATE member SET is_deleted = true WHERE id = ?")
public class Member extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String nickname;
@Column(columnDefinition = "TEXT")
private String imageUrl;
}
27 changes: 27 additions & 0 deletions backend/src/main/java/com/staccato/pin/domain/Pin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.staccato.pin.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

import org.hibernate.annotations.SQLDelete;

import com.staccato.config.domain.BaseEntity;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@SQLDelete(sql = "UPDATE pin SET is_deleted = true WHERE id = ?")
public class Pin extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String place;
@Column(nullable = false)
private String address;
}
32 changes: 32 additions & 0 deletions backend/src/main/java/com/staccato/travel/domain/Mate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.staccato.travel.domain;

import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;

import org.hibernate.annotations.SQLDelete;

import com.staccato.config.domain.BaseEntity;
import com.staccato.member.domain.Member;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@SQLDelete(sql = "UPDATE mate SET is_deleted = true WHERE id = ?")
public class Mate extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id", nullable = false)
private Member member;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "travel_id", nullable = false)
private Travel travel;
}
35 changes: 35 additions & 0 deletions backend/src/main/java/com/staccato/travel/domain/Travel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.staccato.travel.domain;

import java.time.LocalDate;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

import org.hibernate.annotations.SQLDelete;

import com.staccato.config.domain.BaseEntity;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@SQLDelete(sql = "UPDATE travel SET is_deleted = true WHERE id = ?")
public class Travel extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(columnDefinition = "TEXT")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안써봐서 잘 모르긴 하는데, 찾아보니까 columnDefinition은 특정 데이터베이스에 종속적이므로 @Lob을 사용하는 것을 추천하는 것 같은데 어떻게 생각하시나요?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

h2에서는 TEXT 자료형이 사용되지 않는다고 알려져있는데 문제 없이 DDL이 생성되는 것을보고 현재는 @Lob을 사용하지 않았습니다!

private String thumbnailUrl;
@Column(nullable = false, length = 50)
private String title;
@Column(columnDefinition = "TEXT")
private String description;
@Column(nullable = false)
private LocalDate startAt;
@Column(nullable = false)
private LocalDate endAt;
}
38 changes: 38 additions & 0 deletions backend/src/main/java/com/staccato/visit/domain/Visit.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.staccato.visit.domain;

import java.time.LocalDate;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;

import org.hibernate.annotations.SQLDelete;

import com.staccato.config.domain.BaseEntity;
import com.staccato.pin.domain.Pin;
import com.staccato.travel.domain.Travel;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@SQLDelete(sql = "UPDATE visit SET is_deleted = true WHERE id = ?")
public class Visit extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private LocalDate visitedAt;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "pin_id", nullable = false)
private Pin pin;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "travel_id", nullable = false)
private Travel travel;
}
31 changes: 31 additions & 0 deletions backend/src/main/java/com/staccato/visit/domain/VisitImage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.staccato.visit.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;

import org.hibernate.annotations.SQLDelete;

import com.staccato.config.domain.BaseEntity;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@SQLDelete(sql = "UPDATE visit_image SET is_deleted = true WHERE id = ?")
public class VisitImage extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(columnDefinition = "TEXT")
private String imageUrl;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "visit_id", nullable = false)
private Visit visit;
}
35 changes: 35 additions & 0 deletions backend/src/main/java/com/staccato/visit/domain/VisitLog.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.staccato.visit.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;

import org.hibernate.annotations.SQLDelete;

import com.staccato.config.domain.BaseEntity;
import com.staccato.member.domain.Member;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@SQLDelete(sql = "UPDATE visit_log SET is_deleted = true WHERE id = ?")
public class VisitLog extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(columnDefinition = "TEXT")
private String content;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "visit_id", nullable = false)
private Visit visit;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id", nullable = false)
private Member member;
}
16 changes: 16 additions & 0 deletions backend/src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
spring:
application:
name: staccato
sql:
init:
mode: always
h2:
console:
enabled: true
datasource:
url: jdbc:h2:mem:staccato
jpa:
show-sql: true
properties:
hibernate:
format_sql: true
hibernate:
ddl-auto: create
defer-datasource-initialization: true