0. ERD 보고 Entity kanban board 작성
1. member
@Entity
@Table(name = "member")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class Member {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_no")
private Long memberNo;
@Id
@Column(name = "email", unique = true)
private String email;
@Column
private String password;
@Column
private String nickname;
@Column
private String name;
@Column
private LocalDate birthday;
@CreatedDate
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Column(name = "created_at")
private LocalDateTime createdAt;
@JsonIgnore
@OneToMany(mappedBy = "member")
private List<Post> posts = new ArrayList<>();
@JsonIgnore
@OneToMany(mappedBy = "member")
private List<Order> orders = new ArrayList<>();
@Builder
public Member(String email, String password, String nickname,
String name,LocalDate birthday){
this.email =email;
this.password =password;
this.nickname = nickname;
this.name = name;
this.birthday = birthday;
}
}
2. Post
@Entity
@Table(name = "post")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class Post extends AuditingFields{
@Id
@Column(name = "post_no")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_type_no")
private PostType postTypeId;
@Setter
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_no")
private Product productId;
@Column(name = "product_no", updatable = false, insertable = false)
private Long productNo;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_email")
private Member member;
@Setter
@Column
private String title;
@Setter
@Column(name = "content", length = 10000)
private String content;
@OneToMany(mappedBy = "post", cascade = CascadeType.ALL)
private final Set<PostComment> postComments = new LinkedHashSet<>();
@Builder
public Post(PostType postTypeId, Member member, String title, String content) {
this.postTypeId = postTypeId;
this.member = member; // 이메일 값 설정
this.title = title;
this.content = content;
}
}
3. Postcomment
@Getter
@ToString
@Table(name = "post_comment")
@Entity
public class PostComment extends AuditingFields{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "comment_id")
private Long id;
@Setter
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_no")
private Post post;
@Setter @Column(name = "content", length = 500) private String content; // 본문
}
4. order
@Entity
@Table(name = "orders")
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name ="order_no")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_email", insertable = false, updatable = false)
private Member member;
@Column(name = "member_no")
private Long memberNo;
@OneToMany(mappedBy = "order",cascade = CascadeType.ALL) // persist를 전파함
private List<OrderProduct> orderProducts = new ArrayList<>();
@Enumerated(EnumType.STRING) // 무조건 String
private OrderStatus status; // 주문 상태 order cancel
@Builder
public Order(Long id, Member member, Long memberNo, OrderStatus status){
this.id =id;
this.member = member;
this.memberNo = memberNo;
this.status = status;
}
}
5. Product
package com.portfolio.ohousev1.entity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
@Table(name = "item")
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name ="product_no")
@Setter
private Long id;
@Column
private Long price;
@Column
private Long stock;
@Column
private Long title;
@Column(name = "description")
private String Description;
@Column(name = "created_at")
@Setter
private LocalDateTime createdAt;
}
6.orderProduct
package com.portfolio.ohousev1.entity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.cache.spi.support.AbstractReadWriteAccess;
import javax.persistence.*;
@Table(name = "order_product")
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class OrderProduct {
@Id
@Column(name = "order_product_no")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "order_no", insertable = false, updatable = false)
private Order order;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_no", insertable = false, updatable = false)
private Product product;
@Column
private int count;
@Column
private int price;
}
7.AuditingFields
package com.portfolio.ohousev1.entity;
import lombok.Getter;
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 org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.Column;
import javax.persistence.EntityListeners;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@Getter
@ToString
@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public class AuditingFields {
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@CreatedDate
@Column(name = "createdAt", updatable = false)
private LocalDateTime createdAt; // 생성일시 auditing
@CreatedBy
@Column(name = "createdBy", updatable = false, length = 100)
String createdBy; // 생성자
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
@LastModifiedDate
@Column(name = "modifiedAt")
private LocalDateTime modifiedAt; // 수정일시
@LastModifiedBy
@Column(name = "modifiedBy", length = 100)
String modifiedBy; // 수정자
}
'포트폴리오 > ohouseClone' 카테고리의 다른 글
5. SpringSecurity 설정 및 customlogin페이지 제작 (0) | 2023.09.05 |
---|---|
4. 게시판 작성 front & member api (0) | 2023.09.05 |
3. 커뮤니티 게시판 서비스 api 개발 & 메인 페이지 (0) | 2023.08.19 |
1. 기본 Intellj setting 및 db연결 & 칸반보드 작성 (0) | 2023.08.11 |
0.오늘의집 클론 포트폴리오 (0) | 2023.08.02 |