diff --git a/src/main/java/com/readyvery/readyverydemo/domain/Cart.java b/src/main/java/com/readyvery/readyverydemo/domain/Cart.java index c082a49..e1c444b 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/Cart.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/Cart.java @@ -19,6 +19,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; @Getter @@ -28,6 +29,7 @@ @AllArgsConstructor @Slf4j @Builder +@Setter public class Cart extends BaseTimeEntity { @Id @@ -54,6 +56,10 @@ public class Cart extends BaseTimeEntity { @Builder.Default private Boolean isDeleted = false; + @Builder.Default + @OneToMany(mappedBy = "cart") + private List orders = new ArrayList(); + // 장바구니 장바구니 아이템 연관관계 매핑 @Builder.Default @OneToMany(mappedBy = "cart", cascade = CascadeType.ALL) diff --git a/src/main/java/com/readyvery/readyverydemo/domain/CartItem.java b/src/main/java/com/readyvery/readyverydemo/domain/CartItem.java index d559dad..ce7de18 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/CartItem.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/CartItem.java @@ -51,6 +51,11 @@ public class CartItem extends BaseTimeEntity { @JoinColumn(name = "cart_idx") private Cart cart; + // 장바구니 아이템 삭제 여부 + @Column(columnDefinition = "BOOLEAN default true") + @Builder.Default + private Boolean isDeleted = false; + // 장바구니 아이템 - 장바구니 옵션 연관관계 매핑 @Builder.Default @OneToMany(mappedBy = "cartItem", cascade = CascadeType.ALL) diff --git a/src/main/java/com/readyvery/readyverydemo/domain/CartOption.java b/src/main/java/com/readyvery/readyverydemo/domain/CartOption.java index 9190e94..6df10e2 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/CartOption.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/CartOption.java @@ -45,3 +45,4 @@ public class CartOption extends BaseTimeEntity { private FoodieOptionCategory foodieOptionCategory; } + diff --git a/src/main/java/com/readyvery/readyverydemo/domain/Coupon.java b/src/main/java/com/readyvery/readyverydemo/domain/Coupon.java index f2813cf..8e3da7d 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/Coupon.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/Coupon.java @@ -1,6 +1,5 @@ package com.readyvery.readyverydemo.domain; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -9,6 +8,7 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToOne; import jakarta.persistence.Table; import lombok.AllArgsConstructor; import lombok.Builder; @@ -46,8 +46,7 @@ public class Coupon extends BaseTimeEntity { @JoinColumn(name = "store_idx") private Store store; - // @OneToOne(mappedBy = "coupon", fetch = LAZY) - // private Order order; + @OneToOne(mappedBy = "coupon", fetch = FetchType.LAZY) + private Order order; } - diff --git a/src/main/java/com/readyvery/readyverydemo/domain/CouponDetail.java b/src/main/java/com/readyvery/readyverydemo/domain/CouponDetail.java index 2157f16..7fad25d 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/CouponDetail.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/CouponDetail.java @@ -46,7 +46,15 @@ public class CouponDetail extends BaseTimeEntity { @Column private LocalDateTime expire; - // 발행처 레디베리 발행(0) / 사장님 발행(ceo_idx) + // 쿠폰 코드 + @Column(name = "coupon_code") + private String couponCode; + + // 발급 갯수 + @Column(name = "coupon_count") + private Long couponCount; + + // 발행처 레디베리 발행(0) / 사장님 발행(store_idx) @Column private Long publisher; @@ -54,9 +62,9 @@ public class CouponDetail extends BaseTimeEntity { @JoinColumn(name = "event_idx") private Event event; - @Builder.Default - @OneToMany(mappedBy = "couponDetail", cascade = CascadeType.ALL) - private List couponMenus = new ArrayList(); + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "foodie_idx") + private Foodie foodie; @Builder.Default @OneToMany(mappedBy = "couponDetail", cascade = CascadeType.ALL) diff --git a/src/main/java/com/readyvery/readyverydemo/domain/Event.java b/src/main/java/com/readyvery/readyverydemo/domain/Event.java index 1cdf782..a4664fe 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/Event.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/Event.java @@ -1,6 +1,5 @@ package com.readyvery.readyverydemo.domain; - import java.util.ArrayList; import java.util.List; @@ -45,3 +44,4 @@ public class Event extends BaseTimeEntity { private List coupons = new ArrayList(); } + diff --git a/src/main/java/com/readyvery/readyverydemo/domain/Foodie.java b/src/main/java/com/readyvery/readyverydemo/domain/Foodie.java index b459c47..6436b7f 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/Foodie.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/Foodie.java @@ -53,6 +53,11 @@ public class Foodie extends BaseTimeEntity { @Column(nullable = false, columnDefinition = "BOOLEAN default false") private boolean hit; + //메뉴 - 가게 연관관계 매핑 + // @ManyToOne(fetch = FetchType.LAZY) + // @JoinColumn(name = "store_idx") + // private Store store; + //메뉴 - 메뉴 카테고리 연관관계 매핑 @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "foodie_category_idx") @@ -71,6 +76,8 @@ public class Foodie extends BaseTimeEntity { private List cartItems = new ArrayList(); @OneToMany(mappedBy = "foodie", cascade = CascadeType.ALL) - private List couponMenus = new ArrayList(); + private List couponDetails = new ArrayList(); + @OneToMany(mappedBy = "foodie", cascade = CascadeType.ALL) + private List orderItems = new ArrayList(); } diff --git a/src/main/java/com/readyvery/readyverydemo/domain/FoodieCategory.java b/src/main/java/com/readyvery/readyverydemo/domain/FoodieCategory.java index 022c6cd..9526d56 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/FoodieCategory.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/FoodieCategory.java @@ -1,6 +1,5 @@ package com.readyvery.readyverydemo.domain; - import java.util.ArrayList; import java.util.List; @@ -44,4 +43,3 @@ public class FoodieCategory { @OneToMany(mappedBy = "foodieCategory", cascade = CascadeType.ALL) private List foodies = new ArrayList<>(); } - diff --git a/src/main/java/com/readyvery/readyverydemo/domain/FoodieOption.java b/src/main/java/com/readyvery/readyverydemo/domain/FoodieOption.java index 1385f99..62ee0c4 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/FoodieOption.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/FoodieOption.java @@ -50,5 +50,9 @@ public class FoodieOption extends BaseTimeEntity { @OneToMany(mappedBy = "foodieOption", cascade = CascadeType.ALL) private List cartOptions = new ArrayList(); + // order item option 연관 관계 매핑 + @OneToMany(mappedBy = "foodieOption", cascade = CascadeType.ALL) + private List orderItemOptions = new ArrayList(); } + diff --git a/src/main/java/com/readyvery/readyverydemo/domain/FoodieOptionCategory.java b/src/main/java/com/readyvery/readyverydemo/domain/FoodieOptionCategory.java index 6d455ad..d373bf0 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/FoodieOptionCategory.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/FoodieOptionCategory.java @@ -54,4 +54,7 @@ public class FoodieOptionCategory extends BaseTimeEntity { @OneToMany(mappedBy = "foodieOptionCategory", cascade = CascadeType.ALL) private List cartOptions = new ArrayList(); + // order item option 연관 관계 매핑 + @OneToMany(mappedBy = "foodieOptionCategory", cascade = CascadeType.ALL) + private List orderItemOptions = new ArrayList(); } diff --git a/src/main/java/com/readyvery/readyverydemo/domain/ImgSize.java b/src/main/java/com/readyvery/readyverydemo/domain/ImgSize.java new file mode 100644 index 0000000..1105417 --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/domain/ImgSize.java @@ -0,0 +1,15 @@ +package com.readyvery.readyverydemo.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum ImgSize { + EVENT_BANNER(), // 이벤트 배너 + VERY_PICK_CAFE_BANNER(), // 카페 리스트 배너 + CAFE_LOGO(), // 카페 로고 + PICKUP_PROMOTION(), // 픽업 홍보 포스터 + CAFE_BANNER(), // 카페 상세 배너 + FOODY(), // 음료 사진 +} diff --git a/src/main/java/com/readyvery/readyverydemo/domain/Order.java b/src/main/java/com/readyvery/readyverydemo/domain/Order.java new file mode 100644 index 0000000..c4f20df --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/domain/Order.java @@ -0,0 +1,106 @@ +package com.readyvery.readyverydemo.domain; + +import java.time.LocalDateTime; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Index; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + +@Getter +@Entity +@Builder +@Table(name = "ORDERS", indexes = {@Index(name = "idx_order_id", columnList = "orderId", unique = true)}) +@AllArgsConstructor +@NoArgsConstructor +@Setter +@Slf4j +public class Order extends BaseTimeEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "order_idx") + private Long id; + + // 총 결제 가격 + @Column + private Long amount; + + // 결제 키 값 + @Column + private String paymentKey; + + // 주문 id + @Column + private String orderId; + + // 주문 명 + @Column + private String orderName; + + // 토스 결제 가격 + @Column + private Long totalAmount; + + // 결제 방법 + @Column + private String method; + + // 주문 번호 + @Column + private String orderNumber; + + // 주문 상태 + @Column + @Enumerated(EnumType.STRING) + private Progress progress; + + @Column + private Boolean payStatus; // 결제 성공 실패 여부 + + @Column + private LocalDateTime estimatedTime; + + @Column + private Long inOut; + + // 가게 아이템 연관 관계 + // @OneToMany(mappedBy = "order") + // @Builder.Default + // private List orderItems = new ArrayList(); + + // 가게 연관 관계 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "store_idx") + private Store store; + + // 유저 연관 관계 + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_idx") + private UserInfo userInfo; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "cart_idx") + private Cart cart; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "coupon_idx") + private Coupon coupon; + + @OneToOne(mappedBy = "order", fetch = FetchType.LAZY) + private Receipt receipt; +} diff --git a/src/main/java/com/readyvery/readyverydemo/domain/OrderItem.java b/src/main/java/com/readyvery/readyverydemo/domain/OrderItem.java new file mode 100644 index 0000000..f33084e --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/domain/OrderItem.java @@ -0,0 +1,51 @@ +package com.readyvery.readyverydemo.domain; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Getter +@Entity +@Builder +@Table(name = "ORDER_ITEM") +@AllArgsConstructor +@NoArgsConstructor +@Slf4j +public class OrderItem { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "order_item_idx") + private Long id; + + @Column + private Long count; + + // @ManyToOne(fetch = FetchType.LAZY) + // @JoinColumn(name = "order_idx") + // private Order order; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "foodie_idx") + private Foodie foodie; + + @OneToMany(mappedBy = "orderItem") + @Builder.Default + private List orderItemOptions = new ArrayList(); + +} + diff --git a/src/main/java/com/readyvery/readyverydemo/domain/CouponMenu.java b/src/main/java/com/readyvery/readyverydemo/domain/OrderItemOption.java similarity index 65% rename from src/main/java/com/readyvery/readyverydemo/domain/CouponMenu.java rename to src/main/java/com/readyvery/readyverydemo/domain/OrderItemOption.java index 7b297c4..928ad0f 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/CouponMenu.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/OrderItemOption.java @@ -1,6 +1,5 @@ package com.readyvery.readyverydemo.domain; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; @@ -19,23 +18,25 @@ @Getter @Entity @Builder -@Table(name = "COUPONMENU") +@Table(name = "ORDER_ITEM_OPTION") @AllArgsConstructor @NoArgsConstructor @Slf4j -public class CouponMenu extends BaseTimeEntity { +public class OrderItemOption { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "coupon_menu_idx") + @Column(name = "order_item_option_idx") private Long id; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "coupon_detail_idx") - private CouponDetail couponDetail; + @JoinColumn(name = "order_item_idx") + private OrderItem orderItem; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "foodie_idx") - private Foodie foodie; + @JoinColumn(name = "foodie_option_idx") + private FoodieOption foodieOption; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "foodie_option_category_idx") + private FoodieOptionCategory foodieOptionCategory; } - diff --git a/src/main/java/com/readyvery/readyverydemo/domain/Progress.java b/src/main/java/com/readyvery/readyverydemo/domain/Progress.java new file mode 100644 index 0000000..ed00d4d --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/domain/Progress.java @@ -0,0 +1,20 @@ +package com.readyvery.readyverydemo.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Progress { + CANCEL("CANCEL", "주문 취소"), + REQUEST("REQUEST", "토스 결제 요청"), + ORDER("ORDER", "주문 접수"), + MAKE("MAKE", "음식 제조 중"), + COMPLETE("COMPLETE", "제조 완료"), + PICKUP("PICKUP", "픽업 완료"), + FAIL("FAIL", "주문 실패"); + + private final String key; + private final String value; +} + diff --git a/src/main/java/com/readyvery/readyverydemo/domain/Receipt.java b/src/main/java/com/readyvery/readyverydemo/domain/Receipt.java new file mode 100644 index 0000000..a666c99 --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/domain/Receipt.java @@ -0,0 +1,117 @@ +package com.readyvery.readyverydemo.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.MapsId; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + +@Getter +@Setter +@Entity +@Builder +@Table(name = "RECEIPT") +@AllArgsConstructor +@NoArgsConstructor +@Slf4j +public class Receipt { + @Id + private Long id; + + @OneToOne(fetch = FetchType.LAZY) + @MapsId + @JoinColumn(name = "order_idx") + private Order order; + + @Column + private String type; + + @Column + private String mid; + + @Column + private String currency; + + @Column + private Long balanceAmount; + + @Column + private Long suppliedAmount; + + @Column + private String status; + + @Column + private String requestedAt; + + @Column + private String approvedAt; + + @Column + private String lastTransactionKey; + + @Column + private Long vat; + + @Column + private Long taxFreeAmount; + + @Column + private Long taxExemptionAmount; + + // @Column(columnDefinition = "json") + @Column + private String cancels; + + // @Column(columnDefinition = "json") + @Column + private String card; + + // @Column(columnDefinition = "json") + @Column + private String receipt; + + // @Column(columnDefinition = "json") + @Column + private String checkout; + + // @Column(columnDefinition = "json") + @Column + private String easyPay; + + @Column + private String country; + + // @Column(columnDefinition = "json") + @Column + private String failure; + + // @Column(columnDefinition = "json") + @Column + private String discount; + + // @Column(columnDefinition = "json") + @Column + private String virtualAccount; + + // @Column(columnDefinition = "json") + @Column + private String transfer; + + // @Column(columnDefinition = "json") + @Column + private String cashReceipt; + + // @Column(columnDefinition = "json") + @Column + private String cashReceipts; +} diff --git a/src/main/java/com/readyvery/readyverydemo/domain/Store.java b/src/main/java/com/readyvery/readyverydemo/domain/Store.java index bea7bb1..c178e9e 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/Store.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/Store.java @@ -59,26 +59,41 @@ public class Store extends BaseTimeEntity { @Column private String adImgUrl; + // 가게 영어 이름 + @Column + private String engName; + + // 가게 이벤트 메세지 + @Column + private String eventMessage; + //가게 등급 @Column @Enumerated(EnumType.STRING) private Grade grade; - // //가게 사장님 연관관계 매핑 + //가게 사장님 연관관계 매핑 @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ceo_idx") private CeoInfo ceoInfo; //가게 메뉴 카테고리 연관관계 매핑 @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) - private List foodieCategories = new ArrayList<>(); + private List foodieCategories = new ArrayList(); + + //가게 메뉴 연관관계 매핑 + // @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + // private List foodies = new ArrayList<>(); //가게 장바구니 연관관계 매핑 @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) - private List carts = new ArrayList<>(); + private List carts = new ArrayList(); + + @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) + private List imgs = new ArrayList(); @OneToMany(mappedBy = "store", cascade = CascadeType.ALL) - private List imgs = new ArrayList<>(); + private List orders = new ArrayList(); public void updateStatus(boolean status) { this.status = status; diff --git a/src/main/java/com/readyvery/readyverydemo/domain/StoreImg.java b/src/main/java/com/readyvery/readyverydemo/domain/StoreImg.java index 7a8cd38..03a0da6 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/StoreImg.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/StoreImg.java @@ -1,8 +1,9 @@ package com.readyvery.readyverydemo.domain; - import jakarta.persistence.Column; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -33,6 +34,10 @@ public class StoreImg { @JoinColumn(name = "store_idx") private Store store; + @Column private String imgUrl; + + @Enumerated(EnumType.STRING) + private ImgSize imgSize; } diff --git a/src/main/java/com/readyvery/readyverydemo/domain/TakeOut.java b/src/main/java/com/readyvery/readyverydemo/domain/TakeOut.java index 2e3c4a9..a265ea3 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/TakeOut.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/TakeOut.java @@ -5,6 +5,7 @@ import jakarta.persistence.FetchType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; +import jakarta.persistence.MapsId; import jakarta.persistence.OneToOne; import jakarta.persistence.Table; import lombok.AccessLevel; @@ -16,14 +17,17 @@ @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity -@Table(name = "TAKE_OUTS") +@Table(name = "TAKE_OUT") @AllArgsConstructor @Slf4j public class TakeOut { - //테이크 아웃 메뉴 연관관계 매핑 @Id + private Long id; + + //테이크 아웃 메뉴 연관관계 매핑 @OneToOne(fetch = FetchType.LAZY) + @MapsId @JoinColumn(name = "foodie_idx") private Foodie foodie; diff --git a/src/main/java/com/readyvery/readyverydemo/domain/UserInfo.java b/src/main/java/com/readyvery/readyverydemo/domain/UserInfo.java index 964df1d..5e37501 100644 --- a/src/main/java/com/readyvery/readyverydemo/domain/UserInfo.java +++ b/src/main/java/com/readyvery/readyverydemo/domain/UserInfo.java @@ -94,6 +94,16 @@ public class UserInfo extends BaseTimeEntity { @OneToMany(mappedBy = "userInfo", cascade = CascadeType.ALL) private List carts = new ArrayList(); + // 유저 주문 연관관계 매핑 + @OneToMany(mappedBy = "userInfo", cascade = CascadeType.ALL) + @Builder.Default + private List orders = new ArrayList(); + + // 유저 쿠폰 연관관계 매핑 + @OneToMany(mappedBy = "userInfo", cascade = CascadeType.ALL) + @Builder.Default + private List coupons = new ArrayList(); + // 리프레시토큰 업데이트 public void updateRefresh(String updateRefreshToken) { this.refreshToken = updateRefreshToken; diff --git a/src/main/java/com/readyvery/readyverydemo/domain/repository/OrderRepository.java b/src/main/java/com/readyvery/readyverydemo/domain/repository/OrderRepository.java new file mode 100644 index 0000000..4bc7192 --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/domain/repository/OrderRepository.java @@ -0,0 +1,14 @@ +package com.readyvery.readyverydemo.domain.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.readyvery.readyverydemo.domain.Order; +import com.readyvery.readyverydemo.domain.Progress; + +public interface OrderRepository extends JpaRepository { + List findAllById(Long id); + + List findAllByProgressAndStoreId(Progress progress, Long storeId); +} diff --git a/src/main/java/com/readyvery/readyverydemo/global/exception/ExceptionCode.java b/src/main/java/com/readyvery/readyverydemo/global/exception/ExceptionCode.java index 61b9563..e4af861 100644 --- a/src/main/java/com/readyvery/readyverydemo/global/exception/ExceptionCode.java +++ b/src/main/java/com/readyvery/readyverydemo/global/exception/ExceptionCode.java @@ -12,7 +12,10 @@ public enum ExceptionCode { INVALID_OPTION(400, "Invalid option."), OPTION_NOT_FOUND(404, "Option does not exists."), CART_ITEM_NOT_FOUND(404, "Cart item does not exists."), - NOT_FOUND_STORE(404, "Not found store."); + NOT_FOUND_STORE(404, "Not found store."), + NOT_LOGIN_USER(401, "Not login user."), + NOT_FOUND_ORDER(404, "Not found order."), + NOT_PROGRESS_ORDER(400, "Not progress order."); private int status; private String message; diff --git a/src/main/java/com/readyvery/readyverydemo/src/order/OrderController.java b/src/main/java/com/readyvery/readyverydemo/src/order/OrderController.java new file mode 100644 index 0000000..162959f --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/src/order/OrderController.java @@ -0,0 +1,27 @@ +package com.readyvery.readyverydemo.src.order; + +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.readyvery.readyverydemo.domain.Progress; +import com.readyvery.readyverydemo.security.jwt.dto.CustomUserDetails; +import com.readyvery.readyverydemo.src.order.dto.OrderRegisterRes; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1") +public class OrderController { + + private final OrderService orderServiceImpl; + + @GetMapping("/order") + public OrderRegisterRes getOrder(@AuthenticationPrincipal CustomUserDetails userDetails, + @RequestParam(required = false) Progress status) { + return orderServiceImpl.getOrder(userDetails.getId(), status); + } +} diff --git a/src/main/java/com/readyvery/readyverydemo/src/order/OrderService.java b/src/main/java/com/readyvery/readyverydemo/src/order/OrderService.java new file mode 100644 index 0000000..5c936fa --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/src/order/OrderService.java @@ -0,0 +1,9 @@ +package com.readyvery.readyverydemo.src.order; + +import com.readyvery.readyverydemo.domain.Progress; +import com.readyvery.readyverydemo.src.order.dto.OrderRegisterRes; + +public interface OrderService { + + OrderRegisterRes getOrder(Long id, Progress progress); +} diff --git a/src/main/java/com/readyvery/readyverydemo/src/order/OrderServiceImpl.java b/src/main/java/com/readyvery/readyverydemo/src/order/OrderServiceImpl.java new file mode 100644 index 0000000..65eba71 --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/src/order/OrderServiceImpl.java @@ -0,0 +1,51 @@ +package com.readyvery.readyverydemo.src.order; + +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.readyvery.readyverydemo.domain.CeoInfo; +import com.readyvery.readyverydemo.domain.Order; +import com.readyvery.readyverydemo.domain.Progress; +import com.readyvery.readyverydemo.domain.repository.CeoRepository; +import com.readyvery.readyverydemo.domain.repository.OrderRepository; +import com.readyvery.readyverydemo.global.exception.BusinessLogicException; +import com.readyvery.readyverydemo.global.exception.ExceptionCode; +import com.readyvery.readyverydemo.src.order.dto.OrderMapper; +import com.readyvery.readyverydemo.src.order.dto.OrderRegisterRes; + +import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +@Service +@RequiredArgsConstructor +public class OrderServiceImpl implements OrderService { + + private final OrderRepository orderRepository; + private final OrderMapper orderMapper; + private final CeoRepository ceoRepository; + + @Override + public OrderRegisterRes getOrder(Long id, Progress progress) { + CeoInfo ceoInfo = getCeoInfo(id); + + if (progress == null) { + throw new BusinessLogicException(ExceptionCode.NOT_PROGRESS_ORDER); + } + + List orders = orderRepository.findAllByProgressAndStoreId(progress, ceoInfo.getStore().getId()); + log.info("progress: {}", orders); + if (orders.isEmpty()) { + throw new BusinessLogicException(ExceptionCode.NOT_FOUND_ORDER); + } + return orderMapper.orderToOrderRegisterRes(orders); + } + + private CeoInfo getCeoInfo(Long id) { + return ceoRepository.findById(id).orElseThrow( + () -> new BusinessLogicException(ExceptionCode.USER_NOT_FOUND) + ); + } + +} diff --git a/src/main/java/com/readyvery/readyverydemo/src/order/dto/FoodieDto.java b/src/main/java/com/readyvery/readyverydemo/src/order/dto/FoodieDto.java new file mode 100644 index 0000000..da81991 --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/src/order/dto/FoodieDto.java @@ -0,0 +1,14 @@ +package com.readyvery.readyverydemo.src.order.dto; + +import java.util.List; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class FoodieDto { + private String name; + private Long count; + private List options; +} diff --git a/src/main/java/com/readyvery/readyverydemo/src/order/dto/OrderDto.java b/src/main/java/com/readyvery/readyverydemo/src/order/dto/OrderDto.java new file mode 100644 index 0000000..7045f99 --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/src/order/dto/OrderDto.java @@ -0,0 +1,19 @@ +package com.readyvery.readyverydemo.src.order.dto; + +import java.time.LocalDateTime; +import java.util.List; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class OrderDto { + private Long idx; + private String orderNum; + private Long pickUp; + private List foodies; + private String phone; + private LocalDateTime time; + private Long price; +} diff --git a/src/main/java/com/readyvery/readyverydemo/src/order/dto/OrderMapper.java b/src/main/java/com/readyvery/readyverydemo/src/order/dto/OrderMapper.java new file mode 100644 index 0000000..c2333bf --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/src/order/dto/OrderMapper.java @@ -0,0 +1,44 @@ +package com.readyvery.readyverydemo.src.order.dto; + +import java.util.List; + +import org.springframework.stereotype.Component; + +import com.readyvery.readyverydemo.domain.CartItem; +import com.readyvery.readyverydemo.domain.Order; + +@Component +public class OrderMapper { + + public OrderRegisterRes orderToOrderRegisterRes(List order) { + if (order.isEmpty()) { + return OrderRegisterRes.builder() + .build(); + } + return OrderRegisterRes.builder() + .orders(order.stream().map(this::toOrderDto).toList()) + .build(); + } + + private OrderDto toOrderDto(Order order) { + return OrderDto.builder() + .idx(order.getId()) + .orderNum(order.getOrderId()) + .pickUp(order.getInOut()) + .time(order.getCreatedAt()) + .phone(order.getUserInfo().getPhone()) + .price(order.getAmount()) + .foodies(order.getCart().getCartItems().stream().map(this::cartItemToFoodieDto).toList()) + .build(); + + } + + private FoodieDto cartItemToFoodieDto(CartItem cartItem) { + return FoodieDto.builder() + .name(cartItem.getFoodie().getName()) + .count(cartItem.getCount()) + .options( + cartItem.getCartOptions().stream().map(cartOption -> cartOption.getFoodieOption().getName()).toList()) + .build(); + } +} diff --git a/src/main/java/com/readyvery/readyverydemo/src/order/dto/OrderRegisterRes.java b/src/main/java/com/readyvery/readyverydemo/src/order/dto/OrderRegisterRes.java new file mode 100644 index 0000000..d6a3708 --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/src/order/dto/OrderRegisterRes.java @@ -0,0 +1,13 @@ +package com.readyvery.readyverydemo.src.order.dto; + +import java.util.List; + +import lombok.Builder; +import lombok.Getter; + +@Getter +@Builder +public class OrderRegisterRes { + + private List orders; +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a28ff5b..00ad665 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,6 +1,9 @@ -spring.datasource.url=jdbc:mysql://localhost:3306/readyvery -spring.datasource.username=root -spring.datasource.password=12345678 +#spring.datasource.url=jdbc:mysql://localhost:3306/readyvery +#spring.datasource.username=root +#spring.datasource.password=12345678 +spring.datasource.url=jdbc:mysql://test.readyvery.com:33306/readyvery +spring.datasource.username=ready +spring.datasource.password=readyverytestuser23! spring.jpa.hibernate.ddl-auto=update spring.jpa.generate-ddl=true spring.jackson.serialization.fail-on-empty-beans=false