spring core : order domain(java)
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package com.example.basic;
|
||||
|
||||
import com.example.basic.member.Grade;
|
||||
import com.example.basic.member.Member;
|
||||
import com.example.basic.member.MemberService;
|
||||
import com.example.basic.member.MemberServiceImpl;
|
||||
import com.example.basic.order.Order;
|
||||
import com.example.basic.order.OrderService;
|
||||
import com.example.basic.order.OrderServiceImpl;
|
||||
|
||||
public class OrderApp {
|
||||
|
||||
public static void main(String[] args) {
|
||||
MemberService memberService = new MemberServiceImpl();
|
||||
OrderService orderService = new OrderServiceImpl();
|
||||
|
||||
Long memberId = 1L;
|
||||
Member member = new Member(memberId, "memberA", Grade.VIP);
|
||||
memberService.join(member);
|
||||
|
||||
Order order = orderService.createOrder(memberId, "itemA", 10000);
|
||||
|
||||
System.out.println("order = " + order);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.example.basic.discount;
|
||||
|
||||
import com.example.basic.member.Member;
|
||||
|
||||
public interface DiscountPolicy {
|
||||
|
||||
/**
|
||||
* @return 할인 대상 금액
|
||||
*/
|
||||
int discount(Member member, int price);
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.example.basic.discount;
|
||||
|
||||
import com.example.basic.member.Grade;
|
||||
import com.example.basic.member.Member;
|
||||
|
||||
public class FixDiscountPolicy implements DiscountPolicy {
|
||||
|
||||
private final int discountFixAmount = 1000;
|
||||
|
||||
@Override
|
||||
public int discount(Member member, int price) {
|
||||
if (member.getGrade() == Grade.VIP) {
|
||||
return discountFixAmount;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package com.example.basic.order;
|
||||
|
||||
public class Order {
|
||||
|
||||
private Long memberId;
|
||||
private String itemName;
|
||||
private int itemPrice;
|
||||
private int discountPrice;
|
||||
|
||||
public Order(Long memberId, String itemName, int itemPrice, int discountPrice) {
|
||||
this.memberId = memberId;
|
||||
this.itemName = itemName;
|
||||
this.itemPrice = itemPrice;
|
||||
this.discountPrice = discountPrice;
|
||||
}
|
||||
|
||||
public int calculatePrice() {
|
||||
return itemPrice - discountPrice;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Order{" +
|
||||
"memberId=" + memberId +
|
||||
", itemName='" + itemName + '\'' +
|
||||
", itemPrice=" + itemPrice +
|
||||
", discountPrice=" + discountPrice +
|
||||
'}';
|
||||
}
|
||||
|
||||
public Long getMemberId() {
|
||||
return memberId;
|
||||
}
|
||||
|
||||
public void setMemberId(Long memberId) {
|
||||
this.memberId = memberId;
|
||||
}
|
||||
|
||||
public String getItemName() {
|
||||
return itemName;
|
||||
}
|
||||
|
||||
public void setItemName(String itemName) {
|
||||
this.itemName = itemName;
|
||||
}
|
||||
|
||||
public int getItemPrice() {
|
||||
return itemPrice;
|
||||
}
|
||||
|
||||
public void setItemPrice(int itemPrice) {
|
||||
this.itemPrice = itemPrice;
|
||||
}
|
||||
|
||||
public int getDiscountPrice() {
|
||||
return discountPrice;
|
||||
}
|
||||
|
||||
public void setDiscountPrice(int discountPrice) {
|
||||
this.discountPrice = discountPrice;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.example.basic.order;
|
||||
|
||||
public interface OrderService {
|
||||
|
||||
Order createOrder(Long memberId, String itemName, int itemPrice);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.example.basic.order;
|
||||
|
||||
import com.example.basic.discount.DiscountPolicy;
|
||||
import com.example.basic.discount.FixDiscountPolicy;
|
||||
import com.example.basic.member.Member;
|
||||
import com.example.basic.member.MemberRepository;
|
||||
import com.example.basic.member.MemoryMemberRepository;
|
||||
|
||||
public class OrderServiceImpl implements OrderService {
|
||||
|
||||
private final MemberRepository memberRepository = new MemoryMemberRepository();
|
||||
private final DiscountPolicy discountPolicy = new FixDiscountPolicy();
|
||||
|
||||
@Override
|
||||
public Order createOrder(Long memberId, String itemName, int itemPrice) {
|
||||
Member member = memberRepository.findById(memberId);
|
||||
int discountPrice = discountPolicy.discount(member, itemPrice);
|
||||
return new Order(memberId, itemName, itemPrice, discountPrice);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.example.basic.order;
|
||||
|
||||
import com.example.basic.member.Grade;
|
||||
import com.example.basic.member.Member;
|
||||
import com.example.basic.member.MemberService;
|
||||
import com.example.basic.member.MemberServiceImpl;
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class OrderServiceTest {
|
||||
|
||||
MemberService memberService = new MemberServiceImpl();
|
||||
OrderService orderService = new OrderServiceImpl();
|
||||
|
||||
@Test
|
||||
void createOrder() {
|
||||
Long memberId = 1L;
|
||||
Member member = new Member(memberId, "memberA", Grade.VIP);
|
||||
memberService.join(member);
|
||||
|
||||
Order order = orderService.createOrder(memberId, "itemA", 10000);
|
||||
|
||||
Assertions.assertThat(order.getDiscountPrice()).isEqualTo(1000);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user