Merge pull request #8 from Development-team-1/store-service-jpa-design

store-service 엔티티 클래스 설계 및 연관관계 설정
This commit is contained in:
백창훈
2022-01-27 13:39:19 +09:00
committed by GitHub
14 changed files with 393 additions and 3 deletions

View File

@@ -0,0 +1,46 @@
package com.justpickup.storeservice.domain.category.entity;
import com.justpickup.storeservice.domain.item.entity.Item;
import com.justpickup.storeservice.domain.store.entity.Store;
import com.justpickup.storeservice.global.entity.BaseEntity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.List;
import static javax.persistence.FetchType.LAZY;
@Entity
@Table(name = "category")
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Category extends BaseEntity {
@Id @GeneratedValue
@Column(name = "category_id")
private Long id;
private String name;
private Integer orders;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "store_id")
private Store store;
@OneToMany(mappedBy = "category")
private List<Item> items;
// == 연관관계 편의 메소드 == //
public void setStore(Store store) {
this.store = store;
store.getCategories().add(this);
}
public void addItem(Item item) {
items.add(item);
item.setCategory(this);
}
}

View File

@@ -0,0 +1,28 @@
package com.justpickup.storeservice.domain.favoritestore.entity;
import com.justpickup.storeservice.domain.store.entity.Store;
import com.justpickup.storeservice.global.entity.BaseEntity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import static javax.persistence.FetchType.LAZY;
@Entity
@Table(name = "favorite_store")
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
public class FavoriteStore extends BaseEntity {
@Id @GeneratedValue
@Column(name = "favorite_store_id")
private Long id;
//== user-service.user pk ==//
private Long userId;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "store_id")
private Store store;
}

View File

@@ -0,0 +1,73 @@
package com.justpickup.storeservice.domain.item.entity;
import com.justpickup.storeservice.domain.category.entity.Category;
import com.justpickup.storeservice.domain.itemoption.entity.ItemOption;
import com.justpickup.storeservice.domain.store.entity.Store;
import com.justpickup.storeservice.global.entity.BaseEntity;
import com.justpickup.storeservice.global.entity.Photo;
import com.justpickup.storeservice.global.entity.Yn;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.List;
import static javax.persistence.FetchType.LAZY;
@Entity
@Table(name = "item")
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Item extends BaseEntity {
@Id @GeneratedValue
@Column(name = "item_id")
private Long id;
private String name;
@Enumerated(EnumType.STRING)
private Yn salesYn;
private Long price;
@Embedded
private Photo photo;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "category_id")
private Category category;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "store_id")
private Store store;
@OneToMany(mappedBy = "item")
private List<ItemOption> itemOptions;
// == 연관관계 편의 메소드 ==//
public void addItemOption(ItemOption itemOption) {
itemOptions.add(itemOption);
itemOption.setItem(this);
}
public void setStore(Store store) {
this.store = store;
store.getItems().add(this);
}
public void setCategory(Category category) {
this.category = category;
category.getItems().add(this);
}
// == 생성 메소드 == //
public static Item createdItem(Category category, Store store, List<ItemOption> itemOptions) {
Item item = new Item();
item.setCategory(category);
item.setStore(store);
itemOptions.forEach(item::addItemOption);
return item;
}
}

View File

@@ -0,0 +1,38 @@
package com.justpickup.storeservice.domain.itemoption.entity;
import com.justpickup.storeservice.domain.item.entity.Item;
import com.justpickup.storeservice.global.entity.BaseEntity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import static javax.persistence.FetchType.LAZY;
@Entity
@Table(name = "item_option")
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ItemOption extends BaseEntity {
@Id @GeneratedValue
@Column(name = "item_option_id")
private Long id;
@Enumerated(EnumType.STRING)
private OptionType optionType;
private Long price;
private String name;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "item_id")
private Item item;
// == 연관관계 편의 메소드 == //
public void setItem(Item item) {
this.item = item;
item.getItemOptions().add(this);
}
}

View File

@@ -0,0 +1,5 @@
package com.justpickup.storeservice.domain.itemoption.entity;
public enum OptionType {
REQUIRED, OTHER
}

View File

@@ -0,0 +1,17 @@
package com.justpickup.storeservice.domain.map.entity;
import com.justpickup.storeservice.global.entity.BaseEntity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Table(name = "map")
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Map extends BaseEntity {
@Id @GeneratedValue
@Column(name = "map_id")
private Long id;
}

View File

@@ -0,0 +1,44 @@
package com.justpickup.storeservice.domain.review.entity;
import com.justpickup.storeservice.domain.reviewreply.entity.ReviewReply;
import com.justpickup.storeservice.domain.store.entity.Store;
import com.justpickup.storeservice.global.entity.BaseEntity;
import com.justpickup.storeservice.global.entity.Photo;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import static javax.persistence.FetchType.LAZY;
@Entity
@Table(name = "review")
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Review extends BaseEntity {
@Id @GeneratedValue
@Column(name = "review_id")
private Long id;
private String content;
private Integer starRating;
@Embedded
private Photo photo;
//== user-service.user pk ==//
private Long userId;
//== order-service.order pk ==//
private Long orderId;
@OneToOne(fetch = LAZY)
@JoinColumn(name = "review_reply_id")
private ReviewReply reviewReply;
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "store_id")
private Store store;
}

View File

@@ -0,0 +1,20 @@
package com.justpickup.storeservice.domain.reviewreply.entity;
import com.justpickup.storeservice.global.entity.BaseEntity;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Table(name = "review_reply")
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ReviewReply extends BaseEntity {
@Id @GeneratedValue
@Column(name = "review_reply_id")
private Long id;
private String content;
}

View File

@@ -0,0 +1,63 @@
package com.justpickup.storeservice.domain.store.entity;
import com.justpickup.storeservice.domain.category.entity.Category;
import com.justpickup.storeservice.domain.item.entity.Item;
import com.justpickup.storeservice.domain.map.entity.Map;
import com.justpickup.storeservice.global.entity.Address;
import com.justpickup.storeservice.global.entity.BaseEntity;
import com.justpickup.storeservice.global.entity.Photo;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.List;
import static javax.persistence.FetchType.LAZY;
@Entity
@Table(name = "store")
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Store extends BaseEntity {
@Id @GeneratedValue
@Column(name = "store_id")
private Long id;
private LocalDateTime businessStartTime;
private LocalDateTime businessEndTime;
private String phoneNumber;
@Embedded
private Address address;
@Embedded
private Photo photo;
@OneToOne(fetch = LAZY)
@JoinColumn(name = "map_id")
private Map map;
//== user-service.user pk ==//
private Long userId;
@OneToMany(mappedBy = "store")
private List<Category> categories;
@OneToMany(mappedBy = "store")
private List<Item> items;
// == 연관관계 편의 메소드 == //
public void addCategory(Category category) {
categories.add(category);
category.setStore(this);
}
public void addItem(Item item) {
items.add(item);
item.setStore(this);
}
}

View File

@@ -0,0 +1,17 @@
package com.justpickup.storeservice.global.entity;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.Embeddable;
@Embeddable
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor @Getter
public class Address {
private String city;
private String street;
private String zipcode;
}

View File

@@ -0,0 +1,13 @@
package com.justpickup.storeservice.global.entity;
import javax.persistence.MappedSuperclass;
import java.time.LocalDateTime;
@MappedSuperclass
public class BaseEntity {
private Long createdBy;
private LocalDateTime createdAt;
private Long lastModifiedBy;
private LocalDateTime lastModifiedAt;
}

View File

@@ -0,0 +1,20 @@
package com.justpickup.storeservice.global.entity;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor @Getter
public class Photo {
@Column(name = "photo_path")
private String path;
@Column(name = "photo_name")
private String name;
}

View File

@@ -0,0 +1,5 @@
package com.justpickup.storeservice.global.entity;
public enum Yn {
Y, N
}

View File

@@ -8,9 +8,10 @@ spring:
jpa:
hibernate:
ddl-auto: create-drop
generate-ddl: true
show-sql: true
format_sql: true
properties:
hibernate:
format_sql: true
show_sql: true
open-in-view: false
default_batch_fetch_size: 1000