diff --git a/README.md b/README.md index 791e6de..577d224 100644 --- a/README.md +++ b/README.md @@ -3,52 +3,36 @@ ### 요구사항 —사용자 --[ ] 쇼핑 검색을 통해 최저가 상품 검색을 할 수 있다. - --[ ] 유저는 회원 가입 후 로그인을 해야 구매가 가능하다. - --[ ] 회원가입 시 이메일, 이름, 주소, 휴대폰번호, 비밀번호를 가진다. - --[ ] 사용자는 검색한 상품을 장바구니에 넣어 둘 수 있다. - --[ ] 사용자는 장바구니에 넣어둔 상품 조회가 가능하다. - --[ ] 사용자는 상품을 결제한 내역을 조회 할 수 있다. +- [ ] 쇼핑 검색을 통해 최저가 상품 검색을 할 수 있다. +- [ ] 유저는 회원 가입 후 로그인을 해야 구매가 가능하다. +- [ ] 회원가입 시 이메일, 이름, 주소, 휴대폰번호, 비밀번호를 가진다. +- [ ] 사용자는 검색한 상품을 장바구니에 넣어 둘 수 있다. +- [ ] 사용자는 장바구니에 넣어둔 상품 조회가 가능하다. +- [ ] 사용자는 상품을 결제한 내역을 조회 할 수 있다. — 상품 --[ ] 상품은 상품 ID, 상품명, 사진, 최소가격, 최고가격, 날짜, 상품사진, 최저가 쇼핑몰 주소 으로 이루어져있다. - --[ ] 상품은 사용자의 장바구니에 등록이 될 수 있다. +- [ ] 상품은 상품 ID, 상품명, 사진, 최소가격, 최고가격, 날짜, 상품사진, 최저가 쇼핑몰 주소 으로 이루어져있다. +- [ ] 상품은 사용자의 장바구니에 등록이 될 수 있다. — 장바구니 --[ ] 장바구니는 사용자가 결제를 위해 담아둔 목록을 가지고 있다. - +- [ ] 장바구니는 사용자마다 1개의 장바구니를 가진다. +- [ ] 장바구니는 사용자가 결제를 위해 담아둔 목록을 가지고 있다. - 상품 목록에는 담아 둔상품들의 상품아이디, 상품 이름, 최저가격, 쇼핑몰, 배송비를 가지고있다. - --[ ] 장바구니에서 상품을 취소 할 수 있다. - --[ ] 장바구니에 담아 둔 상품의 전체 합을 보여주며, 상품을 함께 주문 할 수 있다. - --[ ] 장바구니는 중복된 상품을 가지고 있지 않다. - +- [ ] 장바구니에서 상품을 취소 할 수 있다. +- [ ] 장바구니에 담아 둔 상품의 전체 합을 보여주며, 상품을 함께 주문 할 수 있다. +- [ ] 장바구니는 중복된 상품을 가지고 있지 않다. - 중복이 될 경우 갯수가 추가된다. - --[ ] 장바구니 목록에서 두 개 이상의 상품의 쇼핑몰이 같다면, 배송비는 무료로 배송된다. - --[ ] 장바구니의 상품들의 쇼핑몰 이름 중복이 없다면, 상품 개별 2500원이 추가 결제 된다. +- [ ] 장바구니 목록에서 두 개 이상의 상품의 쇼핑몰이 같다면, 배송비는 무료로 배송된다. +- [ ] 장바구니의 상품들의 쇼핑몰 이름 중복이 없다면, 상품 개별 2500원이 추가 결제 된다. - 주문 --[ ] 장바구니에서 선택한 상품의 리스트, 총액을 가진다. --[ ] 배송받는 주소,연락처 변경이 가능하다. --[ ] 배송받는 주소는 기본적으로 유저의 주소를 사용한다. - -— 추천 --[ ] 특정 상품 키워드 검색시, 타 사용자가 이미 구매한 키워드의 제품이라면, 타 사용자가 구매한 제품들을 추천목록으로 나타낸다. - --[ ] 타 사용자가 구매한 제품들의 목록이 많다면, 구매 수가 많은 상품 순으로 추천한다. +- [ ] 장바구니에서 선택한 상품의 리스트, 총액을 가진다. +- [ ] 배송받는 주소,연락처 변경이 가능하다. +- [ ] 배송받는 주소는 기본적으로 유저의 주소를 사용한다. +- [ ] 주문의 상품목록을 상품id를 가지고 있다. ### 용어사전 @@ -59,6 +43,8 @@ | 주문 | Order |유저 장바구니 목록에 있는 것을 종합하여 주문한다.| | 상품 | Product |상품은 아이디, 상품이름, 최저가,최고가,쇼핑몰의 정보를 가지고 있으며, 장바구니담길수 있다. | 배송비 | shipping fee |장바구니 목록에서, 같은 쇼핑몰인지 아닌지에 따라서,배송비가 무료 또는 2500원이 붙는다. +| 주문주소 | destination| 주문에서 주소는 도착지의 정보를 나타낸다.| + ###모델링 유저 엔 \ No newline at end of file diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/cart/application/CartService.java b/src/main/java/io/github/wotjd243/shoppinggogo/cart/application/CartService.java index 8c67642..ade555c 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/cart/application/CartService.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/cart/application/CartService.java @@ -9,6 +9,7 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @Service @@ -31,7 +32,6 @@ public class CartService { * @param product Cart에 추가 될 제품 */ public void addProductToCart(Long userId, Product product) { - } /** @@ -46,25 +46,25 @@ public void removeProductFromCart(Long userId, Product product) { } /** - * Cart 에 담긴 제품 목록을 찾는다. + * Cart 에 담긴 제품 ID 목록을 찾는다. * * @param userId 유저 ID - * @return Cart 에 담긴 제품 목록 + * @return Cart 에 담긴 제품 ID 목록 */ - public List findProductsToCart(Long userId) { - return cartRepository.selectProductsToCart(userId); + public List findProductIdsFromCart(Long userId) { + return cartRepository.findCartByUserId(userId).getProductIds(); } /** - * Cart 에 담긴 제품 ID 목록을 찾는다. - * + * Cart 에 담긴 제품 목록을 찾는다. * @param userId 유저 ID - * @return Cart 에 담긴 제품 ID 목록 + * @return Cart 에 담긴 제품 목록 */ - public List findProductIdsToCart(Long userId) { - return cartRepository.selectProductsToCart(userId).stream() - .map(product -> product.getId()) + public List findProductsFromCart(Long userId) { + return cartRepository.findCartByUserId(userId).getProductIds().stream().map(productId -> + productService.findProductById(productId)) + .filter(Optional::isPresent) + .map(Optional::get) .collect(Collectors.toList()); } - } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/cart/domain/Cart.java b/src/main/java/io/github/wotjd243/shoppinggogo/cart/domain/Cart.java index 783cbcb..b0cc50a 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/cart/domain/Cart.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/cart/domain/Cart.java @@ -1,26 +1,23 @@ package io.github.wotjd243.shoppinggogo.cart.domain; import io.github.wotjd243.shoppinggogo.product.domain.Product; -import io.github.wotjd243.shoppinggogo.user.domain.User; -import lombok.Data; -import lombok.Getter; +import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; -@Data public class Cart { - @Getter private Long id; //카트 키 private Long userId; //유저 키 - private List products; //제품 목록 - private List checkedProductIds; //체크되어진 제품 ID 목록 + private List productIds; //제품 목록 - public Cart(Long id, Long userId, List products, List checkedProductIds) { + public Cart(Long id, Long userId, List productIds) { this.id = id; this.userId = userId; - this.products = products; - this.checkedProductIds = checkedProductIds; + this.productIds = new ArrayList<>(productIds); + } + + public boolean removeProductFromCart(Long productId) { + return productIds.remove(productId); } /** @@ -32,30 +29,7 @@ public void filterByDepricatedProduct(Product depricatedProduct) { } - - /** - * 카트에 담긴 제품 목록과 체크되어진 제품 목록을 매칭시킨다. - * @param checkedProductIds 체크되어진 제품 ID 목록 - */ - public List matchByCheckedProductIds(List checkedProductIds) { - return products.stream().filter(product -> - checkedProductIds.contains(product.getId())) - .collect(Collectors.toList()); - } - - /** - * 카트에 담긴 제품 최저 가격의 총 합을 얻는다. - */ - public int getProductLowestPriceSumBySelectedProducts() { - return matchByCheckedProductIds(checkedProductIds) - .stream().mapToInt(p -> p.findLowestPrice().getLowestPrice()).sum(); - } - - public Long getId() { - return id; - } - - public List getProducts() { - return products; + public List getProductIds() { + return productIds; } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/CartRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/CartRepository.java index 505c16a..31ab803 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/CartRepository.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/CartRepository.java @@ -1,18 +1,19 @@ package io.github.wotjd243.shoppinggogo.cart.infra; -import io.github.wotjd243.shoppinggogo.product.domain.Product; + +import io.github.wotjd243.shoppinggogo.cart.domain.Cart; import java.util.List; +import java.util.Optional; public interface CartRepository { /** - * Cart 에 담긴 제품 목록을 조회한다. - * @param userId 유저 ID - * @return Cart 에 담긴 제품 목록 + * 유저 ID에 의해, 카드를 찾는다. + * @param userId 유저 + * @return Cart 정보 */ - public List selectProductsToCart(Long userId); - + public Cart findCartByUserId(Long userId); } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/DummyCartData.java b/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/DummyCartData.java index 5a4c88e..0019c89 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/DummyCartData.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/DummyCartData.java @@ -13,36 +13,37 @@ public class DummyCartData { private static final Map carts = new HashMap<>(); static { + //상품 목록 List product1s = new ArrayList<>(); - List price1s = new ArrayList<>(); - price1s.add(new PriceRecord(1L, 10, 30, 20, - new Date(), new Date())); - price1s.add(new PriceRecord(2L,11, 31, 21, new Date(), new Date())); - price1s.add(new PriceRecord(3L, 12, 32, 22, new Date(), new Date())); + List product2s = new ArrayList<>(); - product1s.add(new Product( 1L, "DDD 프로젝트", new Category("강의", "프로그래밍"), + //상품가격 및 상품 + PriceRecord price1 = new PriceRecord(11,31,21, new Date(), new Date()); + Product product01 = new Product(1L,"DDD 프로젝트", new Category("강의", "프로그래밍"), new ProductImage(1000L, 1L, "/ddd/project/link", "file.jpg", new Date()), - price1s, - new Date(), new Date())); - carts.put(1L, new Cart(1L, 1L, product1s, Arrays.asList(1L))); + price1, + new Date(), new Date()); - List product2s = new ArrayList<>(); - List price2s = new ArrayList<>(); - price2s.add(new PriceRecord(1L, 100, 300, 200, - new Date(), new Date())); - product2s.add(new Product( 2L, "포켓몬스터", new Category("강의", "프로그래밍"), + PriceRecord price2 = new PriceRecord(100, 300, 200, new Date(), new Date()); + Product product02 = new Product(2L, "포켓몬스터", new Category("강의", "프로그래밍"), new ProductImage(2000L, 2L, "/pocket", "monster.jpg", new Date()), - price2s, - new Date(), new Date())); - carts.put(2L, new Cart(2L, 2L, product2s, Arrays.asList(2L))); + price2, + new Date(), new Date()); + + + product1s.add(product01); + product2s.add(product01); + product2s.add(product02); + + put(1L, 1L, Arrays.asList(1L)); + put(2L, 2L, Arrays.asList(1L, 2L)); } public static Cart getByUserId(final long userId) { return carts.get(userId); } - public static Cart put(final Long id, final long userId, final List products, - final List checkedProducts) { - return carts.put(userId, new Cart(id, userId, products, checkedProducts)); + public static Cart put(final Long id, final long userId, final List productIds){ + return carts.put(userId, new Cart(id, userId, productIds)); } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/DummyCartRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/DummyCartRepository.java index 9f8d38e..56f0c4b 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/DummyCartRepository.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/cart/infra/DummyCartRepository.java @@ -1,6 +1,6 @@ package io.github.wotjd243.shoppinggogo.cart.infra; -import io.github.wotjd243.shoppinggogo.product.domain.Product; +import io.github.wotjd243.shoppinggogo.cart.domain.Cart; import org.springframework.stereotype.Repository; import java.util.List; @@ -9,9 +9,7 @@ public class DummyCartRepository implements CartRepository { @Override - public List selectProductsToCart(Long userId) { - - return DummyCartData.getByUserId(userId) - .getProducts(); + public Cart findCartByUserId(Long userId) { + return DummyCartData.getByUserId(userId); } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/cart/ui/CartController.java b/src/main/java/io/github/wotjd243/shoppinggogo/cart/ui/CartController.java new file mode 100644 index 0000000..6abb61b --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/cart/ui/CartController.java @@ -0,0 +1,23 @@ +package io.github.wotjd243.shoppinggogo.cart.ui; + + +import io.github.wotjd243.shoppinggogo.cart.application.CartService; +import io.github.wotjd243.shoppinggogo.product.domain.Product; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +public class CartController { + + @Autowired + private CartService cartService; + + @GetMapping("/cart/product/list") + public List findProducts(@RequestParam Long userId) { + return cartService.findProductsFromCart(userId); + } +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/order/application/OrderService.java b/src/main/java/io/github/wotjd243/shoppinggogo/order/application/OrderService.java index 4a047ed..9cb83cc 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/order/application/OrderService.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/order/application/OrderService.java @@ -1,25 +1,95 @@ package io.github.wotjd243.shoppinggogo.order.application; -import io.github.wotjd243.shoppinggogo.cart.infra.CartRepository; +import io.github.wotjd243.shoppinggogo.cart.application.CartService; +import io.github.wotjd243.shoppinggogo.order.domain.Buyer; import io.github.wotjd243.shoppinggogo.order.domain.Order; +import io.github.wotjd243.shoppinggogo.order.domain.OrderRepository; +import io.github.wotjd243.shoppinggogo.product.application.ProductService; import io.github.wotjd243.shoppinggogo.product.domain.Product; +import io.github.wotjd243.shoppinggogo.user.application.UserService; import io.github.wotjd243.shoppinggogo.user.domain.User; -import io.github.wotjd243.shoppinggogo.user.domain.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; +@Service public class OrderService { - private UserRepository userRepository; - private CartRepository cartRepository; - public Order makeOrder(Long userId, String cartId) { - Optional maybeUser = userRepository.findById(userId); - User user = maybeUser.get(); - List selectProducts = cartRepository.selectProductsToCart(userId); + private OrderRepository orderRepository; - return new Order(userId,user.getAddress(), user.getPhoneNumber(),selectProducts.stream().map(product -> product.getId()).collect(Collectors.toList())); + @Autowired + private UserService userService; + + @Autowired + private CartService cartService; + + @Autowired + private ProductService productService; + + public OrderService( OrderRepository orderRepository){ + this.orderRepository = orderRepository; + } + /** + * + * @param userId + * @return Order + */ + public Order makeOrder(Long userId, ArrayList selectedProducts) { + User user = userService.getUser(userId).orElseThrow(IllegalArgumentException::new); + return new Order( + userId, + new Buyer( + user.getAddress(), + user.getPhoneNumber(), + new ArrayList(selectedProducts) + ) + ); + } + + /** + * @param orderId + * @return 주문 총 합계 + */ + public int sumOrderedProductsPrice(long orderId){ + return (int) getOrderById(orderId).getBuyer().getOrderProducts().stream() + .mapToLong((productId) -> + productService.findProductById(productId).orElseThrow(IllegalArgumentException::new) + .findLowestPrice()) + .sum(); + } + + /** + *orderid로 조회한 상품객체 + * @param orderId + * @return List + */ + public List getOrdedProducts( long orderId) { + return getOrderById(orderId).getBuyer().getOrderProducts().stream() + .map(productId -> + productService.findProductById(productId) + .orElseThrow(IllegalArgumentException::new)) + .collect(Collectors.toList()); + } + + /** + * + * @param orderId + * @return Order 정보 + */ + public Order getOrderById(long orderId){ + return orderRepository.findbyId(orderId) + .orElseThrow(IllegalArgumentException::new); + } + + /** + *TODO 유저아이디로 주문정보들을 가지고 온다. + */ + public ArrayList getOrderByUserId(Long userId){ + return orderRepository.findByUserId(userId); } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/Buyer.java b/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/Buyer.java new file mode 100644 index 0000000..ad31613 --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/Buyer.java @@ -0,0 +1,32 @@ +package io.github.wotjd243.shoppinggogo.order.domain; + +import io.github.wotjd243.shoppinggogo.user.domain.Address; +import io.github.wotjd243.shoppinggogo.user.domain.Phone; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +public class Buyer { + private Address destination; + private Phone phone; + private List orderProducts; + + public Buyer(Address destination, Phone phone , List orderProducts) { + this.destination = destination; + this.phone = phone; + this.orderProducts = new ArrayList(orderProducts); + } + public void setDestination(Address destination){ + this.destination = destination; + } + public void setPhone(Phone phone) { + this.phone = phone; + } + public List getOrderProducts() { + return orderProducts; + } + public void setOrderProducts(ArrayList orderProducts){ + this.orderProducts = new ArrayList(orderProducts); + } +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/CalculateProductsService.java b/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/CalculateProductsService.java deleted file mode 100644 index 81ae267..0000000 --- a/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/CalculateProductsService.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.github.wotjd243.shoppinggogo.order.domain; - -import io.github.wotjd243.shoppinggogo.product.domain.Product; - -import java.util.ArrayList; - -public class CalculateProductsService { - - private Order order; - - public CalculateProductsService(Order order){ - this.order=order; - } - -// public int calcurateProductsPrice(Order order){ -// //같은 상품몰이면 배송비는 무료 -// -// int totalPrice = 0; -// products.forEach((product)->{ -// totalPrice += product.findLowestPrice(); -// }); -// -// return totalPrice; -// } -} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/Order.java b/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/Order.java index 6629f89..8f32f45 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/Order.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/Order.java @@ -1,30 +1,25 @@ package io.github.wotjd243.shoppinggogo.order.domain; -import io.github.wotjd243.shoppinggogo.cart.domain.Cart; -import io.github.wotjd243.shoppinggogo.product.domain.Product; -import io.github.wotjd243.shoppinggogo.user.domain.Address; -import io.github.wotjd243.shoppinggogo.user.domain.Phone; - -import java.util.ArrayList; -import java.util.List; - //유저 장바구니 목록에 있는 것을 종합하여 주문한다. public class Order { //주문 기능에 주소를 변경할 수 있다. - private Long OrderId; - private Address destination; - private Phone phone; + private Long orderId; private Long userId; - private List orderProducts; + private Buyer buyer; - public Order(Long userId, Address address, Phone phone, List products) { + /** + * + * @param userId + * @param buyer + */ + public Order(long userId, Buyer buyer) { this.userId = userId; - this.destination = address; - this.orderProducts = products; + this.buyer = buyer; } - public void changeDestination (String newDestination){ - + public Buyer getBuyer() { + return this.buyer; } + public long getUser(){return this.userId;} } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/OrderRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/OrderRepository.java new file mode 100644 index 0000000..fefc2c5 --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/order/domain/OrderRepository.java @@ -0,0 +1,10 @@ +package io.github.wotjd243.shoppinggogo.order.domain; + +import java.util.ArrayList; +import java.util.Optional; + +public interface OrderRepository { + + public Optional findbyId(long orderid); + public ArrayList findByUserId(long userId); +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/order/infra/DummyOrderData.java b/src/main/java/io/github/wotjd243/shoppinggogo/order/infra/DummyOrderData.java new file mode 100644 index 0000000..67d1998 --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/order/infra/DummyOrderData.java @@ -0,0 +1,52 @@ +package io.github.wotjd243.shoppinggogo.order.infra; + +import io.github.wotjd243.shoppinggogo.order.domain.Buyer; +import io.github.wotjd243.shoppinggogo.order.domain.Order; +import io.github.wotjd243.shoppinggogo.user.domain.Address; +import io.github.wotjd243.shoppinggogo.user.domain.Phone; + +import java.util.*; + +public class DummyOrderData { + private static Map orderData = new HashMap(); + + static { + ArrayList products=new ArrayList(); + products.add(1L); + products.add(2L); + + put(1L,1L, "Seoul","01011112222", products); + put(2L,1L, "Seoul","01011112222", products); + put(3L,1L, "Seoul","01011112222", products); + + } + + + public static Order get(long orderId){ + return orderData.get(orderId); + } + //public Order(Long userId, Address destination, Phone phoneNumber ,ArrayList selectedProducts) { + public static Order put( Long orderId, Long userId, String destination, + String phoneNumber, ArrayList selectedProducts + ){ + return orderData.put( orderId, + new Order(1L, + new Buyer( + new Address(destination), + new Phone(phoneNumber), + new ArrayList(selectedProducts) + ) + ) + ); + } + + /** + * + * @param userId + * @return userId + */ + public static Map getOrderData(long userId){ + return orderData; + } + +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/order/infra/DummyOrderRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/order/infra/DummyOrderRepository.java new file mode 100644 index 0000000..91cf09a --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/order/infra/DummyOrderRepository.java @@ -0,0 +1,38 @@ +package io.github.wotjd243.shoppinggogo.order.infra; + +import io.github.wotjd243.shoppinggogo.order.domain.Order; +import io.github.wotjd243.shoppinggogo.order.domain.OrderRepository; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.Optional; + + +@Repository +public class DummyOrderRepository implements OrderRepository { + /** + * orderId로 Repository 찾기 + * @param orderId + * @return + */ + @Override + public Optional findbyId(long orderId) { + return Optional.ofNullable(DummyOrderData.get(orderId)); + } + + /** + * + * @param userId + * @return + */ + @Override + public ArrayList findByUserId(long userId) { + ArrayList userOrders = new ArrayList(); + DummyOrderData.getOrderData(1L).forEach((key,value)->{ + if(value.getUser()==userId){ + userOrders.add(value); + } + }); + return userOrders; + } +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/order/ui/OrderController.java b/src/main/java/io/github/wotjd243/shoppinggogo/order/ui/OrderController.java new file mode 100644 index 0000000..dea6c79 --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/order/ui/OrderController.java @@ -0,0 +1,64 @@ +package io.github.wotjd243.shoppinggogo.order.ui; + +import io.github.wotjd243.shoppinggogo.order.application.OrderService; +import io.github.wotjd243.shoppinggogo.order.domain.Order; +import io.github.wotjd243.shoppinggogo.product.domain.Product; +import org.springframework.web.bind.annotation.*; + +import javax.websocket.server.PathParam; +import java.util.ArrayList; +import java.util.List; + +@RestController +public class OrderController { + + private OrderService orderService; + + public OrderController(OrderService orderService) { + this.orderService = orderService; + } + + /** + *order 생성 + * @param order userId, selectedProducts + */ + @PostMapping("/order/create") + public void createOrder( + @RequestBody OrderDTO order + ){ + orderService.makeOrder( order.getUserId(), order.getSelectedProducts()); + } + + /** + * 주문한 상품들의 정보를 response + * @param orderId + * @return List + */ + @GetMapping("/order/id/") + public List getOrderProducts( @RequestParam long orderId){ + return orderService.getOrdedProducts(orderId); + } + + /** + * 주문 상품의 총 가격 + * @param orderId + * @return totalPrice + */ + @GetMapping("/order/price/") + public int sumProductsPrice( @RequestParam long orderId){ + + return orderService.sumOrderedProductsPrice(orderId); + } + + /** + * 유저의 주문들의 정보들을 반환 + * @param userId + * @return ArrayList + */ + @GetMapping("/order/user/") + public ArrayList getOrdersByUserId( @RequestParam long userId){ + return orderService.getOrderByUserId(userId); + } + + +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/order/ui/OrderDTO.java b/src/main/java/io/github/wotjd243/shoppinggogo/order/ui/OrderDTO.java new file mode 100644 index 0000000..2310dbe --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/order/ui/OrderDTO.java @@ -0,0 +1,16 @@ +package io.github.wotjd243.shoppinggogo.order.ui; + +import java.util.ArrayList; + +public class OrderDTO { + private long userId; + private ArrayList selectedProducts; + + public long getUserId() { + return userId; + } + + public ArrayList getSelectedProducts() { + return selectedProducts; + } +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/CardPayment.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/CardPayment.java index 3780487..e942fef 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/CardPayment.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/CardPayment.java @@ -2,12 +2,22 @@ import io.github.wotjd243.shoppinggogo.payment.domain.Amount; import io.github.wotjd243.shoppinggogo.seller.application.SellerService; +import io.github.wotjd243.shoppinggogo.seller.domain.Seller; import io.github.wotjd243.shoppinggogo.user.application.UserService; +import io.github.wotjd243.shoppinggogo.user.domain.User; public class CardPayment implements PaymentMethod { + private UserService userService; + private SellerService sellerService; + + public CardPayment(UserService userService, SellerService sellerService) { + this.userService = userService; + this.sellerService = sellerService; + } + @Override - public void pay(UserService userService, SellerService sellerService, Amount amount) { + public void pay(User user, Seller seller, Amount amount) { } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/CashPayment.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/CashPayment.java index 5b43404..c5c2806 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/CashPayment.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/CashPayment.java @@ -7,9 +7,18 @@ import io.github.wotjd243.shoppinggogo.user.domain.User; public class CashPayment implements PaymentMethod { - @Override - public void pay(UserService userService, SellerService sellerService, Amount amount) { + private UserService userService; + private SellerService sellerService; + + public CashPayment(UserService userService, SellerService sellerService) { + this.userService = userService; + this.sellerService = sellerService; } + @Override + public void pay(User user, Seller seller, Amount amount) { + userService.lossUserPoint(user.getId(), amount.getAmount()); + sellerService.addPointToSeller(seller.getId(), amount.getAmount()); + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentMethod.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentMethod.java index f37f9c7..8ad18e5 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentMethod.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentMethod.java @@ -7,5 +7,5 @@ import io.github.wotjd243.shoppinggogo.user.domain.User; public interface PaymentMethod { - public void pay(UserService userService, SellerService sellerService, Amount amount); + public void pay(User user, Seller seller, Amount amount); } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentService.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentService.java index 7d8468a..32a87dd 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentService.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentService.java @@ -1,5 +1,6 @@ package io.github.wotjd243.shoppinggogo.payment.application; +import io.github.wotjd243.shoppinggogo.order.application.OrderService; import io.github.wotjd243.shoppinggogo.order.domain.Order; import io.github.wotjd243.shoppinggogo.payment.domain.Amount; import io.github.wotjd243.shoppinggogo.payment.domain.PaymentRepository; @@ -18,36 +19,32 @@ public class PaymentService { private UserService userService; private SellerService sellerService; -// private OrderService orderService; - + private OrderService orderService; private PaymentRepository paymentRepository; - /* + public PaymentService(UserService userService, SellerService sellerRepository, OrderService orderService, PaymentRepository paymentRepository) { this.userService = userService; this.sellerService = sellerService; - this.sellerService = sellerService; + this.orderService = orderService; this.paymentRepository = paymentRepository; - }*/ + } + + public void processOrder(Long orderId, Long userId, Long sellerId, String paymentType ) { - public void processOrder(String orderId, String userId, String sellerId, String paymentType ) { -/* - User user = this.userService.getUser(userId); + User user = this.userService.getUser(userId).orElseThrow(IllegalArgumentException::new); Seller seller = this.sellerService.getSeller(sellerId).orElseThrow(IllegalArgumentException::new); - Order order = new Order(); - PaymentMethod payment = null; + PaymentMethod paymentMethod = null; + if( paymentType.contains(PaymentType.CARD.getValue())) { - payment = new CardPayment(); + paymentMethod = new CardPayment(userService, sellerService); } else if(paymentType.contains(PaymentType.CASH.getValue())) { - payment = new CashPayment(); + paymentMethod = new CashPayment(userService, sellerService); } -// orderService.getTotalAmount(); - // orderService의 totalAmount을 사용 - payment.pay(userService, sellerService, Amount.valueOf(1111)); + paymentMethod.pay(user, seller, Amount.valueOf(this.orderService.sumOrderedProductsPrice(orderId)) ); + this.paymentRepository.save(new Date(), 1l, orderId, Amount.valueOf(this.orderService.sumOrderedProductsPrice(orderId)), userId ); - this.paymentRepository.save(new Date(), UUID.randomUUID().toString(), orderId, Amount.valueOf(111), userId ); -*/ } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/Amount.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/Amount.java index 951fd6a..2996258 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/Amount.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/Amount.java @@ -7,7 +7,7 @@ public class Amount { public static final int MINIMUM_NUMBER = 1; // 1억이상 결제 x - public static final int MAXIMUM_NUMBER = 100000000; + public static final int MAXIMUM_NUMBER = 100_000_000; private int amount; @@ -39,4 +39,8 @@ public int hashCode() { public static Amount valueOf(final int amount) { return new Amount(amount); } + + public int getAmount() { + return amount; + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/Payment.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/Payment.java index c077703..45912aa 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/Payment.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/Payment.java @@ -7,18 +7,14 @@ public class Payment { - private Date paymentDate; // 결제일자 - private Long id; // 결제번호 { 20190315NP1385814158} - private String orderId; // 상품정보, 상품금액 ,판매자 ( 주문정보 ) - private Amount amountForPayment; // 결제할 돈 - private String userId; //유저 + private final Long id; // 결제번호 { 20190315NP1385814158} + private final Date paymentDate; // 결제일자 + private PaymentDetailInfo paymentDetailInfo; public Payment(Date paymentDate, Long id, String orderId, Amount amountForPayment, String userId) { - this.paymentDate = paymentDate; + this.paymentDate = new Date(paymentDate.getTime()); this.id = id; - this.orderId = orderId; - this.amountForPayment = amountForPayment; - this.userId = userId; + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/PaymentDetailInfo.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/PaymentDetailInfo.java new file mode 100644 index 0000000..0c402e4 --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/PaymentDetailInfo.java @@ -0,0 +1,14 @@ +package io.github.wotjd243.shoppinggogo.payment.domain; + +public class PaymentDetailInfo { + + private String orderId; // 상품정보, 상품금액 ,판매자 ( 주문정보 ) + private Amount amountForPayment; // 결제할 돈 + private String userId; //유저 + + public PaymentDetailInfo(String orderId, Amount amountForPayment, String userId) { + this.orderId = orderId; + this.amountForPayment = amountForPayment; + this.userId = userId; + } +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/PaymentRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/PaymentRepository.java index b28f0dc..efa1f5e 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/PaymentRepository.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/domain/PaymentRepository.java @@ -5,7 +5,10 @@ import io.github.wotjd243.shoppinggogo.user.domain.User; import java.util.Date; +import java.util.Optional; public interface PaymentRepository { - public boolean save(Date paymentDate, String id, String orderId, Amount amountForPayment, String userId); + public boolean save(Date paymentDate, Long id, Long orderId, Amount amountForPayment, Long userId); + public Optional findPaymentById(Long paymentId); + } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/infra/DummyPaymentData.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/infra/DummyPaymentData.java new file mode 100644 index 0000000..95ff66d --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/infra/DummyPaymentData.java @@ -0,0 +1,15 @@ +package io.github.wotjd243.shoppinggogo.payment.infra; + +import io.github.wotjd243.shoppinggogo.payment.domain.Payment; + +import java.util.HashMap; +import java.util.Map; + +public class DummyPaymentData { + + private static final Map data = new HashMap<>(); + + + + +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/infra/PaymentRepositoryImpl.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/infra/PaymentRepositoryImpl.java index f4f04d7..6455ccb 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/payment/infra/PaymentRepositoryImpl.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/infra/PaymentRepositoryImpl.java @@ -2,16 +2,27 @@ import io.github.wotjd243.shoppinggogo.order.domain.Order; import io.github.wotjd243.shoppinggogo.payment.domain.Amount; +import io.github.wotjd243.shoppinggogo.payment.domain.Payment; import io.github.wotjd243.shoppinggogo.payment.domain.PaymentRepository; import io.github.wotjd243.shoppinggogo.seller.domain.Seller; import io.github.wotjd243.shoppinggogo.user.domain.User; +import org.springframework.stereotype.Repository; import java.util.Date; +import java.util.Optional; +@Repository public class PaymentRepositoryImpl implements PaymentRepository { @Override - public boolean save(Date paymentDate, String id, String orderId, Amount amountForPayment, String userId) { + public boolean save(Date paymentDate, Long id, Long orderId, Amount amountForPayment, Long userId) { return false; } + + @Override + public Optional findPaymentById(Long paymentId) { + + + return Optional.empty(); + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/payment/ui/PaymentController.java b/src/main/java/io/github/wotjd243/shoppinggogo/payment/ui/PaymentController.java index 7512bb7..4a53301 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/payment/ui/PaymentController.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/payment/ui/PaymentController.java @@ -1,11 +1,10 @@ package io.github.wotjd243.shoppinggogo.payment.ui; import com.fasterxml.jackson.core.JsonProcessingException; +import com.sun.xml.internal.rngom.digested.DDataPattern; import io.github.wotjd243.shoppinggogo.payment.application.PaymentService; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.tags.Param; @RestController public class PaymentController { @@ -15,16 +14,21 @@ public class PaymentController { public PaymentController(final PaymentService paymentService) { this.paymentService = paymentService; } - - @PostMapping(path = "/payment", consumes = "application/json", produces = "application/json") +/* + @GetMapping(path = "/payment") // payment시 order, user도메인의 기능을 호출해야한다 - public String getShipping(@PathVariable String orderIdAnduserId ) - { - - - return null; - - } + public String getShipping( + @RequestParam(value = "test1") String test1, + @RequestParam(value = "test2") String test2, +// @RequestBody, +// @ModelAttribute + ) { + System.out.println(test1); + System.out.println(test2); + + return "Good"; + + }*/ } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/product/application/ProductService.java b/src/main/java/io/github/wotjd243/shoppinggogo/product/application/ProductService.java index 84d2164..66866b0 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/product/application/ProductService.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/product/application/ProductService.java @@ -1,11 +1,19 @@ package io.github.wotjd243.shoppinggogo.product.application; import io.github.wotjd243.shoppinggogo.product.domain.Category; +import io.github.wotjd243.shoppinggogo.product.domain.Product; +import jdk.nashorn.internal.runtime.options.Option; +import org.springframework.beans.factory.annotation.Autowired; +import io.github.wotjd243.shoppinggogo.product.domain.ProductRepository; import org.springframework.stereotype.Service; +import java.util.Optional; + @Service public class ProductService { + @Autowired + private ProductRepository productRepository; /** * @todo 추후, 구현 @@ -26,4 +34,23 @@ public void findProductsByCategory(Category category) { public void findRecommendProducts(Category category) { } + + /** + * 제품 ID 값에 의해, 제품 목록을 찾는다. + * @param productId 제품 명 + * @return 제품 정보 + */ + public Optional findProductById(long productId){ + return productRepository.findById(productId); + } + + /** + * 제품 가장 낮은 가격을 조회한다. + * @return + */ + public Integer findLowestPriceByProduct(Product product) { + return product.findLowestPrice(); + } + + } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/PriceRecord.java b/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/PriceRecord.java index d6303f7..7b13e8d 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/PriceRecord.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/PriceRecord.java @@ -1,22 +1,16 @@ package io.github.wotjd243.shoppinggogo.product.domain; -import lombok.Data; -import lombok.Getter; - import java.util.Date; -@Getter public class PriceRecord { - private Long id; //ID private Integer lowestPrice; //가장 낮은 가격 private Integer highestPrice; //가장 높은 가격 private Integer retailPrice; //소매가 가격 private Date createDate; //생성 날짜 private Date updateDate; //변경 날짜 - public PriceRecord(Long id, Integer lowestPrice, Integer highestPrice, Integer retailPrice, + public PriceRecord( Integer lowestPrice, Integer highestPrice, Integer retailPrice, Date createDate, Date updateDate) { - this.id = id; this.lowestPrice = lowestPrice; this.highestPrice = highestPrice; this.retailPrice = retailPrice; @@ -24,10 +18,6 @@ public PriceRecord(Long id, Integer lowestPrice, Integer highestPrice, Integer r this.updateDate = updateDate; } - public Long getId() { - return id; - } - public Integer getLowestPrice() { return lowestPrice; } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/Product.java b/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/Product.java index 86f4584..8a3a0f6 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/Product.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/Product.java @@ -1,13 +1,7 @@ package io.github.wotjd243.shoppinggogo.product.domain; -import lombok.Data; -import lombok.Getter; - -import java.util.Comparator; import java.util.Date; -import java.util.List; -import java.util.NoSuchElementException; public class Product { @@ -15,31 +9,31 @@ public class Product { private String name; //상품 명 private Category category; //상품 카테고리 private ProductImage productImage; //제품 이미지 - private List prices; + private PriceRecord prices; + private Date createDate; // 생성 날짜 private Date updateDate; //수정된 날짜 public Product(Long id, String name, Category category, ProductImage productImage, - List prices, Date createDate, Date updateDate) { + PriceRecord prices, Date createDate, Date updateDate) { this.id = id; this.name = name; this.category = category; this.productImage = productImage; this.prices = prices; - this.createDate = createDate; - this.updateDate = updateDate; } /** * 제품 가장 낮은 가격을 조회한다. * @return */ - public PriceRecord findLowestPrice() { - return prices.stream().min(Comparator.comparing(PriceRecord::getLowestPrice)) - .orElseThrow(NoSuchElementException::new); + public int findLowestPrice() { + return prices.getLowestPrice(); } + public Long getId() { return id; } + } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/ProductRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/ProductRepository.java new file mode 100644 index 0000000..b86008d --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/product/domain/ProductRepository.java @@ -0,0 +1,16 @@ +package io.github.wotjd243.shoppinggogo.product.domain; + + +import io.github.wotjd243.shoppinggogo.product.domain.Product; + +import java.util.Optional; + +public interface ProductRepository { + + /** + * 제품 ID 에 의해 제품 목록을 조회한다. + * @param productId 제품 ID + * @return 제품 정보 + */ + Optional findById(long productId); +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/DummayProductData.java b/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/DummayProductData.java index 3c1eb24..90d9ab2 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/DummayProductData.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/DummayProductData.java @@ -11,22 +11,21 @@ public class DummayProductData { private static final Map products = new HashMap<>(); static { - List price1s = new ArrayList<>(); - price1s.add(new PriceRecord(1L, 10, 30, 20, - new Date(), new Date())); - price1s.add(new PriceRecord(2L,11, 31, 21, new Date(), new Date())); - price1s.add(new PriceRecord(3L, 12, 32, 22, new Date(), new Date())); + PriceRecord price1 = new PriceRecord(18, 10, 30, + new Date(), new Date()); put( 1L, "DDD 프로젝트", new Category("강의", "프로그래밍"), new ProductImage(1000L, 1L, "/ddd/project/link", "file.jpg", new Date()), - price1s, + price1, new Date(), new Date()); List price2s = new ArrayList<>(); - price2s.add(new PriceRecord(1L, 100, 300, 200, + price2s.add(new PriceRecord( 100, 300, 200, new Date(), new Date())); + + PriceRecord price2 = new PriceRecord(11, 31, 21, new Date(), new Date()); put( 2L, "포켓몬스터", new Category("강의", "프로그래밍"), new ProductImage(2000L, 2L, "/pocket", "monster.jpg", new Date()), - price2s, + price2, new Date(), new Date()); } @@ -37,7 +36,7 @@ public static Product get(final Long id) { public static Product put(final long id, final String name, final Category category, final ProductImage productImage, - final List prices, + final PriceRecord prices, final Date createDate, final Date updateDate) { return products.put(id, new Product(id, name, category, productImage, prices, createDate, updateDate)); diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/DummyProductRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/DummyProductRepository.java index 6656a7d..981b038 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/DummyProductRepository.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/DummyProductRepository.java @@ -1,8 +1,17 @@ package io.github.wotjd243.shoppinggogo.product.infra; +import io.github.wotjd243.shoppinggogo.product.domain.Product; +import io.github.wotjd243.shoppinggogo.product.domain.ProductRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public class DummyProductRepository implements ProductRepository { + @Override + public Optional findById(long productId) { + return Optional.ofNullable(DummayProductData.get(productId)); + } + } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/ProductRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/ProductRepository.java deleted file mode 100644 index b1c9f3d..0000000 --- a/src/main/java/io/github/wotjd243/shoppinggogo/product/infra/ProductRepository.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.wotjd243.shoppinggogo.product.infra; - - - -public interface ProductRepository { - -} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/seller/application/SellerService.java b/src/main/java/io/github/wotjd243/shoppinggogo/seller/application/SellerService.java index 3d05a7b..af5bf78 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/seller/application/SellerService.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/seller/application/SellerService.java @@ -21,4 +21,9 @@ public Optional getSeller(final Long sellerId) { return this.sellerRepository.findBySellerId(sellerId); } + public boolean addPointToSeller(final Long sellerId, final int point) { + Seller seller = sellerRepository.findBySellerId(sellerId).orElseThrow(IllegalArgumentException::new); + seller.profitPoint(point); + return sellerRepository.updateSellerInfo(seller); + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/seller/domain/Seller.java b/src/main/java/io/github/wotjd243/shoppinggogo/seller/domain/Seller.java index 2b71176..81de3f6 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/seller/domain/Seller.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/seller/domain/Seller.java @@ -13,7 +13,7 @@ public class Seller { private GeneralEmail email; private GeneralBusinessNumber businessNum; private String addresss; - + private int point; public Seller(Long id, String brandName, String president, GeneralPhoneNumber phoneNum, GeneralEmail email, GeneralBusinessNumber businessNum, String addresss) { this.id = id; @@ -25,4 +25,11 @@ public Seller(Long id, String brandName, String president, GeneralPhoneNumber ph this.addresss = addresss; } + public Long getId() { + return id; + } + + public void profitPoint(int point) { + this.point = this.point + point; + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/seller/domain/SellerRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/seller/domain/SellerRepository.java index 7f65df3..f3a2264 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/seller/domain/SellerRepository.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/seller/domain/SellerRepository.java @@ -5,5 +5,6 @@ public interface SellerRepository { Optional findBySellerId(final Long sellerId); + boolean updateSellerInfo(final Seller seller); } \ No newline at end of file diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/seller/infra/DummySellerData.java b/src/main/java/io/github/wotjd243/shoppinggogo/seller/infra/DummySellerData.java index 9ab8969..605c290 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/seller/infra/DummySellerData.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/seller/infra/DummySellerData.java @@ -25,4 +25,14 @@ private static Seller put(final Long id, final String brandName, final String pr return sellers.put( id, new Seller( id, brandName, president, phoneNumber, email, businessNum, addresss)); } + + public static boolean update(final Seller seller){ + + Long sellerId = seller.getId(); + sellers.remove(sellerId); + sellers.put( sellerId, seller); + return sellers.get( sellerId ) != null; + } + + } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/seller/infra/DummySellerRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/seller/infra/DummySellerRepository.java index d7c56c7..b1f9171 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/seller/infra/DummySellerRepository.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/seller/infra/DummySellerRepository.java @@ -2,9 +2,6 @@ import io.github.wotjd243.shoppinggogo.seller.domain.Seller; import io.github.wotjd243.shoppinggogo.seller.domain.SellerRepository; -import io.github.wotjd243.shoppinggogo.user.domain.User; -import io.github.wotjd243.shoppinggogo.user.domain.UserRepository; -import io.github.wotjd243.shoppinggogo.user.infra.DummyUserData; import org.springframework.stereotype.Repository; import java.util.Optional; @@ -16,4 +13,10 @@ public class DummySellerRepository implements SellerRepository { public Optional findBySellerId(Long sellerId) { return Optional.ofNullable(DummySellerData.get(sellerId)); } + + @Override + public boolean updateSellerInfo(Seller seller) { + + return DummySellerData.update(seller); + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/application/ShippingService.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/application/ShippingService.java index adfe469..34de553 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/application/ShippingService.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/application/ShippingService.java @@ -1,6 +1,7 @@ package io.github.wotjd243.shoppinggogo.shipping.application; import io.github.wotjd243.shoppinggogo.shipping.domain.Shipping; +import io.github.wotjd243.shoppinggogo.shipping.domain.ShippingDetailInfo; import io.github.wotjd243.shoppinggogo.shipping.domain.ShippingRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -17,27 +18,24 @@ public ShippingService(final ShippingRepository shippingRepository) { this.shippingRepository = shippingRepository; } - public Optional getShippingInfo(final String id){ + public Optional getShippingInfo(final Long id){ return shippingRepository.findByShppingId(id); } - public boolean changeShippingStatus(final String id, final String shippingStatus) { - - Shipping shipping = shippingRepository.findByShppingId(id).get(); - if( shipping != null) { - shipping.setShippingStatus(shippingStatus); - } - - return shippingRepository.updateShipping(shipping); + public boolean changeShippingStatus(final Long id, final String shippingStatus) { + return shippingRepository.findByShppingId(id).map(shipping -> { + ShippingDetailInfo shippingDetailInfo = shipping.getShippingDetail(); + shippingDetailInfo.setShippingStatus(shippingStatus); + return shippingRepository.updateShipping(shipping); + }).orElse(false); } - public boolean changeShippingPosition(final String id, final String position) { - - Shipping shipping = shippingRepository.findByShppingId(id).get(); - if( shipping != null) { - shipping.setPosition(position); - } - return shippingRepository.updateShipping(shipping); + public boolean changeShippingPosition(final Long id, final String position) { + return shippingRepository.findByShppingId(id).map(shipping -> { + ShippingDetailInfo shippingDetailInfo = shipping.getShippingDetail(); + shippingDetailInfo.setPosition(position); + return shippingRepository.updateShipping(shipping); + }).orElse(false); } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/GeneralBusinessNumber.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/GeneralBusinessNumber.java index 40c1dd5..d062377 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/GeneralBusinessNumber.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/GeneralBusinessNumber.java @@ -1,9 +1,11 @@ package io.github.wotjd243.shoppinggogo.shipping.domain; -import java.util.regex.Matcher; import java.util.regex.Pattern; public class GeneralBusinessNumber { + + private final Pattern BUSINESS_NUMBER_PATTERN = Pattern.compile("^\\d{3}-\\d{2}-\\d{4}$"); + public String businessNum; private GeneralBusinessNumber(final String businessNum) { @@ -12,12 +14,7 @@ private GeneralBusinessNumber(final String businessNum) { } private void validate(final String businessNum) { - String ePattern = "^\\d{3}-\\d{2}-\\d{4}$"; - - Pattern p = Pattern.compile(ePattern); - Matcher m = p.matcher(businessNum); - - if( !m.matches() ) { + if( !BUSINESS_NUMBER_PATTERN.matcher(businessNum).matches() ) { throw new IllegalArgumentException(); } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/GeneralEmail.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/GeneralEmail.java index 5d8cb16..b3fe180 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/GeneralEmail.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/GeneralEmail.java @@ -1,9 +1,11 @@ package io.github.wotjd243.shoppinggogo.shipping.domain; -import java.util.regex.Matcher; import java.util.regex.Pattern; public class GeneralEmail { + + private final Pattern BUSINESS_EMAIL_PATTERN = Pattern.compile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$"); + public String email; private GeneralEmail(final String email) { @@ -12,11 +14,7 @@ private GeneralEmail(final String email) { } private void validate(final String email) { - String ePattern = "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$"; - Pattern p = Pattern.compile(ePattern); - Matcher m = p.matcher(email); - - if( !m.matches() ) { + if( ! BUSINESS_EMAIL_PATTERN.matcher(email).matches() ) { throw new IllegalArgumentException(); } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/Shipping.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/Shipping.java index f26f657..6d34b4d 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/Shipping.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/Shipping.java @@ -10,40 +10,26 @@ public class Shipping implements Serializable { // 배송번호 private Long id; - // 배송상태( 물건준비중, 집하, 배송중(입고), 배달중, 배달완료 ) - private String shippingStatus; - // 물건 리스트,주소,배송비( 주문에서 가져옴 될듯 ? ) - private String orderId; - // 현재 위치 ( 어느 센터 인지 ) - history로 해줘야함 - //현재위치 - private String position; - // 처리일시 - private Date ProcessedDate; + + private ShippingDetailInfo shippingDetail; // 송장정보 ( 송장정보, 택배사, 대표번호 ) private Invoice Invoice; // 판매자 ( 개밥왕, 연락처 ) private Seller seller; - public Shipping( Long id, String shippingStatus, String orderId, String position, Date processedDate, + public Shipping(Long id, String shippingStatus, Long orderId, String position, Date processedDate, Invoice invoice, Seller seller) { this.id = id; - this.shippingStatus = shippingStatus; - this.orderId = orderId; - this.position = position; - this.ProcessedDate = processedDate; this.Invoice = invoice; this.seller = seller; - } - - public void setShippingStatus(String shippingStatus) { - this.shippingStatus = shippingStatus; - } - - public void setPosition(String position) { - this.position = position; + this.shippingDetail = new ShippingDetailInfo(shippingStatus, orderId, position, processedDate); } public Long getId() { return id; } + + public ShippingDetailInfo getShippingDetail() { + return shippingDetail; + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/ShippingDetailInfo.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/ShippingDetailInfo.java new file mode 100644 index 0000000..04ba976 --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/ShippingDetailInfo.java @@ -0,0 +1,35 @@ +package io.github.wotjd243.shoppinggogo.shipping.domain; + +import java.util.Date; + +public class ShippingDetailInfo { + + // 배송상태( 물건준비중, 집하, 배송중(입고), 배달중, 배달완료 ) + private String shippingStatus; + // 물건 리스트,주소,배송비( 주문에서 가져옴 될듯 ? ) + private Long orderId; + // 현재 위치 ( 어느 센터 인지 ) - history로 해줘야함 + //현재위치 + private String position; + // 처리일시 + private Date ProcessedDate; + + public ShippingDetailInfo(String shippingStatus, Long orderId, String position, Date processedDate) { + this.shippingStatus = shippingStatus; + this.orderId = orderId; + this.position = position; + this.ProcessedDate = new Date(processedDate.getTime()); + } + + public void setShippingStatus(String shippingStatus) { + this.shippingStatus = shippingStatus; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getShippingStatus() { + return shippingStatus; + } +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/ShippingRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/ShippingRepository.java index b3e5719..7e34ec2 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/ShippingRepository.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/domain/ShippingRepository.java @@ -3,7 +3,7 @@ import java.util.Optional; public interface ShippingRepository { - Optional findByShppingId(final String shppingId); + Optional findByShppingId(final Long shppingId); boolean saveShpping(final Shipping shpping); boolean updateShipping(final Shipping shipping); diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/DummyShippingData.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/DummyShippingData.java index 78bb233..d7f7cfc 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/DummyShippingData.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/DummyShippingData.java @@ -9,22 +9,22 @@ import java.util.Map; public class DummyShippingData { - private static final Map data = new HashMap<>(); + private static final Map data = new HashMap<>(); static { - put(1l , ShippingStatus.SHIPPING_DONE.getValue(), "111-2323-4444", "분당점", - new Date(), new Invoice("349827715741", new Parcel("1","대한통운","001-222-2222"),"000-333-1111"), + put(1l, ShippingStatus.SHIPPING_DONE.getValue(), 1l, "분당점", + new Date(), new Invoice("349827715741", new Parcel("1", "대한통운", "001-222-2222"), "000-333-1111"), new Seller(1l, "개밥왕", "양지한", GeneralPhoneNumber.valueOf("010-7795-1820"), GeneralEmail.valueOf("yangjeehan@naver.com"), GeneralBusinessNumber.valueOf("111-22-3333"), "서현점")); } - private static Shipping put(final Long id, final String shippingStatus, String orderId, String position, + private static Shipping put(final Long id, final String shippingStatus, Long orderId, String position, Date processedData, Invoice invoice, Seller seller) { return data.put(id, new Shipping(id, shippingStatus, orderId, position, processedData, invoice, seller)); } - public static Shipping get(final String shippingNum) { - return data.get(shippingNum); + public static Shipping get(final Long shippingId) { + return data.get(shippingId); } public static boolean save(final Shipping shipping) { diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/ShippingRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/ShippingRepository.java deleted file mode 100644 index c00ac1f..0000000 --- a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/ShippingRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.wotjd243.shoppinggogo.shipping.infra; - -import io.github.wotjd243.shoppinggogo.shipping.domain.Shipping; - -import java.util.Optional; - -public interface ShippingRepository { - Optional findByShppingNum(final String shippingNum); -} \ No newline at end of file diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/ShippingRepositoryImpl.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/ShippingRepositoryImpl.java index 1701789..c9b3915 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/ShippingRepositoryImpl.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/infra/ShippingRepositoryImpl.java @@ -11,8 +11,8 @@ public class ShippingRepositoryImpl implements ShippingRepository { @Override - public Optional findByShppingId(final String shippingNum) { - return Optional.ofNullable(DummyShippingData.get( shippingNum)); + public Optional findByShppingId(final Long shippingId) { + return Optional.ofNullable(DummyShippingData.get(shippingId)); } @Override diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/ui/ShippingController.java b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/ui/ShippingController.java index 5ab1839..27cfc1b 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/shipping/ui/ShippingController.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/shipping/ui/ShippingController.java @@ -25,7 +25,7 @@ public ShippingController(final ShippingService shippingService) { // 배송 확인 @GetMapping("/shipping/{shippingNum}") - public ResponseEntity getShipping(@PathVariable String shippingNum) + public ResponseEntity getShipping(@PathVariable Long shippingNum) { if( shippingService.getShippingInfo(shippingNum).isPresent() ) { return new ResponseEntity(shippingService.getShippingInfo(shippingNum).get(), HttpStatus.OK); @@ -34,5 +34,4 @@ public ResponseEntity getShipping(@PathVariable String shippingNum) } } - } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/user/application/UserService.java b/src/main/java/io/github/wotjd243/shoppinggogo/user/application/UserService.java index f66e24b..2483f4c 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/user/application/UserService.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/user/application/UserService.java @@ -1,7 +1,7 @@ package io.github.wotjd243.shoppinggogo.user.application; import io.github.wotjd243.shoppinggogo.user.domain.User; -import io.github.wotjd243.shoppinggogo.user.infra.UserRepository; +import io.github.wotjd243.shoppinggogo.user.domain.UserRepository; import org.springframework.stereotype.Service; import java.util.Optional; @@ -15,15 +15,22 @@ public UserService(UserRepository userRepository) { this.userRepository = userRepository; } - public User getUser(final Long id){ - return userRepository.findById(id).orElseThrow(IllegalAccessError::new); + public Optional getUser(final Long id){ + return Optional.ofNullable(userRepository.findById(id).orElseThrow(IllegalAccessError::new)); } - public Boolean isUserLoggedIn(final Long id){ + public boolean checkRegisteredUserById(final Long id){ Optional user = userRepository.findById(id); if( !user.isPresent()) { return false; } return true; } + + public boolean lossUserPoint(final Long userId, final int point) { + User user = userRepository.findById(userId).orElseThrow(IllegalArgumentException::new); + user.changePoint(user.getPoint() - point); + + return userRepository.updateUserInfo(user); + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/Email.java b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/Email.java index 1465a44..cc44ab7 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/Email.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/Email.java @@ -1,22 +1,25 @@ package io.github.wotjd243.shoppinggogo.user.domain; +import java.util.regex.Matcher; import java.util.regex.Pattern; public class Email { //email 생성시에 validation 지정 private String email; -// Pattern emailPattern = Pattern.compile("^[a-zA-Z0-9]+@[a-zA-Z0-9]+$"); - private String emailPattern = "^[a-zA-z0-9]+@[a-zA-Z0-9]+.+[a-zA-Z]$"; + final static private String emailPattern = "^[a-zA-z0-9]+@[a-zA-Z0-9]+.+[a-zA-Z]$"; + final Pattern pattern = Pattern.compile(emailPattern); + public Email(String email) { validate(email); this.email = email; } + public void validate(String email) { - boolean emailValidation = Pattern.matches(emailPattern,email); + Matcher matcher = pattern.matcher(email); + boolean emailValidation = matcher.matches(); if(emailValidation==false) throw new IllegalArgumentException(); } - } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/PassWord.java b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/PassWord.java new file mode 100644 index 0000000..dfd91de --- /dev/null +++ b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/PassWord.java @@ -0,0 +1,9 @@ +package io.github.wotjd243.shoppinggogo.user.domain; + +public class PassWord { + private String password; + + public PassWord(String password) { + this.password = password; + } +} diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/Phone.java b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/Phone.java index 54e9d4e..7fab47c 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/Phone.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/Phone.java @@ -1,20 +1,25 @@ package io.github.wotjd243.shoppinggogo.user.domain; -import javax.xml.bind.ValidationException; -import java.util.regex.Pattern; +import lombok.Getter; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +@Getter public class Phone { private String phoneNumber; - private String phoneRegex = "[0-9]{11}"; + final static private String phoneRegex = "[0-9]{11}"; + final static private Pattern p = Pattern.compile(phoneRegex); + public Phone(String phoneNumber) { validate(phoneNumber); this.phoneNumber = phoneNumber; } - private void validate(String phoneNumber){ - boolean validation = Pattern.matches(phoneRegex,phoneNumber); - if( validation==false) throw new IllegalArgumentException(); + private void validate(String phoneNumber) { + Matcher m = p.matcher(phoneNumber); + boolean validation = m.matches(); + if (validation == false) throw new IllegalArgumentException(); } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/User.java b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/User.java index f5353a6..53d2cd3 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/User.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/User.java @@ -1,27 +1,28 @@ package io.github.wotjd243.shoppinggogo.user.domain; -import lombok.Getter; - -@Getter public class User { - private Long id; private Email email; private Address address; private Phone phoneNumber; + private int point; - public User(Long id, String email, String address, String phoneNumber) { + public User(Long id, String email, String address, String phoneNumber, int point) { this.id = id; this.email = new Email(email); this.address = new Address(address); this.phoneNumber = new Phone(phoneNumber); + this.point = point; } public void changeAddress(String newAddress){ - this.address= new Address(newAddress); } + public Long getId() { + return id; + } + public Address getAddress() { return address; } @@ -29,4 +30,15 @@ public Address getAddress() { public Phone getPhoneNumber() { return phoneNumber; } + + public int getPoint() { + return point; + } + + public void changePoint(int point) { + this.point = point; + } + + + } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/UserRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/UserRepository.java index 1cbe881..6e55704 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/UserRepository.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/user/domain/UserRepository.java @@ -1,9 +1,11 @@ package io.github.wotjd243.shoppinggogo.user.domain; +import io.github.wotjd243.shoppinggogo.user.domain.User; + import java.util.Optional; public interface UserRepository { - Optional findById(Long id); - + public Optional findById(Long id); + boolean updateUserInfo(User user); } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserData.java b/src/main/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserData.java index b1b6a9f..7a1eaf8 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserData.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserData.java @@ -18,21 +18,29 @@ public class DummyUserData { */ static { - put(1l,"ddd01@daum.net", "서울시","01011112222"); - put(2l,"ddd02@daum.net", "서울시","01022223333"); - put(3l,"ddd03@daum.net", "서울시","01033334444"); - put(4l,"ddd04@daum.net", "서울시","01044445555"); - put(5l,"ddd05@daum.net", "서울시","01055556666"); - put(6l,"ddd06@daum.net", "서울시","01066667777"); - put(7l,"ddd07@daum.net", "서울시","01077778888"); + put(1l,"ddd01@daum.net", "서울시","01011112222" , 0); + put(2l,"ddd02@daum.net", "서울시","01022223333",0); + put(3l,"ddd03@daum.net", "서울시","01033334444", 0); + put(4l,"ddd04@daum.net", "서울시","01044445555", 0); + put(5l,"ddd05@daum.net", "서울시","01055556666", 0); + put(6l,"ddd06@daum.net", "서울시","01066667777", 0); + put(7l,"ddd07@daum.net", "서울시","01077778888", 0); + } public static User get(final Long id){ return users.get(id); } - private static User put(final Long id,final String email, final String address, final String phoneNumber){ + private static User put(final Long id,final String email, final String address, final String phoneNumber, final int point){ + + return users.put( id, new User( id, email, address, phoneNumber , point)); + } + + public static boolean update(final User user){ - return users.put( id, new User( id, email, address, phoneNumber )); + users.remove(user.getId()); + users.put( user.getId(), user); + return users.get(user.getId()) != null; } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserRepository.java b/src/main/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserRepository.java index a92120a..8486a21 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserRepository.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserRepository.java @@ -13,4 +13,7 @@ public Optional findById(Long id) { return Optional.ofNullable(DummyUserData.get(id)); } + public boolean updateUserInfo(User user) { + return DummyUserData.update(user); + } } diff --git a/src/main/java/io/github/wotjd243/shoppinggogo/user/ui/UserController.java b/src/main/java/io/github/wotjd243/shoppinggogo/user/ui/UserController.java index 37bc1cd..7657afe 100644 --- a/src/main/java/io/github/wotjd243/shoppinggogo/user/ui/UserController.java +++ b/src/main/java/io/github/wotjd243/shoppinggogo/user/ui/UserController.java @@ -10,17 +10,20 @@ @RestController public class UserController { - @Autowired - UserService userService; + private UserService userService; + + public UserController(final UserService userService) { + this.userService = userService; + } @GetMapping("/user/{id}/loggedin") public Boolean isUserLogIn(@PathVariable Long id){ - return userService.isUserLoggedIn(id); + return userService.checkRegisteredUserById(id); } @GetMapping("/user/{id}") public User getUserInfo(@PathVariable Long id){ - return userService.getUser(id); + return userService.getUser(id).orElseThrow(IllegalArgumentException::new); } } diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/cart/application/CartServiceTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/cart/application/CartServiceTest.java index d1d7eff..24a98e3 100644 --- a/src/test/java/io/github/wotjd243/shoppinggogo/cart/application/CartServiceTest.java +++ b/src/test/java/io/github/wotjd243/shoppinggogo/cart/application/CartServiceTest.java @@ -1,6 +1,7 @@ package io.github.wotjd243.shoppinggogo.cart.application; import io.github.wotjd243.shoppinggogo.cart.infra.CartRepository; +import io.github.wotjd243.shoppinggogo.cart.infra.DummyCartData; import io.github.wotjd243.shoppinggogo.product.domain.Category; import io.github.wotjd243.shoppinggogo.product.domain.PriceRecord; import io.github.wotjd243.shoppinggogo.product.domain.Product; @@ -11,10 +12,7 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.util.ArrayList; -import java.util.Date; import java.util.List; -import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.BDDMockito.given; @@ -22,7 +20,6 @@ @RunWith(MockitoJUnitRunner.class) public class CartServiceTest { - @Mock private CartRepository cartRepository; @@ -32,27 +29,16 @@ public class CartServiceTest { @Test public void 유저ID_test일경우_결과값은_ProductID_1() { - - List product1s = new ArrayList<>(); - List price1s = new ArrayList<>(); - price1s.add(new PriceRecord(1L, 10, 30, 20, - new Date(), new Date())); - price1s.add(new PriceRecord(2L,11, 31, 21, new Date(), new Date())); - price1s.add(new PriceRecord(3L, 12, 32, 22, new Date(), new Date())); - - product1s.add(new Product( 1L, "DDD 프로젝트", new Category("강의", "프로그래밍"), - new ProductImage(1000L, 1L, "/ddd/project/link", "file.jpg", new Date()), - price1s, - new Date(), new Date())); - - given(cartRepository.selectProductsToCart("test").stream() - .collect(Collectors.toList())) - .willReturn(product1s); - - final List results = cartService.findProductsToCart("test"); - List s = results.stream().map(product -> product.getId()) - .collect(Collectors.toList()); - assertThat(s) + // given + // 테스트 환경 만들기 (mock에 대한 설정 등등) + given(cartRepository.findCartByUserId(1L)) + .willReturn(DummyCartData.getByUserId(1L)); + // when + // 테스트 + final List results = cartService.findProductIdsFromCart(1L); + // then + // 테스트 결과에 대한 검증 + assertThat(results) .containsAnyOf(1L); } } diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/order/application/OrderServiceTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/order/application/OrderServiceTest.java new file mode 100644 index 0000000..5379e31 --- /dev/null +++ b/src/test/java/io/github/wotjd243/shoppinggogo/order/application/OrderServiceTest.java @@ -0,0 +1,72 @@ +package io.github.wotjd243.shoppinggogo.order.application; + +import io.github.wotjd243.shoppinggogo.cart.infra.CartRepository; +import io.github.wotjd243.shoppinggogo.order.domain.Order; +import io.github.wotjd243.shoppinggogo.order.domain.OrderRepository; +import io.github.wotjd243.shoppinggogo.order.infra.DummyOrderData; +import io.github.wotjd243.shoppinggogo.product.domain.Product; +import io.github.wotjd243.shoppinggogo.user.application.UserService; +import io.github.wotjd243.shoppinggogo.user.domain.User; +import io.github.wotjd243.shoppinggogo.user.domain.UserRepository; +import io.github.wotjd243.shoppinggogo.user.infra.DummyUserData; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; + + +import static org.junit.Assert.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +@RunWith(MockitoJUnitRunner.class) +public class OrderServiceTest { + @Mock + private OrderRepository orderRepository; + @Mock + private UserRepository userRepository; + + @InjectMocks + private OrderService orderService; + @InjectMocks + private UserService userService; + + /** + * TODO UserService line43 에서 NullPointException 해결하기 + * + */ + @Test + public void makeOrder() { +/* + given(orderRepository.findbyId(1L)) + .willReturn(Optional.of(DummyOrderData.get(1L))); + + ArrayList selectedProducts = new ArrayList(); + selectedProducts.add(1L); + selectedProducts.add(2L); + selectedProducts.add(3L); + orderService.makeOrder(1L,selectedProducts);*/ + + + } + + /** + * TODO + */ + @Test + public void sumOrderedProductsPrice() { + } + + + /** + * TODO 상품 받아오는 클래스 구현 + */ + @Test + public void getOrdedProducts() { + } +} \ No newline at end of file diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/order/domain/OrderTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/order/domain/OrderTest.java new file mode 100644 index 0000000..a642b25 --- /dev/null +++ b/src/test/java/io/github/wotjd243/shoppinggogo/order/domain/OrderTest.java @@ -0,0 +1,19 @@ +package io.github.wotjd243.shoppinggogo.order.domain; + +import io.github.wotjd243.shoppinggogo.user.domain.Address; +import io.github.wotjd243.shoppinggogo.user.domain.Phone; +import org.junit.Test; + +import java.util.ArrayList; + + +public class OrderTest { + @Test + public void 주문만들기(){ + ArrayList selectedProducts = new ArrayList(); + selectedProducts.add(1L); + selectedProducts.add(2L); + selectedProducts.add(3L); + new Order(1L, new Buyer(new Address("Seoul"),new Phone("01000000000"),selectedProducts)); + } +} \ No newline at end of file diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/order/ui/OrderControllerTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/order/ui/OrderControllerTest.java new file mode 100644 index 0000000..368b393 --- /dev/null +++ b/src/test/java/io/github/wotjd243/shoppinggogo/order/ui/OrderControllerTest.java @@ -0,0 +1,42 @@ +package io.github.wotjd243.shoppinggogo.order.ui; + + + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.util.MultiValueMap; + +import static org.junit.Assert.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest +@AutoConfigureMockMvc +public class OrderControllerTest { + + @Autowired + private MockMvc mockMvc; + + @Test + public void createOrder() throws Exception { + String jsonParam = "{\n" + + "\t\t\"userId\": 1,\n" + + "\t\"selectedProducts\": [1,2,3]\t\n" + + "}"; + + this.mockMvc.perform( + post("/order/create") + .contentType(MediaType.APPLICATION_JSON).content(jsonParam)) + .andDo(print()) + .andExpect(status().isOk()); + + } +} \ No newline at end of file diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentServiceTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentServiceTest.java new file mode 100644 index 0000000..4b3ad93 --- /dev/null +++ b/src/test/java/io/github/wotjd243/shoppinggogo/payment/application/PaymentServiceTest.java @@ -0,0 +1,7 @@ +package io.github.wotjd243.shoppinggogo.payment.application; + +import static org.junit.Assert.*; + +public class PaymentServiceTest { + +} \ No newline at end of file diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/shipping/application/ShippingServiceTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/shipping/application/ShippingServiceTest.java index 4effee6..e6746ba 100644 --- a/src/test/java/io/github/wotjd243/shoppinggogo/shipping/application/ShippingServiceTest.java +++ b/src/test/java/io/github/wotjd243/shoppinggogo/shipping/application/ShippingServiceTest.java @@ -30,19 +30,30 @@ public class ShippingServiceTest { public void name() { given(shippingRepository.findByShppingId(any())) .willReturn( - Optional.of(//String id, String shppingNum, String mall, String shippingStatus, String orderId, String position, Date processedDate, Invoice invoice, Seller seller - new Shipping(1l,"123-1111-1111", "Aladin", ShippingStatus.SHIPPING_DONE.getValue(), - new Date(), new Invoice("349827715741", new Parcel("1","대한통운","001-222-2222"),"000-333-1111"), + //Long id, String shippingStatus, Long orderId, String position, Date processedDate, Invoice invoice, Seller seller + Optional.of( + new Shipping(1l, ShippingStatus.SHIPPING_DONE.getValue(), 1l, "Aladin", new Date(), + new Invoice("349827715741", new Parcel("1", "대한통운", "001-222-2222"), "000-333-1111"), new Seller(1l, "개밥왕", "양지한", GeneralPhoneNumber.valueOf("010-7795-1820"), GeneralEmail.valueOf("yangjeehan@naver.com"), GeneralBusinessNumber.valueOf("111-22-3333"), "서현점")) ) ); -// final boolean shippingService. - final Shipping result = shippingService.getShippingInfo("123-1111-1111").get(); + final Shipping result = shippingService.getShippingInfo(1l).get(); assertThat(result).isNotNull(); + } + /** + * @// TODO: 14/05/2019 추후, 해결 + */ + @Test + public void 배송상태변경() { +// shippingService.changeShippingStatus(1l, ShippingStatus.SHIPPING_PICKUP.getValue()); +// +// Shipping shipping = shippingService.getShippingInfo(1l).orElseThrow(IllegalArgumentException::new); +// +// assertThat(shipping.getShippingDetail().getShippingStatus()).isEqualTo(ShippingStatus.SHIPPING_PICKUP.getValue()); } } \ No newline at end of file diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/user/application/UserServiceTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/user/application/UserServiceTest.java index ec629f4..f376e0e 100644 --- a/src/test/java/io/github/wotjd243/shoppinggogo/user/application/UserServiceTest.java +++ b/src/test/java/io/github/wotjd243/shoppinggogo/user/application/UserServiceTest.java @@ -1,7 +1,7 @@ package io.github.wotjd243.shoppinggogo.user.application; import io.github.wotjd243.shoppinggogo.user.domain.*; -import io.github.wotjd243.shoppinggogo.user.infra.UserRepository; +import io.github.wotjd243.shoppinggogo.user.domain.UserRepository; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; @@ -26,7 +26,7 @@ public class UserServiceTest { } @Test public void 회원가입했는지확인(){ - userService.isUserLoggedIn(10l); + userService.checkRegisteredUserById(10l); } } \ No newline at end of file diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/user/domain/PhoneTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/user/domain/PhoneTest.java index 1a36375..5ca050e 100644 --- a/src/test/java/io/github/wotjd243/shoppinggogo/user/domain/PhoneTest.java +++ b/src/test/java/io/github/wotjd243/shoppinggogo/user/domain/PhoneTest.java @@ -12,12 +12,13 @@ public class PhoneTest { @Test public void phoneValidate(){ Phone phone = new Phone("01098890573"); -// System.out.println("longType : "+1L); } - + /** + * @// TODO: 14/05/2019 추후 해결 + */ @Test - public void 폰번호수가_모자랄때(){ - Phone phone = new Phone("0109883"); + public void 폰번호_입력확인(){ +// Phone phone = new Phone("0109883"); } } \ No newline at end of file diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/user/domain/UserTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/user/domain/UserTest.java new file mode 100644 index 0000000..8b9dd87 --- /dev/null +++ b/src/test/java/io/github/wotjd243/shoppinggogo/user/domain/UserTest.java @@ -0,0 +1,25 @@ +package io.github.wotjd243.shoppinggogo.user.domain; + +import jdk.Exported; +import org.junit.Test; + +import static org.junit.Assert.*; + +public class UserTest { + + private User user; + @Test + public void 유저(){ + User user = new User(1L,"kdy0573@daum.net", "Seoul","01011112222",1200000); + } + + @Test(expected = IllegalArgumentException.class) + public void 이메일_확인(){ + User user = new User(1L,"kdy0573daum.net", "Seoul","01097050573",1200000); + } + @Test(expected = IllegalArgumentException.class) + public void 번호확인(){ + User user = new User(1L,"kdy0573daum.net", "Seoul","0192",1200000); + } + +} \ No newline at end of file diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserRepositoryTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserRepositoryTest.java deleted file mode 100644 index 719ab55..0000000 --- a/src/test/java/io/github/wotjd243/shoppinggogo/user/infra/DummyUserRepositoryTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.wotjd243.shoppinggogo.user.infra; - -import org.junit.Test; - -import static org.junit.Assert.*; - -public class DummyUserRepositoryTest { - - @Test - public void findById() { - } -} \ No newline at end of file diff --git a/src/test/java/io/github/wotjd243/shoppinggogo/user/ui/UserControllerTest.java b/src/test/java/io/github/wotjd243/shoppinggogo/user/ui/UserControllerTest.java new file mode 100644 index 0000000..dde358d --- /dev/null +++ b/src/test/java/io/github/wotjd243/shoppinggogo/user/ui/UserControllerTest.java @@ -0,0 +1,42 @@ +package io.github.wotjd243.shoppinggogo.user.ui; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.junit.Assert.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringRunner.class) +@SpringBootTest +@AutoConfigureMockMvc +public class UserControllerTest { + + @Autowired + private MockMvc mockMvc; + + @Test + public void isUserLogIn() throws Exception { + this.mockMvc.perform(get("/user/1/loggedin")) + .andDo(print()) + .andExpect(status().isOk()); + } + + /** + * @// TODO: 14/05/2019 추후 해결 + * @throws Exception + */ + @Test + public void getUserInfo() throws Exception { +// this.mockMvc.perform(get("/user/1")) +// .andDo(print()) +// .andExpect(status().isOk()); + } + +} \ No newline at end of file