Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.

[#45] 주문기능 제작 #46

Merged
merged 28 commits into from
Jan 16, 2020
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
f782b3b
장바구니 기능 구현
Nov 28, 2019
6cb06dd
cart index delete 기능 구현 및 Test code 작성
Nov 29, 2019
54f8112
- Redis tranasaction 적용
Dec 2, 2019
7cafad5
장바구니 로직 추가
Dec 3, 2019
fe79388
- OrderDTO 생성
binaryyoung Dec 3, 2019
454c57c
- 캐싱하기 적합한 DTO를 사용하도록 변경
Dec 3, 2019
82905b6
빈 테스트코드 추가(Test ERROR)
Dec 3, 2019
489e028
OrderDTO에 @JsonFormat 추가
binaryyoung Dec 4, 2019
15d2f50
리뷰 반영
Dec 4, 2019
0989bc5
사용하지 않는 menuService 제거
Dec 9, 2019
9db3122
DTO를 Inner Class로 분리
Dec 9, 2019
e6cbc9b
가상 결제 구현
Dec 9, 2019
691a57e
사용하지 않는 코드 제거
Dec 10, 2019
b9d20d0
주문 로직 개발
Dec 11, 2019
a437709
계산서 발행 로직 작성 및 리뷰 일부 반영
Dec 13, 2019
792dc36
거리 계산로직 추가
Dec 13, 2019
4341748
배달료 계산 로직 추가
Dec 13, 2019
a280675
insert문을 벌크 insert로 진행하도록 변경
Dec 17, 2019
85a5f6e
주문 기능 제작
Dec 17, 2019
0d394c2
계산서 발행 시 메뉴, 메뉴 옵션에 의해 다수의 SELECT 쿼리가 질의되는 문제 해결
Dec 18, 2019
224158e
자신의 주문 정보 조회 기능 추가
Dec 18, 2019
4dc041c
OrderDTO 불변객체로 변경
Dec 19, 2019
1ddf344
유효성 검사 추가 및 변경
Dec 19, 2019
aeea70a
OrderDTO 수정으로 인한 버그 수정
Dec 19, 2019
a2f8bc4
리뷰 반영
Dec 23, 2019
cff527d
가상 결제 시스템 브랜치와 병합
Dec 24, 2019
8e1b0c3
가상 결제 진행 개발
Dec 24, 2019
a1732c1
Merge branch 'develop' into feature/20
yyy9942 Jan 16, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions src/main/java/com/delfood/controller/OrderController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.delfood.controller;

import com.delfood.aop.MemberLoginCheck;
import com.delfood.dto.ItemsBillDTO;
import com.delfood.dto.OrderDTO;
import com.delfood.dto.OrderItemDTO;
import com.delfood.service.OrderService;
import com.delfood.utils.SessionUtil;
import java.util.List;
import javax.servlet.http.HttpSession;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/orders/")
@Log4j2
public class OrderController {

@Autowired
OrderService orderService;


@GetMapping("price")
@MemberLoginCheck
public TotalPriceResponse totalPrice(HttpSession session, @RequestBody List<OrderItemDTO> items) {
return new TotalPriceResponse(
orderService.getBill(SessionUtil.getLoginMemberId(session), items));
}

@Getter
@AllArgsConstructor
private static class TotalPriceResponse {
ItemsBillDTO bill;
}
}
79 changes: 79 additions & 0 deletions src/main/java/com/delfood/dto/ItemsBillDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.delfood.dto;

import java.util.ArrayList;
import java.util.List;
import lombok.Builder;
import lombok.Getter;
import lombok.NonNull;

// 사용자에게 전달하는 최종 주문서 DTO
@Getter
public class ItemsBillDTO {
@NonNull
private List<MenuInfo> menus;

private long totalPrice;
@NonNull
private String memberId;
@NonNull
private AddressDTO addressInfo;
@NonNull
private ShopInfo shopInfo;

/**
* 해당 인자를 세팅하여 새로운 객체를 반환한다.
* 리스트인 'menus'에는 ArrayList를 할당한다.
* @param memberId 고객 아이디
* @param addressInfo 고객 주소정보
*/
public ItemsBillDTO(@NonNull String memberId,
@NonNull AddressDTO addressInfo,
@NonNull ShopInfo shopInfo) {
this.memberId = memberId;
this.addressInfo = addressInfo;
this.shopInfo = shopInfo;
menus = new ArrayList<ItemsBillDTO.MenuInfo>();
}

@Getter
public static class MenuInfo {
private long id;
private String name;
private long price;
private List<OptionInfo> options;

/**
* 메뉴 정보의 간략한 정보를 저장하는 DTO를 생성한다.
* @param id 메뉴 아이디
* @param name 메뉴의 이름
* @param price 메뉴 가격
*/
@Builder
public MenuInfo(long id, @NonNull String name, long price) {
this.id = id;
this.name = name;
this.price = price;
options = new ArrayList<ItemsBillDTO.MenuInfo.OptionInfo>();
}

@Getter
@Builder
public static class OptionInfo {
private long id;
@NonNull
private String name;
private long price;
}
}

@Getter
@Builder
public static class ShopInfo {

private long id;

@NonNull
private String name;
}

}
2 changes: 2 additions & 0 deletions src/main/java/com/delfood/dto/MenuDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.time.LocalDateTime;
import java.util.List;
import org.apache.ibatis.type.Alias;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
Expand All @@ -12,6 +13,7 @@
@Setter
@ToString
@Alias("menu")
@EqualsAndHashCode(of = {"id"})
public class MenuDTO {

// 기본, 삭제, 숨김, 품절
Expand Down
53 changes: 53 additions & 0 deletions src/main/java/com/delfood/dto/OrderDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.delfood.dto;

import java.time.LocalDateTime;
import java.util.List;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import lombok.ToString;

import org.apache.ibatis.type.Alias;
import com.fasterxml.jackson.annotation.JsonFormat;

@Getter
@Setter
@ToString
@Alias("order")
public class OrderDTO {

public enum OrderStatus {
BEFORE_PAYMENT, ORDER_REQUEST, ORDER_APPROVAL, IN_DELIVERY, DELIVERY_COMPLETE
}

@NonNull
private Long id;

// 응답 데이터의 형식을 지정해준다.
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startTime;

@NonNull
private OrderStatus orderStatus;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime expectedArrivalTime;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime arrivalTime;

private String riderId;

@NonNull
private String memberId;

@NonNull
private String addressCode;

private String addressDetail;

@NonNull
private Long deliveryCost;

List<OrderItemDTO> items;
}
18 changes: 18 additions & 0 deletions src/main/java/com/delfood/dto/OrderItemDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.delfood.dto;

import java.time.LocalDateTime;
import java.util.List;
import com.delfood.dto.OrderDTO.OrderStatus;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;

@Getter
@Setter
public class OrderItemDTO {
private Long id;
private Long menuId;
private Long orderId;
private Long count;
private List<OrderItemOptionDTO> options;
}
16 changes: 16 additions & 0 deletions src/main/java/com/delfood/dto/OrderItemOptionDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.delfood.dto;

import java.time.LocalDateTime;
import java.util.List;
import com.delfood.dto.OrderDTO.OrderStatus;
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;

@Getter
@Setter
public class OrderItemOptionDTO {
private Long id;
private Long optionId;
private Long orderItemId;
}
7 changes: 7 additions & 0 deletions src/main/java/com/delfood/error/ErrorController.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.delfood.error.exception.DuplicateIdException;
import com.delfood.error.exception.menuGroup.InvalidMenuGroupCountException;
import com.delfood.error.exception.menuGroup.InvalidMenuGroupIdException;
import com.delfood.error.exception.order.TotalPriceMismatchException;
import com.delfood.error.exception.shop.CanNotCloseShopException;
import com.delfood.error.exception.shop.CanNotOpenShopException;
import org.springframework.http.HttpStatus;
Expand Down Expand Up @@ -70,4 +71,10 @@ public ErrorMsg handleIllegalArgumentException(IllegalArgumentException e) {
public ErrorMsg handleCannotShopException(RuntimeException e) {
return new ErrorMsg(e.getLocalizedMessage(), getSimpleName(e));
}

@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(TotalPriceMismatchException.class)
yyy9942 marked this conversation as resolved.
Show resolved Hide resolved
public ErrorMsg handleTotalPriceMismatchException(TotalPriceMismatchException e) {
return new ErrorMsg(e.getLocalizedMessage(), getSimpleName(e));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.delfood.error.exception.order;

public class TotalPriceMismatchException extends RuntimeException{
yyy9942 marked this conversation as resolved.
Show resolved Hide resolved
public TotalPriceMismatchException(String msg) {
super(msg);
}
}
8 changes: 8 additions & 0 deletions src/main/java/com/delfood/mapper/MenuMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,5 +70,13 @@ public interface MenuMapper {
* @return
*/
public MenuDTO findById(Long id);

/**
* 메뉴를 옵션과 함께 조회한다.
* @author jun
* @param id 메뉴 아이디
* @return
*/
public MenuDTO findMenuWithOptionsById(Long id);

}
7 changes: 6 additions & 1 deletion src/main/java/com/delfood/mapper/OptionMapper.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.delfood.mapper;

import com.delfood.dto.OptionDTO;

import com.delfood.dto.OrderItemDTO;
import com.delfood.dto.OrderItemOptionDTO;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
Expand Down Expand Up @@ -36,4 +37,8 @@ public interface OptionMapper {
* @return
*/
public int deleteOption(Long id);

public long totalPrice(List<OrderItemOptionDTO> options);

public OptionDTO findById(Long id);
}
18 changes: 18 additions & 0 deletions src/main/java/com/delfood/mapper/OrderMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.delfood.mapper;

import com.delfood.dto.OrderDTO;
import com.delfood.dto.OrderItemDTO;
import com.delfood.dto.OrderItemOptionDTO;
import java.util.List;
import lombok.NonNull;

public interface OrderMapper {
// 파라미터로 넘어온 인스턴스값을 세팅한다
Long addOrder(OrderDTO orderInfo);

Long addOrderItem(OrderItemDTO item);

Long addOrderItemOptions(List<OrderItemOptionDTO> options, @NonNull Long orderItemId);

OrderDTO findById(Long id);
}
4 changes: 4 additions & 0 deletions src/main/java/com/delfood/mapper/ShopMapper.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.delfood.mapper;

import com.delfood.dto.ItemsBillDTO.ShopInfo;
import com.delfood.dto.ItemsBillDTO;
import com.delfood.dto.ShopDTO;
import com.delfood.dto.ShopUpdateDTO;
import java.util.List;
Expand Down Expand Up @@ -122,4 +124,6 @@ public interface ShopMapper {

public List<ShopDTO> findByBeClose(String ownerId);

public ItemsBillDTO.ShopInfo findIdAndNameByMenuId(Long menuId);

}
10 changes: 10 additions & 0 deletions src/main/java/com/delfood/service/MenuService.java
Original file line number Diff line number Diff line change
Expand Up @@ -117,5 +117,15 @@ public void updateMenu(MenuDTO menuInfo) {
throw new RuntimeException("update menu error!");
}
}

/**
* 메뉴를 옵션정보와 함께 조회한다.
* @author jun
* @param id
* @return
*/
public MenuDTO getMenuInfoWithOptions(Long id) {
return menuMapper.findMenuWithOptionsById(id);
}

}
10 changes: 10 additions & 0 deletions src/main/java/com/delfood/service/OptionService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.delfood.service;

import com.delfood.dto.OptionDTO;
import com.delfood.dto.OrderItemDTO;
import com.delfood.dto.OrderItemOptionDTO;
import com.delfood.mapper.OptionMapper;
import java.util.List;
import lombok.extern.log4j.Log4j2;
Expand Down Expand Up @@ -58,6 +60,14 @@ public void deleteOption(Long id) {
}
}

public long totalPrice(List<OrderItemOptionDTO> options) {
return optionMapper.totalPrice(options);
}

public OptionDTO getOptionInfo(Long id) {
return optionMapper.findById(id);
}



}
Loading