Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
77 changes: 77 additions & 0 deletions src/main/java/kr/mayb/controller/OrderController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package kr.mayb.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import kr.mayb.dto.OrderInfo;
import kr.mayb.dto.OrderRequest;
import kr.mayb.dto.ProductSimple;
import kr.mayb.enums.PaymentStatus;
import kr.mayb.facade.OrderFacade;
import kr.mayb.security.DenyAll;
import kr.mayb.security.PermitAdmin;
import kr.mayb.security.PermitAuthenticated;
import kr.mayb.util.request.PageRequest;
import kr.mayb.util.response.ApiResponse;
import kr.mayb.util.response.PageResponse;
import kr.mayb.util.response.Responses;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Tag(name = "Order", description = "주문 관련 API")
@DenyAll
@RestController
@RequiredArgsConstructor
public class OrderController {

private final OrderFacade orderFacade;

@Operation(summary = "주문하기")
@PermitAuthenticated
@PostMapping("/orders")
public ResponseEntity<ApiResponse<OrderInfo>> makeOrder(@RequestBody OrderRequest request) {
OrderInfo response = orderFacade.makeOrder(request);
return Responses.ok(response);
}

@Operation(summary = "내 주문 목록 조회")
@PermitAuthenticated
@GetMapping("/orders/me")
public ResponseEntity<ApiResponse<PageResponse<OrderInfo, Void>>> getMyOrders(PageRequest pageRequest) {
PageResponse<OrderInfo, Void> response = orderFacade.getMyOrders(pageRequest);
return Responses.ok(response);
}

@Operation(summary = "관리자 전체 주문 목록 조회")
@PermitAdmin
@GetMapping("/orders")
public ResponseEntity<ApiResponse<PageResponse<OrderInfo, List<ProductSimple>>>> getOrders(
@RequestParam(value = "pid", required = false) Long productId,
@RequestParam(value = "p_status", required = false) PaymentStatus paymentStatus,
PageRequest pageRequest
) {
var response = orderFacade.getOrders(productId, paymentStatus, pageRequest);
return Responses.ok(response);
}

@Operation(summary = "관리자 결제 상태 변경")
@PermitAdmin
@PatchMapping("orders/{orderId}/members/{memberId}/payment-status")
public ResponseEntity<ApiResponse<OrderInfo>> updatePaymentStatus(@PathVariable long orderId,
@PathVariable long memberId,
@RequestBody @Valid OrderController.PaymentStatusUpdateRequest request) {
OrderInfo response = orderFacade.updatePaymentStatus(orderId, memberId, request.status());
return Responses.ok(response);

}

private record PaymentStatusUpdateRequest(
@NotNull
PaymentStatus status
) {
}
}
2 changes: 2 additions & 0 deletions src/main/java/kr/mayb/controller/SecurityController.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package kr.mayb.controller;

import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.tags.Tag;
import kr.mayb.security.DenyAll;
import kr.mayb.security.PermitAll;
import kr.mayb.security.PermitAuthenticated;
Expand All @@ -10,6 +11,7 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "Security", description = "security 관련 Test API. Swagger 에 표시 안됨")
@Hidden
@DenyAll
@RestController
Expand Down
44 changes: 44 additions & 0 deletions src/main/java/kr/mayb/data/model/Order.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package kr.mayb.data.model;

import jakarta.persistence.*;
import kr.mayb.enums.PaymentMethod;
import kr.mayb.enums.PaymentStatus;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Table(schema = "mayb")
@Entity
public class Order extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column
private int totalPrice;

@Column
@Enumerated(EnumType.STRING)
private PaymentMethod paymentMethod;

@Column
@Enumerated(EnumType.STRING)
private PaymentStatus paymentStatus;

@Column(nullable = false)
private long productId;

@Column
private long productGenderPriceId;

@Column
private long productScheduleId;

@Column(nullable = false)
private long memberId;

@Column(nullable = false)
private boolean hasReviewed;
}
11 changes: 5 additions & 6 deletions src/main/java/kr/mayb/data/model/Product.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class Product extends BaseEntity {
private int originalPrice;

@Column
private int salePrice;
private int discountPrice;

@Column
private String profileImageUrl;
Expand All @@ -48,15 +48,14 @@ public class Product extends BaseEntity {
@Enumerated(EnumType.STRING)
private ProductStatus status;

@BatchSize(size = 20)
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL)
private List<ProductTag> productTags = new ArrayList<>();
@Column
private String tags;

@BatchSize(size = 20)
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL)
private List<ProductGender> productGenders = new ArrayList<>();
private List<ProductGenderPrice> productGenderPrices = new ArrayList<>();

@BatchSize(size = 20)
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL)
private List<ProductDateTime> productDateTimes = new ArrayList<>();
private List<ProductSchedule> productSchedules = new ArrayList<>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
@Setter
@Table(schema = "mayb")
@Entity
public class ProductGender extends BaseEntity {
public class ProductGenderPrice extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
@Setter
@Table(schema = "mayb")
@Entity
public class ProductDateTime extends BaseEntity {
public class ProductSchedule extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(nullable = false)
private LocalDateTime dateTime;
private LocalDateTime timeSlot;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id", nullable = false)
Expand Down
23 changes: 0 additions & 23 deletions src/main/java/kr/mayb/data/model/ProductTag.java

This file was deleted.

5 changes: 4 additions & 1 deletion src/main/java/kr/mayb/data/repository/MemberRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@
import kr.mayb.data.model.Member;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

public interface MemberRepository extends JpaRepository<Member, Long> {

boolean existsByEmail(String email);

Optional<Member> findByEmail(String email);

List<Member> findAllByIdIn(Collection<Long> memberIds);
}
15 changes: 15 additions & 0 deletions src/main/java/kr/mayb/data/repository/OrderRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package kr.mayb.data.repository;

import kr.mayb.data.model.Order;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;

import java.util.Optional;

public interface OrderRepository extends JpaRepository<Order, Long>, JpaSpecificationExecutor<Order> {
Page<Order> findAllByMemberId(long memberId, Pageable pageable);

Optional<Order> findByIdAndMemberId(long orderId, long memberId);
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package kr.mayb.data.repository;

import kr.mayb.data.model.Product;
import kr.mayb.data.model.ProductGenderPrice;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

public interface ProductGenderPriceRepository extends JpaRepository<ProductGenderPrice, Long> {
void deleteByProduct(Product product);

Optional<ProductGenderPrice> findByIdAndProduct(long id, Product product);

List<ProductGenderPrice> findAllByIdIn(Collection<Long> priceIds);
}

This file was deleted.

4 changes: 4 additions & 0 deletions src/main/java/kr/mayb/data/repository/ProductRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,9 @@
import kr.mayb.data.model.Product;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Collection;
import java.util.List;

public interface ProductRepository extends JpaRepository<Product, Long> {
List<Product> findAllByIdIn(Collection<Long> productIds);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package kr.mayb.data.repository;

import kr.mayb.data.model.Product;
import kr.mayb.data.model.ProductSchedule;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Collection;
import java.util.List;
import java.util.Optional;

public interface ProductScheduleRepository extends JpaRepository<ProductSchedule, Long> {
void deleteByProduct(Product product);

Optional<ProductSchedule> findByIdAndProduct(long id, Product product);

List<ProductSchedule> findAllByIdIn(Collection<Long> scheduleIds);
}
10 changes: 0 additions & 10 deletions src/main/java/kr/mayb/data/repository/ProductTagRepository.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package kr.mayb.data.repository.specification;

import kr.mayb.data.model.Order;
import kr.mayb.enums.PaymentStatus;
import org.springframework.data.jpa.domain.Specification;

public class OrderSpecification {

public static Specification<Order> withProductId(Long productId) {
return (root, query, criteriaBuilder) ->
productId != null ? criteriaBuilder.equal(root.get("productId"), productId) : criteriaBuilder.conjunction();
}

public static Specification<Order> withPaymentStatus(PaymentStatus paymentStatus) {
return (root, query, criteriaBuilder) ->
paymentStatus != null ? criteriaBuilder.equal(root.get("paymentStatus"), paymentStatus) : criteriaBuilder.conjunction();
}
}
14 changes: 0 additions & 14 deletions src/main/java/kr/mayb/dto/DateTimeInfo.java

This file was deleted.

7 changes: 4 additions & 3 deletions src/main/java/kr/mayb/dto/GenderPrice.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package kr.mayb.dto;

import jakarta.validation.constraints.NotBlank;
import kr.mayb.data.model.ProductGender;
import kr.mayb.data.model.ProductGenderPrice;

public record GenderPrice(
long priceId,
@NotBlank
String gender,
int price
) {
public static GenderPrice of(ProductGender gender) {
return new GenderPrice(gender.getGender(), gender.getPrice());
public static GenderPrice of(ProductGenderPrice gender) {
return new GenderPrice(gender.getId(), gender.getGender(), gender.getPrice());
}
}
Loading
Loading