From f50b119308834e083efeb18c5d98c42ee7f0bf30 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 10:45:36 +0900 Subject: [PATCH 01/23] =?UTF-8?q?feat:=20Member=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/member/Member.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java new file mode 100644 index 000000000..9ef953f0a --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java @@ -0,0 +1,46 @@ +package org.prgms.springbootjpa.mission3.domain.member; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.prgms.springbootjpa.mission3.domain.BaseEntity; +import org.prgms.springbootjpa.mission3.domain.order.Order; + +import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Member extends BaseEntity { + + @Id + @GeneratedValue + private Long id; + + @Column(length = 12, nullable = false) + private String name; + + @Column(length = 12, nullable = false, unique = true) + private String nickname; + + private int age; + + @Column(length = 50, nullable = false) + private String address; + + @OneToMany(mappedBy = "member") + private List orders = new ArrayList<>(); + + public Member(String name, String nickname, int age, String address) { + this.name = name; + this.nickname = nickname; + this.age = age; + this.address = address; + } + + public void addOrder(Order order) { + this.orders.add(order); + } +} From e08b71fe964692d5714c1aae5f2943f6f7edaf99 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 10:45:47 +0900 Subject: [PATCH 02/23] =?UTF-8?q?feat:=20Order=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/order/Order.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java new file mode 100644 index 000000000..9be9a4822 --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java @@ -0,0 +1,34 @@ +package org.prgms.springbootjpa.mission3.domain.order; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.prgms.springbootjpa.mission3.domain.BaseEntity; +import org.prgms.springbootjpa.mission3.domain.member.Member; + +import javax.persistence.*; + +@Entity +@Getter +@Table(name = "orders") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Order extends BaseEntity { + + @Id + @GeneratedValue + private Long id; + + private OrderStatus orderStatus; + + private String memo; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; + + public Order(OrderStatus orderStatus, String memo, Member member) { + this.orderStatus = orderStatus; + this.memo = memo; + this.member = member; + } +} From f0c2ca24b5d7155bc15a05f136ade98188e99524 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 10:47:08 +0900 Subject: [PATCH 03/23] =?UTF-8?q?feat:=20createdAt,=20updatedAt=EC=9D=84?= =?UTF-8?q?=20=EB=8B=A4=EB=A3=A8=EB=8A=94=20BaseEntity=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springbootjpa/mission3/domain/BaseEntity.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/BaseEntity.java diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/BaseEntity.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/BaseEntity.java new file mode 100644 index 000000000..0b609f37d --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/BaseEntity.java @@ -0,0 +1,12 @@ +package org.prgms.springbootjpa.mission3.domain; + +import javax.persistence.MappedSuperclass; +import java.time.LocalDateTime; + +@MappedSuperclass +public class BaseEntity { + + private LocalDateTime createdAt = LocalDateTime.now(); + + private LocalDateTime updatedAt = LocalDateTime.now(); +} From 0461eeca24e2395e325db0d3acc654cb21873f82 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 10:47:54 +0900 Subject: [PATCH 04/23] =?UTF-8?q?feat:=20JpaRepository=EB=A5=BC=20?= =?UTF-8?q?=EC=83=81=EC=86=8D=ED=95=98=EB=8A=94=20Member,=20Order=20Reposi?= =?UTF-8?q?tory=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/member/MemberRepository.java | 8 ++++++++ .../mission3/domain/order/OrderRepository.java | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderRepository.java diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java new file mode 100644 index 000000000..0036f526b --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java @@ -0,0 +1,8 @@ +package org.prgms.springbootjpa.mission3.domain.member; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface MemberRepository extends JpaRepository { +} diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderRepository.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderRepository.java new file mode 100644 index 000000000..e8a6f503e --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderRepository.java @@ -0,0 +1,8 @@ +package org.prgms.springbootjpa.mission3.domain.order; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface OrderRepository extends JpaRepository { +} From a259ecbda66839779c51117e04061c36343594c2 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 10:57:56 +0900 Subject: [PATCH 05/23] =?UTF-8?q?test:=20=EB=A9=A4=EB=B2=84,=20=EC=A3=BC?= =?UTF-8?q?=EB=AC=B8=20=EC=83=9D=EC=84=B1=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/OrderMemberRepositoryTest.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java new file mode 100644 index 000000000..50ce3ea1a --- /dev/null +++ b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java @@ -0,0 +1,72 @@ +package org.prgms.springbootjpa.mission3.domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.prgms.springbootjpa.mission3.domain.member.Member; +import org.prgms.springbootjpa.mission3.domain.member.MemberRepository; +import org.prgms.springbootjpa.mission3.domain.order.Order; +import org.prgms.springbootjpa.mission3.domain.order.OrderRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.samePropertyValuesAs; +import static org.prgms.springbootjpa.mission3.domain.order.OrderStatus.CREATED; + +@SpringBootTest +class OrderMemberRepositoryTest { + + @Autowired + OrderRepository orderRepository; + + @Autowired + MemberRepository memberRepository; + + Member member = new Member("현지", "딩딩", 25, "서울시 마포구"); + Order order = new Order(CREATED, "집 앞 배송", member); + + @BeforeEach + void setUp() { + orderRepository.deleteAll(); + memberRepository.deleteAll(); + } + + @Test + @Transactional + void 멤버_생성() { + Member saveMember = memberRepository.save(member); + orderRepository.save(order); + + Optional optionalFindMember = memberRepository.findById(saveMember.getId()); + + assertThat(optionalFindMember.isPresent(), is(true)); + + Member findMember = optionalFindMember.get(); + + assertThat(findMember, samePropertyValuesAs(saveMember)); + assertThat(findMember.getOrders().size(), is(0)); + } + + @Test + @Transactional + void 주문_생성() { + memberRepository.save(member); + Order saveOrder = orderRepository.save(order); + + member.addOrder(saveOrder); + + Optional optionalFindOrder = orderRepository.findById(saveOrder.getId()); + + assertThat(optionalFindOrder.isPresent(), is(true)); + + Order findOrder = optionalFindOrder.get(); + + assertThat(findOrder, samePropertyValuesAs(saveOrder)); + assertThat(findOrder.getMember(), samePropertyValuesAs(member)); + assertThat(member.getOrders().size(), is(1)); + } +} From 131130e874c8263699e1f8b2d28417e480dc2493 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 12:26:27 +0900 Subject: [PATCH 06/23] =?UTF-8?q?test:=20@Transactional=EC=A0=9C=EA=B1=B0?= =?UTF-8?q?=20=EB=B0=8F=20Lazy=20Loading=20=EC=98=A4=EB=A5=98=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/OrderMemberRepositoryTest.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java index 50ce3ea1a..3ccf259e7 100644 --- a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java +++ b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java @@ -8,13 +8,11 @@ import org.prgms.springbootjpa.mission3.domain.order.OrderRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.transaction.annotation.Transactional; import java.util.Optional; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.samePropertyValuesAs; import static org.prgms.springbootjpa.mission3.domain.order.OrderStatus.CREATED; @SpringBootTest @@ -25,7 +23,7 @@ class OrderMemberRepositoryTest { @Autowired MemberRepository memberRepository; - + Member member = new Member("현지", "딩딩", 25, "서울시 마포구"); Order order = new Order(CREATED, "집 앞 배송", member); @@ -36,7 +34,6 @@ void setUp() { } @Test - @Transactional void 멤버_생성() { Member saveMember = memberRepository.save(member); orderRepository.save(order); @@ -47,12 +44,10 @@ void setUp() { Member findMember = optionalFindMember.get(); - assertThat(findMember, samePropertyValuesAs(saveMember)); - assertThat(findMember.getOrders().size(), is(0)); + assertThat(findMember.getId(), is(saveMember.getId())); } @Test - @Transactional void 주문_생성() { memberRepository.save(member); Order saveOrder = orderRepository.save(order); @@ -65,8 +60,7 @@ void setUp() { Order findOrder = optionalFindOrder.get(); - assertThat(findOrder, samePropertyValuesAs(saveOrder)); - assertThat(findOrder.getMember(), samePropertyValuesAs(member)); + assertThat(findOrder.getId(), is(saveOrder.getId())); assertThat(member.getOrders().size(), is(1)); } } From bec71c75b3d71e152f57d02f1f4ede1e0d595fba Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:11:28 +0900 Subject: [PATCH 07/23] =?UTF-8?q?feat:=20OrderItem=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/order/OrderItem.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java new file mode 100644 index 000000000..7e5dcf1be --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java @@ -0,0 +1,32 @@ +package org.prgms.springbootjpa.mission3.domain.order; + +import com.sun.istack.NotNull; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.*; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class OrderItem { + + @Id + @GeneratedValue + private Long id; + + private int price; + + private int quantity; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "order_id") + private Order order; + + public OrderItem(int price, int quantity, Order order) { + this.price = price; + this.quantity = quantity; + this.order = order; + } +} From 8355fc1578c1716ce514eed0a1805d697248a8d7 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:12:37 +0900 Subject: [PATCH 08/23] =?UTF-8?q?feat:=20OrderItem=EA=B3=BC=EC=9D=98=20?= =?UTF-8?q?=EC=97=B0=EA=B4=80=EA=B4=80=EA=B3=84=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../prgms/springbootjpa/mission3/domain/order/Order.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java index 9be9a4822..a991eff61 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java @@ -7,6 +7,8 @@ import org.prgms.springbootjpa.mission3.domain.member.Member; import javax.persistence.*; +import java.util.ArrayList; +import java.util.List; @Entity @Getter @@ -26,9 +28,16 @@ public class Order extends BaseEntity { @JoinColumn(name = "member_id") private Member member; + @OneToMany(mappedBy = "order") + private List orderItems = new ArrayList<>(); + public Order(OrderStatus orderStatus, String memo, Member member) { this.orderStatus = orderStatus; this.memo = memo; this.member = member; } + + public void addOrderItem(OrderItem orderItem) { + this.orderItems.add(orderItem); + } } From 78016cb61d81e4a84b2a83aa26eea63d22d26d59 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:13:23 +0900 Subject: [PATCH 09/23] =?UTF-8?q?feat:=20JpaRepository=EB=A5=BC=20?= =?UTF-8?q?=EC=83=81=EC=86=8D=ED=95=98=EB=8A=94=20OrderItemRepository=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/order/OrderItemRepository.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItemRepository.java diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItemRepository.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItemRepository.java new file mode 100644 index 000000000..5434689b2 --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItemRepository.java @@ -0,0 +1,8 @@ +package org.prgms.springbootjpa.mission3.domain.order; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface OrderItemRepository extends JpaRepository { +} From c855d4e94666e3b654d1826bb7d18822034e48ff Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:13:47 +0900 Subject: [PATCH 10/23] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=EB=A5=BC=20=EC=A0=80=EC=9E=A5=ED=95=9C=20OrderStatus?= =?UTF-8?q?=20enum=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springbootjpa/mission3/domain/order/OrderStatus.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderStatus.java diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderStatus.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderStatus.java new file mode 100644 index 000000000..593753d6b --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderStatus.java @@ -0,0 +1,5 @@ +package org.prgms.springbootjpa.mission3.domain.order; + +public enum OrderStatus { + CREATED, PROCESSING, SHIPPED, DELIVERED +} From 9edcad3043007ae49b8ad9f9dba1f787acd0ab07 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:14:10 +0900 Subject: [PATCH 11/23] =?UTF-8?q?test:=20=EC=A3=BC=EB=AC=B8,=20=EC=A3=BC?= =?UTF-8?q?=EB=AC=B8=20=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/OrderItemOrderRepositoryTest.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemOrderRepositoryTest.java diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemOrderRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemOrderRepositoryTest.java new file mode 100644 index 000000000..ff92d092e --- /dev/null +++ b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemOrderRepositoryTest.java @@ -0,0 +1,75 @@ +package org.prgms.springbootjpa.mission3.domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.prgms.springbootjpa.mission3.domain.member.Member; +import org.prgms.springbootjpa.mission3.domain.member.MemberRepository; +import org.prgms.springbootjpa.mission3.domain.order.Order; +import org.prgms.springbootjpa.mission3.domain.order.OrderItem; +import org.prgms.springbootjpa.mission3.domain.order.OrderItemRepository; +import org.prgms.springbootjpa.mission3.domain.order.OrderRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.Optional; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.prgms.springbootjpa.mission3.domain.order.OrderStatus.CREATED; + +@SpringBootTest +class OrderItemOrderRepositoryTest { + + @Autowired + OrderRepository orderRepository; + + @Autowired + OrderItemRepository orderItemRepository; + + @Autowired + MemberRepository memberRepository; + + Member member = new Member("현지", "딩딩", 25, "서울시 마포구"); + Order order = new Order(CREATED, "집 앞 배송", member); + OrderItem orderItem = new OrderItem(10000, 2, order); + + @BeforeEach + void setUp() { + orderItemRepository.deleteAll(); + orderRepository.deleteAll(); + memberRepository.deleteAll(); + + memberRepository.save(member); + } + + @Test + void 주문_생성() { + Order saveOrder = orderRepository.save(order); + + Optional optionalFindOrder = orderRepository.findById(saveOrder.getId()); + + assertThat(optionalFindOrder.isPresent(), is(true)); + + Order findOrder = optionalFindOrder.get(); + + assertThat(findOrder.getId(), is(saveOrder.getId())); + } + + @Test + void 주문아이템_생성() { + Order saveOrder = orderRepository.save(order); + OrderItem saveOrderItem = orderItemRepository.save(orderItem); + + saveOrder.addOrderItem(saveOrderItem); + + Optional optionalFindOrderItem = orderItemRepository.findById(saveOrderItem.getId()); + + assertThat(optionalFindOrderItem.isPresent(), is(true)); + + OrderItem findOrderItem = optionalFindOrderItem.get(); + + assertThat(findOrderItem.getId(), is(saveOrderItem.getId())); + assertThat(findOrderItem.getOrder().getId(), is(saveOrder.getId())); + assertThat(saveOrder.getOrderItems().size(), is(1)); + } +} From b015a6e6eeaddc5787e8b482ae2f29f20371a689 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:52:15 +0900 Subject: [PATCH 12/23] =?UTF-8?q?feat:=20Item=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/order/Item.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java new file mode 100644 index 000000000..f95b985e8 --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java @@ -0,0 +1,38 @@ +package org.prgms.springbootjpa.mission3.domain.order; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Item { + + @Id + @GeneratedValue + private Long id; + + private int price; + + private int stockQuantity; + + @OneToMany(mappedBy = "item") + private List orderItems = new ArrayList<>(); + + public Item(int price, int stockQuantity) { + this.price = price; + this.stockQuantity = stockQuantity; + } + + public void addOrderItem(OrderItem orderItem) { + this.orderItems.add(orderItem); + } +} From 2b8d492a213df4278792e42c35b6b9d82baae1d6 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:52:33 +0900 Subject: [PATCH 13/23] =?UTF-8?q?feat:=20Item=EA=B3=BC=EC=9D=98=20?= =?UTF-8?q?=EC=97=B0=EA=B4=80=EA=B4=80=EA=B3=84=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/order/OrderItem.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java index 7e5dcf1be..387b7182a 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java @@ -1,6 +1,5 @@ package org.prgms.springbootjpa.mission3.domain.order; -import com.sun.istack.NotNull; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -24,9 +23,20 @@ public class OrderItem { @JoinColumn(name = "order_id") private Order order; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "item_id") + private Item item; + public OrderItem(int price, int quantity, Order order) { this.price = price; this.quantity = quantity; this.order = order; } + + public OrderItem(int price, int quantity, Order order, Item item) { + this.price = price; + this.quantity = quantity; + this.order = order; + this.item = item; + } } From ababb8b1ec5c7918dd9240fa3f5897a7560e0ce9 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:52:49 +0900 Subject: [PATCH 14/23] =?UTF-8?q?feat:=20feat:=20JpaRepository=EB=A5=BC=20?= =?UTF-8?q?=EC=83=81=EC=86=8D=ED=95=98=EB=8A=94=20ItemRepository=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/order/ItemRepository.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/org/prgms/springbootjpa/mission3/domain/order/ItemRepository.java diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/ItemRepository.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/ItemRepository.java new file mode 100644 index 000000000..f789af50d --- /dev/null +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/ItemRepository.java @@ -0,0 +1,8 @@ +package org.prgms.springbootjpa.mission3.domain.order; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ItemRepository extends JpaRepository { +} From 5531a03670b3994fa62f7f4407be3111b9dd5fa0 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:53:09 +0900 Subject: [PATCH 15/23] =?UTF-8?q?test:=20=EC=95=84=EC=9D=B4=ED=85=9C,=20?= =?UTF-8?q?=EC=A3=BC=EB=AC=B8=20=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/OrderItemItemRepositoryTest.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemItemRepositoryTest.java diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemItemRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemItemRepositoryTest.java new file mode 100644 index 000000000..c66f4b2c8 --- /dev/null +++ b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemItemRepositoryTest.java @@ -0,0 +1,78 @@ +package org.prgms.springbootjpa.mission3.domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.prgms.springbootjpa.mission3.domain.member.Member; +import org.prgms.springbootjpa.mission3.domain.member.MemberRepository; +import org.prgms.springbootjpa.mission3.domain.order.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.Optional; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.prgms.springbootjpa.mission3.domain.order.OrderStatus.CREATED; + +@SpringBootTest +class OrderItemItemRepositoryTest { + + @Autowired + OrderRepository orderRepository; + + @Autowired + OrderItemRepository orderItemRepository; + + @Autowired + MemberRepository memberRepository; + + @Autowired + ItemRepository itemRepository; + + Member member = new Member("현지", "딩딩", 25, "서울시 마포구"); + Order order = new Order(CREATED, "집 앞 배송", member); + Item item = new Item(1000, 100); + OrderItem orderItem = new OrderItem(10000, 2, order, item); + + @BeforeEach + void setUp() { + itemRepository.deleteAll(); + orderItemRepository.deleteAll(); + orderRepository.deleteAll(); + memberRepository.deleteAll(); + + memberRepository.save(member); + orderRepository.save(order); + } + + @Test + void 아이템_생성() { + Item saveItem = itemRepository.save(item); + + Optional optionalFindItem = itemRepository.findById(saveItem.getId()); + + assertThat(optionalFindItem.isPresent(), is(true)); + + Item findItem = optionalFindItem.get(); + + assertThat(findItem.getId(), is(saveItem.getId())); + } + + @Test + void 주문아이템_생성() { + Item saveItem = itemRepository.save(item); + OrderItem saveOrderItem = orderItemRepository.save(orderItem); + + saveItem.addOrderItem(saveOrderItem); + + Optional optionalFindOrderItem = orderItemRepository.findById(saveOrderItem.getId()); + + assertThat(optionalFindOrderItem.isPresent(), is(true)); + + OrderItem findOrderItem = optionalFindOrderItem.get(); + + assertThat(findOrderItem.getId(), is(saveOrderItem.getId())); + assertThat(findOrderItem.getItem().getId(), is(saveItem.getId())); + assertThat(saveItem.getOrderItems().size(), is(1)); + } +} From 1d2bbd84337b76381a8882cc1ef3bb952fe250d4 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Fri, 28 Jul 2023 13:53:36 +0900 Subject: [PATCH 16/23] =?UTF-8?q?test:=20=ED=8C=8C=EB=9D=BC=EB=AF=B8?= =?UTF-8?q?=ED=84=B0=20=EC=9E=98=EB=AA=BB=20=EB=8C=80=EC=9E=85=ED=95=9C=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/OrderMemberRepositoryTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java index 3ccf259e7..6f474c3dc 100644 --- a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java +++ b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java @@ -49,7 +49,7 @@ void setUp() { @Test void 주문_생성() { - memberRepository.save(member); + Member saveMember = memberRepository.save(member); Order saveOrder = orderRepository.save(order); member.addOrder(saveOrder); @@ -61,6 +61,7 @@ void setUp() { Order findOrder = optionalFindOrder.get(); assertThat(findOrder.getId(), is(saveOrder.getId())); - assertThat(member.getOrders().size(), is(1)); + assertThat(saveOrder.getMember().getId(), is(saveMember.getId())); + assertThat(saveMember.getOrders().size(), is(1)); } } From 7059ca7016622e69e142355d1daafe0f010dbd99 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Sat, 29 Jul 2023 11:45:42 +0900 Subject: [PATCH 17/23] =?UTF-8?q?test:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/OrderItemItemRepositoryTest.java | 78 ------------------- .../domain/OrderItemOrderRepositoryTest.java | 75 ------------------ .../domain/OrderMemberRepositoryTest.java | 67 ---------------- 3 files changed, 220 deletions(-) delete mode 100644 src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemItemRepositoryTest.java delete mode 100644 src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemOrderRepositoryTest.java delete mode 100644 src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemItemRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemItemRepositoryTest.java deleted file mode 100644 index c66f4b2c8..000000000 --- a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemItemRepositoryTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.prgms.springbootjpa.mission3.domain; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.prgms.springbootjpa.mission3.domain.member.Member; -import org.prgms.springbootjpa.mission3.domain.member.MemberRepository; -import org.prgms.springbootjpa.mission3.domain.order.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.Optional; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.prgms.springbootjpa.mission3.domain.order.OrderStatus.CREATED; - -@SpringBootTest -class OrderItemItemRepositoryTest { - - @Autowired - OrderRepository orderRepository; - - @Autowired - OrderItemRepository orderItemRepository; - - @Autowired - MemberRepository memberRepository; - - @Autowired - ItemRepository itemRepository; - - Member member = new Member("현지", "딩딩", 25, "서울시 마포구"); - Order order = new Order(CREATED, "집 앞 배송", member); - Item item = new Item(1000, 100); - OrderItem orderItem = new OrderItem(10000, 2, order, item); - - @BeforeEach - void setUp() { - itemRepository.deleteAll(); - orderItemRepository.deleteAll(); - orderRepository.deleteAll(); - memberRepository.deleteAll(); - - memberRepository.save(member); - orderRepository.save(order); - } - - @Test - void 아이템_생성() { - Item saveItem = itemRepository.save(item); - - Optional optionalFindItem = itemRepository.findById(saveItem.getId()); - - assertThat(optionalFindItem.isPresent(), is(true)); - - Item findItem = optionalFindItem.get(); - - assertThat(findItem.getId(), is(saveItem.getId())); - } - - @Test - void 주문아이템_생성() { - Item saveItem = itemRepository.save(item); - OrderItem saveOrderItem = orderItemRepository.save(orderItem); - - saveItem.addOrderItem(saveOrderItem); - - Optional optionalFindOrderItem = orderItemRepository.findById(saveOrderItem.getId()); - - assertThat(optionalFindOrderItem.isPresent(), is(true)); - - OrderItem findOrderItem = optionalFindOrderItem.get(); - - assertThat(findOrderItem.getId(), is(saveOrderItem.getId())); - assertThat(findOrderItem.getItem().getId(), is(saveItem.getId())); - assertThat(saveItem.getOrderItems().size(), is(1)); - } -} diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemOrderRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemOrderRepositoryTest.java deleted file mode 100644 index ff92d092e..000000000 --- a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderItemOrderRepositoryTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.prgms.springbootjpa.mission3.domain; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.prgms.springbootjpa.mission3.domain.member.Member; -import org.prgms.springbootjpa.mission3.domain.member.MemberRepository; -import org.prgms.springbootjpa.mission3.domain.order.Order; -import org.prgms.springbootjpa.mission3.domain.order.OrderItem; -import org.prgms.springbootjpa.mission3.domain.order.OrderItemRepository; -import org.prgms.springbootjpa.mission3.domain.order.OrderRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.Optional; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.prgms.springbootjpa.mission3.domain.order.OrderStatus.CREATED; - -@SpringBootTest -class OrderItemOrderRepositoryTest { - - @Autowired - OrderRepository orderRepository; - - @Autowired - OrderItemRepository orderItemRepository; - - @Autowired - MemberRepository memberRepository; - - Member member = new Member("현지", "딩딩", 25, "서울시 마포구"); - Order order = new Order(CREATED, "집 앞 배송", member); - OrderItem orderItem = new OrderItem(10000, 2, order); - - @BeforeEach - void setUp() { - orderItemRepository.deleteAll(); - orderRepository.deleteAll(); - memberRepository.deleteAll(); - - memberRepository.save(member); - } - - @Test - void 주문_생성() { - Order saveOrder = orderRepository.save(order); - - Optional optionalFindOrder = orderRepository.findById(saveOrder.getId()); - - assertThat(optionalFindOrder.isPresent(), is(true)); - - Order findOrder = optionalFindOrder.get(); - - assertThat(findOrder.getId(), is(saveOrder.getId())); - } - - @Test - void 주문아이템_생성() { - Order saveOrder = orderRepository.save(order); - OrderItem saveOrderItem = orderItemRepository.save(orderItem); - - saveOrder.addOrderItem(saveOrderItem); - - Optional optionalFindOrderItem = orderItemRepository.findById(saveOrderItem.getId()); - - assertThat(optionalFindOrderItem.isPresent(), is(true)); - - OrderItem findOrderItem = optionalFindOrderItem.get(); - - assertThat(findOrderItem.getId(), is(saveOrderItem.getId())); - assertThat(findOrderItem.getOrder().getId(), is(saveOrder.getId())); - assertThat(saveOrder.getOrderItems().size(), is(1)); - } -} diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java deleted file mode 100644 index 6f474c3dc..000000000 --- a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderMemberRepositoryTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.prgms.springbootjpa.mission3.domain; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.prgms.springbootjpa.mission3.domain.member.Member; -import org.prgms.springbootjpa.mission3.domain.member.MemberRepository; -import org.prgms.springbootjpa.mission3.domain.order.Order; -import org.prgms.springbootjpa.mission3.domain.order.OrderRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; - -import java.util.Optional; - -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.prgms.springbootjpa.mission3.domain.order.OrderStatus.CREATED; - -@SpringBootTest -class OrderMemberRepositoryTest { - - @Autowired - OrderRepository orderRepository; - - @Autowired - MemberRepository memberRepository; - - Member member = new Member("현지", "딩딩", 25, "서울시 마포구"); - Order order = new Order(CREATED, "집 앞 배송", member); - - @BeforeEach - void setUp() { - orderRepository.deleteAll(); - memberRepository.deleteAll(); - } - - @Test - void 멤버_생성() { - Member saveMember = memberRepository.save(member); - orderRepository.save(order); - - Optional optionalFindMember = memberRepository.findById(saveMember.getId()); - - assertThat(optionalFindMember.isPresent(), is(true)); - - Member findMember = optionalFindMember.get(); - - assertThat(findMember.getId(), is(saveMember.getId())); - } - - @Test - void 주문_생성() { - Member saveMember = memberRepository.save(member); - Order saveOrder = orderRepository.save(order); - - member.addOrder(saveOrder); - - Optional optionalFindOrder = orderRepository.findById(saveOrder.getId()); - - assertThat(optionalFindOrder.isPresent(), is(true)); - - Order findOrder = optionalFindOrder.get(); - - assertThat(findOrder.getId(), is(saveOrder.getId())); - assertThat(saveOrder.getMember().getId(), is(saveMember.getId())); - assertThat(saveMember.getOrders().size(), is(1)); - } -} From 93945c81ee991c8aca06ad18cc9801ad9f6882bb Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Sat, 29 Jul 2023 11:48:17 +0900 Subject: [PATCH 18/23] =?UTF-8?q?refactor:=20Entity=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20id=EC=9D=98=20strategy=EB=A5=BC=20IDENTITY=EB=A1=9C?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/prgms/springbootjpa/mission3/domain/member/Member.java | 2 +- .../org/prgms/springbootjpa/mission3/domain/order/Item.java | 2 +- .../org/prgms/springbootjpa/mission3/domain/order/Order.java | 2 +- .../prgms/springbootjpa/mission3/domain/order/OrderItem.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java index 9ef953f0a..d8ba831df 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java @@ -16,7 +16,7 @@ public class Member extends BaseEntity { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(length = 12, nullable = false) diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java index f95b985e8..ee09ed889 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java @@ -17,7 +17,7 @@ public class Item { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private int price; diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java index a991eff61..45a82f7d6 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java @@ -17,7 +17,7 @@ public class Order extends BaseEntity { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private OrderStatus orderStatus; diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java index 387b7182a..0bc5abde2 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java @@ -12,7 +12,7 @@ public class OrderItem { @Id - @GeneratedValue + @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private int price; From 54cb8bdc56fea5b88eaab2393b5903ee06e3eda5 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Sat, 29 Jul 2023 11:49:54 +0900 Subject: [PATCH 19/23] =?UTF-8?q?refactor:=20@Repository=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springbootjpa/mission3/domain/member/MemberRepository.java | 1 - .../springbootjpa/mission3/domain/order/ItemRepository.java | 2 -- .../mission3/domain/order/OrderItemRepository.java | 2 -- .../springbootjpa/mission3/domain/order/OrderRepository.java | 2 -- 4 files changed, 7 deletions(-) diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java index 0036f526b..4fe57e169 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java @@ -3,6 +3,5 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -@Repository public interface MemberRepository extends JpaRepository { } diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/ItemRepository.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/ItemRepository.java index f789af50d..fb8e09c1f 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/ItemRepository.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/ItemRepository.java @@ -1,8 +1,6 @@ package org.prgms.springbootjpa.mission3.domain.order; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -@Repository public interface ItemRepository extends JpaRepository { } diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItemRepository.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItemRepository.java index 5434689b2..da02bc569 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItemRepository.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItemRepository.java @@ -1,8 +1,6 @@ package org.prgms.springbootjpa.mission3.domain.order; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -@Repository public interface OrderItemRepository extends JpaRepository { } diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderRepository.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderRepository.java index e8a6f503e..f205e6ff9 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderRepository.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderRepository.java @@ -1,8 +1,6 @@ package org.prgms.springbootjpa.mission3.domain.order; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -@Repository public interface OrderRepository extends JpaRepository { } From 6556d769139d8dbadaf77e72edaff548da318dd3 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Sat, 29 Jul 2023 11:52:12 +0900 Subject: [PATCH 20/23] =?UTF-8?q?feat:=20@OneToMany=EC=9D=98=20orphanRemov?= =?UTF-8?q?al=EC=9D=84=20true=EB=A1=9C=20=EC=A7=80=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/prgms/springbootjpa/mission3/domain/member/Member.java | 2 +- .../org/prgms/springbootjpa/mission3/domain/order/Item.java | 2 +- .../org/prgms/springbootjpa/mission3/domain/order/Order.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java index d8ba831df..0a78b262f 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java @@ -30,7 +30,7 @@ public class Member extends BaseEntity { @Column(length = 50, nullable = false) private String address; - @OneToMany(mappedBy = "member") + @OneToMany(mappedBy = "member", orphanRemoval = true) private List orders = new ArrayList<>(); public Member(String name, String nickname, int age, String address) { diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java index ee09ed889..aa2923bb0 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java @@ -24,7 +24,7 @@ public class Item { private int stockQuantity; - @OneToMany(mappedBy = "item") + @OneToMany(mappedBy = "item", orphanRemoval = true) private List orderItems = new ArrayList<>(); public Item(int price, int stockQuantity) { diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java index 45a82f7d6..10cf6c285 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java @@ -28,7 +28,7 @@ public class Order extends BaseEntity { @JoinColumn(name = "member_id") private Member member; - @OneToMany(mappedBy = "order") + @OneToMany(mappedBy = "order", cascade = CascadeType.PERSIST, orphanRemoval = true) private List orderItems = new ArrayList<>(); public Order(OrderStatus orderStatus, String memo, Member member) { From 4f4ba1b5d63f635cc4ba22a3b02293c7bbdbad3d Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Sat, 29 Jul 2023 11:54:46 +0900 Subject: [PATCH 21/23] =?UTF-8?q?refactor:=20add=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EC=97=90=EC=84=9C=20=EC=96=91=EB=B0=A9=ED=96=A5=20?= =?UTF-8?q?=EA=B4=80=EA=B3=84=20=EC=84=A4=EC=A0=95=20=EB=B0=8F=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9E=90=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springbootjpa/mission3/domain/member/Member.java | 3 ++- .../springbootjpa/mission3/domain/order/Item.java | 8 +++----- .../springbootjpa/mission3/domain/order/Order.java | 10 +++++++--- .../springbootjpa/mission3/domain/order/OrderItem.java | 10 +++++----- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java index 0a78b262f..f7b9082b1 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java @@ -41,6 +41,7 @@ public Member(String name, String nickname, int age, String address) { } public void addOrder(Order order) { - this.orders.add(order); + order.setMember(this); + orders.add(order); } } diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java index aa2923bb0..4f4520496 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Item.java @@ -4,10 +4,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.OneToMany; +import javax.persistence.*; import java.util.ArrayList; import java.util.List; @@ -33,6 +30,7 @@ public Item(int price, int stockQuantity) { } public void addOrderItem(OrderItem orderItem) { - this.orderItems.add(orderItem); + orderItem.setItem(this); + orderItems.add(orderItem); } } diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java index 10cf6c285..35ae3557d 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java @@ -31,13 +31,17 @@ public class Order extends BaseEntity { @OneToMany(mappedBy = "order", cascade = CascadeType.PERSIST, orphanRemoval = true) private List orderItems = new ArrayList<>(); - public Order(OrderStatus orderStatus, String memo, Member member) { + public Order(OrderStatus orderStatus, String memo) { this.orderStatus = orderStatus; this.memo = memo; - this.member = member; } public void addOrderItem(OrderItem orderItem) { - this.orderItems.add(orderItem); + orderItem.setOrder(this); + orderItems.add(orderItem); + } + + public void setMember(Member member) { + this.member = member; } } diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java index 0bc5abde2..08f06bdcf 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/OrderItem.java @@ -27,16 +27,16 @@ public class OrderItem { @JoinColumn(name = "item_id") private Item item; - public OrderItem(int price, int quantity, Order order) { + public OrderItem(int price, int quantity) { this.price = price; this.quantity = quantity; - this.order = order; } - public OrderItem(int price, int quantity, Order order, Item item) { - this.price = price; - this.quantity = quantity; + public void setOrder(Order order) { this.order = order; + } + + public void setItem(Item item) { this.item = item; } } From 02e4c36081905a4066fe09e28de017cce89d62f7 Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Sat, 29 Jul 2023 11:55:02 +0900 Subject: [PATCH 22/23] =?UTF-8?q?test:=20Order=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mission3/domain/OrderDomainTest.java | 144 ++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 src/test/java/org/prgms/springbootjpa/mission3/domain/OrderDomainTest.java diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderDomainTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderDomainTest.java new file mode 100644 index 000000000..9612351b2 --- /dev/null +++ b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderDomainTest.java @@ -0,0 +1,144 @@ +package org.prgms.springbootjpa.mission3.domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.prgms.springbootjpa.mission3.domain.member.Member; +import org.prgms.springbootjpa.mission3.domain.member.MemberRepository; +import org.prgms.springbootjpa.mission3.domain.order.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; +import static org.prgms.springbootjpa.mission3.domain.order.OrderStatus.CREATED; + +@SpringBootTest +class OrderDomainTest { + + @Autowired + OrderRepository orderRepository; + + @Autowired + OrderItemRepository orderItemRepository; + + @Autowired + MemberRepository memberRepository; + + @Autowired + ItemRepository itemRepository; + + Member member = new Member("현지", "딩딩", 25, "서울시 마포구"); + Order order = new Order(CREATED, "집 앞 배송"); + Item item = new Item(1000, 100); + OrderItem orderItem = new OrderItem(10000, 2); + + @BeforeEach + void setUp() { + itemRepository.deleteAll(); + orderRepository.deleteAll(); + orderItemRepository.deleteAll(); + memberRepository.deleteAll(); + } + + @Test + void 멤버_생성() { + Member saveMember = memberRepository.save(member); + + List members = memberRepository.findAll(); + + assertThat(members.size(), is(1)); + assertThat(saveMember.getId(), notNullValue()); + } + + @Test + void 아이템_생성() { + Item saveItem = itemRepository.save(item); + + List items = itemRepository.findAll(); + + assertThat(items.size(), is(1)); + assertThat(saveItem.getId(), notNullValue()); + } + + @Test + void 아이템_주문아이템_생성() { + itemRepository.save(item); + + item.addOrderItem(orderItem); + + orderItemRepository.save(orderItem); + + List orderItems = item.getOrderItems(); + + assertThat(item.getId(), notNullValue()); + assertThat(orderItems.size(), is(1)); + assertThat(orderItems.get(0), samePropertyValuesAs(orderItem)); + + assertThat(orderItem.getId(), notNullValue()); + assertThat(orderItem.getItem(), samePropertyValuesAs(item)); + } + + @Test + void 주문_주문아이템_생성() { + order.addOrderItem(orderItem); + orderRepository.save(order); + + List orderItems = order.getOrderItems(); + + assertThat(order.getId(), notNullValue()); + assertThat(orderItems.size(), is(1)); + assertThat(orderItems.get(0), samePropertyValuesAs(orderItem)); + + assertThat(orderItem.getId(), notNullValue()); + assertThat(orderItem.getOrder(), samePropertyValuesAs(order)); + } + + @Test + void 멤버_주문_생성() { + memberRepository.save(member); + + member.addOrder(order); + + orderRepository.save(order); + + List orders = member.getOrders(); + + assertThat(member.getId(), notNullValue()); + assertThat(orders.size(), is(1)); + assertThat(orders.get(0), samePropertyValuesAs(order)); + + assertThat(order.getId(), notNullValue()); + assertThat(order.getMember(), samePropertyValuesAs(member)); + } + + @Test + void 주문_도메인_테스트() { + memberRepository.save(member); + itemRepository.save(item); + + item.addOrderItem(orderItem); + order.addOrderItem(orderItem); + member.addOrder(order); + + orderRepository.save(order); + + assertThat(member.getId(), notNullValue()); + assertThat(member.getOrders().size(), is(1)); + assertThat(member.getOrders().get(0), samePropertyValuesAs(order)); + + assertThat(order.getId(), notNullValue()); + assertThat(order.getMember(), samePropertyValuesAs(member)); + assertThat(order.getOrderItems().size(), is(1)); + assertThat(order.getOrderItems().get(0), samePropertyValuesAs(orderItem)); + + assertThat(item.getId(), notNullValue()); + assertThat(item.getOrderItems().size(), is(1)); + assertThat(item.getOrderItems().get(0), samePropertyValuesAs(orderItem)); + + assertThat(orderItem.getId(), notNullValue()); + assertThat(orderItem.getItem(), samePropertyValuesAs(item)); + assertThat(orderItem.getOrder(), samePropertyValuesAs(order)); + } +} From 4d5a4abb148e11cb03491dee59fdc6c558a912bd Mon Sep 17 00:00:00 2001 From: hyeon-z Date: Sat, 29 Jul 2023 11:55:36 +0900 Subject: [PATCH 23/23] =?UTF-8?q?refactor:=20member=EB=A5=BC=20order=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=EC=9C=BC=EB=A1=9C=20=ED=8F=B4?= =?UTF-8?q?=EB=8D=94=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../springbootjpa/mission3/domain/{member => }/Member.java | 2 +- .../mission3/domain/{member => }/MemberRepository.java | 3 +-- .../org/prgms/springbootjpa/mission3/domain/order/Order.java | 2 +- .../prgms/springbootjpa/mission3/domain/OrderDomainTest.java | 2 -- 4 files changed, 3 insertions(+), 6 deletions(-) rename src/main/java/org/prgms/springbootjpa/mission3/domain/{member => }/Member.java (95%) rename src/main/java/org/prgms/springbootjpa/mission3/domain/{member => }/MemberRepository.java (56%) diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/Member.java similarity index 95% rename from src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java rename to src/main/java/org/prgms/springbootjpa/mission3/domain/Member.java index f7b9082b1..790b3d399 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/Member.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/Member.java @@ -1,4 +1,4 @@ -package org.prgms.springbootjpa.mission3.domain.member; +package org.prgms.springbootjpa.mission3.domain; import lombok.AccessLevel; import lombok.Getter; diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/MemberRepository.java similarity index 56% rename from src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java rename to src/main/java/org/prgms/springbootjpa/mission3/domain/MemberRepository.java index 4fe57e169..8dbb6a409 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/member/MemberRepository.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/MemberRepository.java @@ -1,7 +1,6 @@ -package org.prgms.springbootjpa.mission3.domain.member; +package org.prgms.springbootjpa.mission3.domain; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; public interface MemberRepository extends JpaRepository { } diff --git a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java index 35ae3557d..df334d5fd 100644 --- a/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java +++ b/src/main/java/org/prgms/springbootjpa/mission3/domain/order/Order.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.prgms.springbootjpa.mission3.domain.BaseEntity; -import org.prgms.springbootjpa.mission3.domain.member.Member; +import org.prgms.springbootjpa.mission3.domain.Member; import javax.persistence.*; import java.util.ArrayList; diff --git a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderDomainTest.java b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderDomainTest.java index 9612351b2..1b42a32f5 100644 --- a/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderDomainTest.java +++ b/src/test/java/org/prgms/springbootjpa/mission3/domain/OrderDomainTest.java @@ -2,8 +2,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.prgms.springbootjpa.mission3.domain.member.Member; -import org.prgms.springbootjpa.mission3.domain.member.MemberRepository; import org.prgms.springbootjpa.mission3.domain.order.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest;