diff --git a/jpashop/build.gradle b/jpashop/build.gradle index 723715a5..9b71e9e9 100644 --- a/jpashop/build.gradle +++ b/jpashop/build.gradle @@ -24,7 +24,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-devtools' - + implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6' compileOnly 'org.projectlombok:lombok' diff --git a/jpashop/src/main/java/com/example/jpashop/Member.java b/jpashop/src/main/java/com/example/jpashop/Member.java deleted file mode 100644 index 7a90bed8..00000000 --- a/jpashop/src/main/java/com/example/jpashop/Member.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.example.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/jpashop/src/main/java/com/example/jpashop/MemberRepository.java b/jpashop/src/main/java/com/example/jpashop/MemberRepository.java deleted file mode 100644 index 9dcbc779..00000000 --- a/jpashop/src/main/java/com/example/jpashop/MemberRepository.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.example.jpashop; - -import org.springframework.stereotype.Repository; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - -@Repository -public class MemberRepository { - - @PersistenceContext - private EntityManager em; - - public Long save(Member member) { - em.persist(member); - return member.getId(); - } - - public Member find(Long id) { - return em.find(Member.class, id); - } -} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/Address.java b/jpashop/src/main/java/com/example/jpashop/domain/Address.java new file mode 100644 index 00000000..24415757 --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/Address.java @@ -0,0 +1,14 @@ +package com.example.jpashop.domain; + +import lombok.Getter; + +import javax.persistence.Embeddable; + +@Embeddable +@Getter +public class Address { + + private String city; + private String street; + private String zipcode; +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/Category.java b/jpashop/src/main/java/com/example/jpashop/domain/Category.java new file mode 100644 index 00000000..55ffa7f3 --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/Category.java @@ -0,0 +1,34 @@ +package com.example.jpashop.domain; + +import com.example.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 + @JoinColumn(name = "parent_id") + private Category parent; + + @OneToMany(mappedBy = "parent") + private List child = new ArrayList<>(); +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/Delivery.java b/jpashop/src/main/java/com/example/jpashop/domain/Delivery.java new file mode 100644 index 00000000..732d487e --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/Delivery.java @@ -0,0 +1,24 @@ +package com.example.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") + private Order order; + + @Embedded + private Address address; + + @Enumerated(EnumType.STRING) + private DeliveryStatus status; // READY, COMP +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/DeliveryStatus.java b/jpashop/src/main/java/com/example/jpashop/domain/DeliveryStatus.java new file mode 100644 index 00000000..31b581cf --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/DeliveryStatus.java @@ -0,0 +1,5 @@ +package com.example.jpashop.domain; + +public enum DeliveryStatus { + READY, COMP +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/Member.java b/jpashop/src/main/java/com/example/jpashop/domain/Member.java new file mode 100644 index 00000000..6be8bb0a --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/Member.java @@ -0,0 +1,25 @@ +package com.example.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 order = new ArrayList<>(); +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/Order.java b/jpashop/src/main/java/com/example/jpashop/domain/Order.java new file mode 100644 index 00000000..eb9a7ee1 --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/Order.java @@ -0,0 +1,35 @@ +package com.example.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 + @JoinColumn(name = "member_id") + private Member member; + + @OneToMany(mappedBy = "order") + private List orderItems = new ArrayList<>(); + + @OneToOne + @JoinColumn(name = "delivery_id") + private Delivery delivery; + + private LocalDateTime orderDate; // 주문 시간 + + @Enumerated(EnumType.STRING) + private OrderStatus status; // 주문 상태 [ORDER, CANCEL] +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/OrderItem.java b/jpashop/src/main/java/com/example/jpashop/domain/OrderItem.java new file mode 100644 index 00000000..fe4a16ca --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/OrderItem.java @@ -0,0 +1,27 @@ +package com.example.jpashop.domain; + +import com.example.jpashop.domain.item.Item; +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.*; + +@Entity +@Getter @Setter +public class OrderItem { + + @Id @GeneratedValue + @Column(name = "order_item_id") + private Long id; + + @ManyToOne + @JoinColumn(name = "item_id") + private Item item; + + @ManyToOne + @JoinColumn(name = "order_id") + private Order order; + + private int orderPrice; // 주문가격 + private int count; // 주문 수량 +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/OrderStatus.java b/jpashop/src/main/java/com/example/jpashop/domain/OrderStatus.java new file mode 100644 index 00000000..322a9873 --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/OrderStatus.java @@ -0,0 +1,5 @@ +package com.example.jpashop.domain; + +public enum OrderStatus { + ORDER, CANCEL +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/item/Album.java b/jpashop/src/main/java/com/example/jpashop/domain/item/Album.java new file mode 100644 index 00000000..fd318983 --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/item/Album.java @@ -0,0 +1,16 @@ +package com.example.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/jpashop/src/main/java/com/example/jpashop/domain/item/Book.java b/jpashop/src/main/java/com/example/jpashop/domain/item/Book.java new file mode 100644 index 00000000..e35c8d8a --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/item/Book.java @@ -0,0 +1,16 @@ +package com.example.jpashop.domain.item; + +import lombok.Getter; +import lombok.Setter; + +import javax.persistence.DiscriminatorValue; +import javax.persistence.Entity; + +@Entity +@DiscriminatorValue("B") +@Getter @Setter +public class Book extends Item{ + + private String author; + private String isbn; +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/item/Item.java b/jpashop/src/main/java/com/example/jpashop/domain/item/Item.java new file mode 100644 index 00000000..a0bdffd0 --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/item/Item.java @@ -0,0 +1,27 @@ +package com.example.jpashop.domain.item; + +import com.example.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<>(); +} diff --git a/jpashop/src/main/java/com/example/jpashop/domain/item/Movie.java b/jpashop/src/main/java/com/example/jpashop/domain/item/Movie.java new file mode 100644 index 00000000..a5d5e5a0 --- /dev/null +++ b/jpashop/src/main/java/com/example/jpashop/domain/item/Movie.java @@ -0,0 +1,16 @@ +package com.example.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/jpashop/src/test/java/com/example/jpashop/MemberRepositoryTest.java b/jpashop/src/test/java/com/example/jpashop/MemberRepositoryTest.java deleted file mode 100644 index bee29c2c..00000000 --- a/jpashop/src/test/java/com/example/jpashop/MemberRepositoryTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.example.jpashop; - -import org.assertj.core.api.Assertions; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.Rollback; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.transaction.annotation.Transactional; - -import static org.junit.Assert.*; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class MemberRepositoryTest { - - @Autowired MemberRepository memberRepository; - - @Test - @Transactional - @Rollback(value = false) - public void testMember() throws Exception { - //given - Member member = new Member(); - member.setUsername("memberA"); - - //when - Long saveId = memberRepository.save(member); - Member findMember = memberRepository.find(saveId); - - //then - Assertions.assertThat(findMember.getId()).isEqualTo(member.getId()); - Assertions.assertThat(findMember.getUsername()).isEqualTo(member.getUsername()); - Assertions.assertThat(findMember).isEqualTo(member); - } - -} \ No newline at end of file