diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/category/entity/Category.java b/store-service/src/main/java/com/justpickup/storeservice/domain/category/entity/Category.java new file mode 100644 index 0000000..7d8ceac --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/category/entity/Category.java @@ -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 items; + + // == 연관관계 편의 메소드 == // + public void setStore(Store store) { + this.store = store; + store.getCategories().add(this); + } + + public void addItem(Item item) { + items.add(item); + item.setCategory(this); + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/entity/FavoriteStore.java b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/entity/FavoriteStore.java new file mode 100644 index 0000000..cc1882a --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/favoritestore/entity/FavoriteStore.java @@ -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; +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/item/entity/Item.java b/store-service/src/main/java/com/justpickup/storeservice/domain/item/entity/Item.java new file mode 100644 index 0000000..356b527 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/item/entity/Item.java @@ -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 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 itemOptions) { + Item item = new Item(); + item.setCategory(category); + item.setStore(store); + itemOptions.forEach(item::addItemOption); + return item; + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/ItemOption.java b/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/ItemOption.java new file mode 100644 index 0000000..e6417dc --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/ItemOption.java @@ -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); + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/OptionType.java b/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/OptionType.java new file mode 100644 index 0000000..12c8c95 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/itemoption/entity/OptionType.java @@ -0,0 +1,5 @@ +package com.justpickup.storeservice.domain.itemoption.entity; + +public enum OptionType { + REQUIRED, OTHER +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/map/entity/Map.java b/store-service/src/main/java/com/justpickup/storeservice/domain/map/entity/Map.java new file mode 100644 index 0000000..384a429 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/map/entity/Map.java @@ -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; +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/review/entity/Review.java b/store-service/src/main/java/com/justpickup/storeservice/domain/review/entity/Review.java new file mode 100644 index 0000000..25c8907 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/review/entity/Review.java @@ -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; +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/reviewreply/entity/ReviewReply.java b/store-service/src/main/java/com/justpickup/storeservice/domain/reviewreply/entity/ReviewReply.java new file mode 100644 index 0000000..db4d1ce --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/reviewreply/entity/ReviewReply.java @@ -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; +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/domain/store/entity/Store.java b/store-service/src/main/java/com/justpickup/storeservice/domain/store/entity/Store.java new file mode 100644 index 0000000..d30fb05 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/domain/store/entity/Store.java @@ -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 categories; + + @OneToMany(mappedBy = "store") + private List items; + + // == 연관관계 편의 메소드 == // + public void addCategory(Category category) { + categories.add(category); + category.setStore(this); + } + + public void addItem(Item item) { + items.add(item); + item.setStore(this); + } +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/entity/Address.java b/store-service/src/main/java/com/justpickup/storeservice/global/entity/Address.java new file mode 100644 index 0000000..3529837 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/entity/Address.java @@ -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; +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/entity/BaseEntity.java b/store-service/src/main/java/com/justpickup/storeservice/global/entity/BaseEntity.java new file mode 100644 index 0000000..e585fb5 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/entity/BaseEntity.java @@ -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; +} \ No newline at end of file diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/entity/Photo.java b/store-service/src/main/java/com/justpickup/storeservice/global/entity/Photo.java new file mode 100644 index 0000000..2750a00 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/entity/Photo.java @@ -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; +} diff --git a/store-service/src/main/java/com/justpickup/storeservice/global/entity/Yn.java b/store-service/src/main/java/com/justpickup/storeservice/global/entity/Yn.java new file mode 100644 index 0000000..9bea856 --- /dev/null +++ b/store-service/src/main/java/com/justpickup/storeservice/global/entity/Yn.java @@ -0,0 +1,5 @@ +package com.justpickup.storeservice.global.entity; + +public enum Yn { + Y, N +} diff --git a/store-service/src/main/resources/application.yml b/store-service/src/main/resources/application.yml index 34b3d99..0636d57 100644 --- a/store-service/src/main/resources/application.yml +++ b/store-service/src/main/resources/application.yml @@ -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