diff --git a/jpashop2/src/main/java/jpabook/jpashop/Member.java b/jpashop2/src/main/java/jpabook/jpashop/Member.java deleted file mode 100644 index f1a2b3f..0000000 --- a/jpashop2/src/main/java/jpabook/jpashop/Member.java +++ /dev/null @@ -1,17 +0,0 @@ -package jpabook.jpashop; - -import lombok.Getter; -import lombok.Setter; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; - -@Entity -@Getter @Setter -public class Member { - - @Id @GeneratedValue - private Long id; - private String username; -} diff --git a/jpashop2/src/main/java/jpabook/jpashop/MemberRepository.java b/jpashop2/src/main/java/jpabook/jpashop/MemberRepository.java index 90c4bb7..5714be8 100644 --- a/jpashop2/src/main/java/jpabook/jpashop/MemberRepository.java +++ b/jpashop2/src/main/java/jpabook/jpashop/MemberRepository.java @@ -1,5 +1,6 @@ package jpabook.jpashop; +import jpabook.jpashop.domain.Member; import org.springframework.stereotype.Repository; import javax.persistence.EntityManager; diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/Address.java b/jpashop2/src/main/java/jpabook/jpashop/domain/Address.java new file mode 100644 index 0000000..213ae62 --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/Address.java @@ -0,0 +1,23 @@ +package jpabook.jpashop.domain; + +import lombok.Getter; + +import javax.persistence.Embeddable; + +@Embeddable +@Getter +public class Address { + + private String city; + private String street; + private String zipcode; + + protected Address() { + } + + public Address(String city, String street, String zipcode) { + this.city = city; + this.street = street; + this.zipcode = zipcode; + } +} diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/Category.java b/jpashop2/src/main/java/jpabook/jpashop/domain/Category.java new file mode 100644 index 0000000..17ab898 --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/Category.java @@ -0,0 +1,38 @@ +package jpabook.jpashop.domain; + +import jpabook.jpashop.domain.item.Item; +import lombok.Getter; +import lombok.Setter; +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter @Setter +public class Category { + + @Id @GeneratedValue + @Column(name = "category_id") + private Long id; + + private String name; + + @ManyToMany + @JoinTable(name = "category_item", + joinColumns = @JoinColumn(name = "category_id"), + inverseJoinColumns = @JoinColumn(name = "item_id")) + private List items = new ArrayList<>(); + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parent_id") + private Category parent; + + @OneToMany(mappedBy = "parent") + private List child = new ArrayList<>(); + + //==연관관계 메서드==// + public void addChildCategory(Category child) { + this.child.add(child); + child.setParent(this); + } +} \ No newline at end of file diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/Delivery.java b/jpashop2/src/main/java/jpabook/jpashop/domain/Delivery.java new file mode 100644 index 0000000..2985781 --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/Delivery.java @@ -0,0 +1,24 @@ +package jpabook.jpashop.domain; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; + +@Entity +@Getter @Setter +public class Delivery { + + @Id @GeneratedValue + @Column(name = "delivery_id") + private Long id; + + @OneToOne(mappedBy = "delivery", fetch = FetchType.LAZY) + private Order order; + + @Embedded + private Address address; + + @Enumerated(EnumType.STRING) + private DeliveryStatus status; //ENUM [READY(준비), COMP(배송)] +} \ No newline at end of file diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/DeliveryStatus.java b/jpashop2/src/main/java/jpabook/jpashop/domain/DeliveryStatus.java new file mode 100644 index 0000000..13127ef --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/DeliveryStatus.java @@ -0,0 +1,5 @@ +package jpabook.jpashop.domain; + +public enum DeliveryStatus { + READY, COMP +} diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/Member.java b/jpashop2/src/main/java/jpabook/jpashop/domain/Member.java new file mode 100644 index 0000000..568bb51 --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/Member.java @@ -0,0 +1,25 @@ +package jpabook.jpashop.domain; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter @Setter +public class Member { + + @Id @GeneratedValue + @Column(name = "member_id") + private Long id; + + private String name; + + @Embedded + private Address address; + + @OneToMany(mappedBy = "member") + private List orders = new ArrayList<>(); +} diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/Order.java b/jpashop2/src/main/java/jpabook/jpashop/domain/Order.java new file mode 100644 index 0000000..4e45715 --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/Order.java @@ -0,0 +1,51 @@ +package jpabook.jpashop.domain; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Table(name = "orders") +@Getter @Setter +public class Order { + + @Id @GeneratedValue + @Column(name = "order_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; //주문 회원 + + @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) + private List orderItems = new ArrayList<>(); + + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "delivery_id") + private Delivery delivery; //배송정보 + + private LocalDateTime orderDate; //주문시간 + + @Enumerated(EnumType.STRING) + private OrderStatus status; //주문상태 [ORDER, CANCEL] + + //==연관관계 메서드==// + public void setMember(Member member) { + this.member = member; + member.getOrders().add(this); + } + + public void addOrderItem(OrderItem orderItem) { + orderItems.add(orderItem); + orderItem.setOrder(this); + } + + public void setDelivery(Delivery delivery) { + this.delivery = delivery; + delivery.setOrder(this); + } +} diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/OrderItem.java b/jpashop2/src/main/java/jpabook/jpashop/domain/OrderItem.java new file mode 100644 index 0000000..902552e --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/OrderItem.java @@ -0,0 +1,28 @@ +package jpabook.jpashop.domain; + +import jpabook.jpashop.domain.item.Item; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; + +@Entity +@Table(name = "order_item") +@Getter @Setter +public class OrderItem { + + @Id @GeneratedValue + @Column(name = "order_item_id") + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "item_id") + private Item item; //주문 상품 + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "order_id") + private Order order; //주문 + + private int orderPrice; //주문 가격 + private int count; //주문 수량 +} diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/OrderStatus.java b/jpashop2/src/main/java/jpabook/jpashop/domain/OrderStatus.java new file mode 100644 index 0000000..e6e0700 --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/OrderStatus.java @@ -0,0 +1,5 @@ +package jpabook.jpashop.domain; + +public enum OrderStatus { + ORDER, CANCEL +} diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/item/Album.java b/jpashop2/src/main/java/jpabook/jpashop/domain/item/Album.java new file mode 100644 index 0000000..28d595d --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/item/Album.java @@ -0,0 +1,16 @@ +package jpabook.jpashop.domain.item; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; + +@Entity +@DiscriminatorValue("A") +@Getter @Setter +public class Album extends Item { + + private String artist; + private String etc; +} diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/item/Book.java b/jpashop2/src/main/java/jpabook/jpashop/domain/item/Book.java new file mode 100644 index 0000000..9457fb5 --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/item/Book.java @@ -0,0 +1,15 @@ +package jpabook.jpashop.domain.item; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; + +@Entity +@DiscriminatorValue("B") +@Getter @Setter +public class Book extends Item { + + private String author; + private String isbn; +} diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/item/Item.java b/jpashop2/src/main/java/jpabook/jpashop/domain/item/Item.java new file mode 100644 index 0000000..fbd7e75 --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/item/Item.java @@ -0,0 +1,27 @@ +package jpabook.jpashop.domain.item; + +import jpabook.jpashop.domain.Category; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Inheritance(strategy = InheritanceType.SINGLE_TABLE) +@DiscriminatorColumn(name = "dtype") +@Getter @Setter +public abstract class Item { + + @Id @GeneratedValue + @Column(name = "item_id") + private Long id; + + private String name; + private int price; + private int stockQuantity; + + @ManyToMany(mappedBy = "items") + private List categories = new ArrayList(); +} \ No newline at end of file diff --git a/jpashop2/src/main/java/jpabook/jpashop/domain/item/Movie.java b/jpashop2/src/main/java/jpabook/jpashop/domain/item/Movie.java new file mode 100644 index 0000000..a5c7fbc --- /dev/null +++ b/jpashop2/src/main/java/jpabook/jpashop/domain/item/Movie.java @@ -0,0 +1,16 @@ +package jpabook.jpashop.domain.item; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; + +@Entity +@DiscriminatorValue("M") +@Getter @Setter +public class Movie extends Item { + + private String director; + private String actor; +} diff --git a/jpashop2/src/test/java/jpabook/jpashop/MemberRepositoryTest.java b/jpashop2/src/test/java/jpabook/jpashop/MemberRepositoryTest.java index 4d68fc4..edf7b53 100644 --- a/jpashop2/src/test/java/jpabook/jpashop/MemberRepositoryTest.java +++ b/jpashop2/src/test/java/jpabook/jpashop/MemberRepositoryTest.java @@ -1,5 +1,6 @@ package jpabook.jpashop; +import jpabook.jpashop.domain.Member; import org.assertj.core.api.Assertions; import org.junit.Test; import org.junit.runner.RunWith; @@ -10,8 +11,6 @@ import javax.transaction.Transactional; -import static org.junit.Assert.*; - @RunWith(SpringRunner.class) @SpringBootTest public class MemberRepositoryTest {