Skip to content
Open
Show file tree
Hide file tree
Changes from 7 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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
.DS_Store

.*env
.env*
HELP.md
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package kr.co.knuserver.application.pubOrder;

import java.util.ArrayList;
import java.util.List;
import kr.co.knuserver.application.pubMenu.PubMenuQueryService;
import kr.co.knuserver.application.pubTableSession.PubTableSessionQueryService;
import kr.co.knuserver.domain.pubMenu.entity.PubMenu;
import kr.co.knuserver.domain.pubOrder.entity.PubOrder;
import kr.co.knuserver.domain.pubOrder.repository.PubOrderRepository;
import kr.co.knuserver.domain.pubTableSession.entity.PubTableSession;
import kr.co.knuserver.presentation.pubOrder.dto.OrderMenus;
import kr.co.knuserver.presentation.pubOrder.dto.OrderedMenus;
import kr.co.knuserver.presentation.pubOrder.dto.PubOrderRequestDto;
import kr.co.knuserver.presentation.pubOrder.dto.PubOrderResponseDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
@Transactional
public class PubOrderCommandService {

private final PubOrderRepository pubOrderRepository;
private final PubOrderQueryService pubOrderQueryService;
private final PubTableSessionQueryService pubTableSessionQueryService;
private final PubMenuQueryService pubMenuQueryService;

public PubOrderResponseDto createOrder(PubOrderRequestDto request) {
PubTableSession pubTableSession = pubTableSessionQueryService.getPubTableSessionById(request.pubTableSessionId());

List<PubOrder> pubOrders = new ArrayList<>();
for (OrderMenus orderMenus : request.orderMenus()) {
pubOrders.add(PubOrder.createPubOrder(pubTableSession.getId(), orderMenus.menuId(), orderMenus.quantity()));
}
List<PubOrder> savedPubOrders = pubOrderRepository.saveAll(pubOrders);
List<OrderedMenus> orderedMenus = savedPubOrders.stream().map((pubOrder -> {
PubMenu pubMenu = pubMenuQueryService.findPubMenuById(pubOrder.getPubMenuId());
return OrderedMenus.fromEntity(pubOrder, pubMenu);
})).toList();
return PubOrderResponseDto.fromEntity(request.pubTableSessionId(), orderedMenus);
}

public void deleteOrder(Long pubOrderId) {
PubOrder pubOrder = pubOrderQueryService.findByOrderId(pubOrderId);
pubOrderRepository.delete(pubOrder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package kr.co.knuserver.application.pubOrder;

import java.util.List;
import kr.co.knuserver.application.pubMenu.PubMenuQueryService;
import kr.co.knuserver.domain.pubMenu.entity.PubMenu;
import kr.co.knuserver.domain.pubOrder.entity.PubOrder;
import kr.co.knuserver.domain.pubOrder.repository.PubOrderRepository;
import kr.co.knuserver.global.exception.BusinessErrorCode;
import kr.co.knuserver.global.exception.BusinessException;
import kr.co.knuserver.presentation.pubOrder.dto.OrderedMenus;
import kr.co.knuserver.presentation.pubOrder.dto.PubOrderResponseDto;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
public class PubOrderQueryService {

private final PubOrderRepository pubOrderRepository;
private final PubMenuQueryService pubMenuQueryService;

public PubOrder findByOrderId(Long orderId) {
return pubOrderRepository.findById(orderId).orElseThrow(() -> new BusinessException(BusinessErrorCode.PUB_ORDER_NOT_FOUND));
}

public PubOrderResponseDto getAllByPubTableSessionId(Long pubTableSessionId) {
List<PubOrder> pubOrderList = pubOrderRepository.findAllByPubTableSessionId(pubTableSessionId);
List<OrderedMenus> orderedMenus = pubOrderList.stream().map((pubOrder -> {
PubMenu pubMenu = pubMenuQueryService.findPubMenuById(pubOrder.getPubMenuId());
return OrderedMenus.fromEntity(pubOrder, pubMenu);
})).toList();
return PubOrderResponseDto.fromEntity(pubTableSessionId, orderedMenus);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kr.co.knuserver.domain.pubTableSession.entity;
package kr.co.knuserver.domain.pubOrder.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand All @@ -21,7 +21,7 @@
public class PubOrder {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "pub_table_id")
@Column(name = "pub_order_id")
private Long id;

@Column(name = "pub_table_session_id", nullable = false)
Expand All @@ -30,10 +30,14 @@ public class PubOrder {
@Column(name = "pub_menu_id", nullable = false)
private Long pubMenuId;

public static PubOrder createPubOrder(Long pubSessionId, Long pubMenuId) {
@Column(name = "quantity", nullable = false)
private Integer quantity;

public static PubOrder createPubOrder(Long pubSessionId, Long pubMenuId, Integer quantity) {
return PubOrder.builder()
.pubTableSessionId(pubSessionId)
.pubMenuId(pubMenuId)
.quantity(quantity)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package kr.co.knuserver.domain.pubOrder.repository;

import java.util.List;
import kr.co.knuserver.domain.pubOrder.entity.PubOrder;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PubOrderRepository extends JpaRepository<PubOrder, Long> {
List<PubOrder> findAllByPubTableSessionId(Long pubTableSessionId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public enum BusinessErrorCode implements ErrorCode {
*/
PUB_BOOTH_NOT_FOUND(HttpStatus.NOT_FOUND, "C301", "해당 주점을 찾을 수 없습니다."),
PUB_MENU_NOT_FOUND(HttpStatus.NOT_FOUND, "C302", "해당 주점 메뉴를 찾을 수 없습니다."),
PUB_ORDER_NOT_FOUND(HttpStatus.NOT_FOUND, "C206", "해당 주문을 찾을 수 없습니다."),

/*
* 405 METHOD_NOT_ALLOWED: 허용되지 않은 Request Method 호출
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package kr.co.knuserver.presentation.pubOrder.controller;

import jakarta.validation.Valid;
import kr.co.knuserver.application.pubOrder.PubOrderCommandService;
import kr.co.knuserver.presentation.pubOrder.dto.PubOrderRequestDto;
import kr.co.knuserver.presentation.pubOrder.dto.PubOrderResponseDto;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
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("/admin/v1/pubOrder")
@RequiredArgsConstructor
public class PubOrderCommandController {

private final PubOrderCommandService pubOrderCommandService;

@PostMapping
public ResponseEntity<PubOrderResponseDto> createOrder(@Valid @RequestBody PubOrderRequestDto request) {
return ResponseEntity.ok().body(pubOrderCommandService.createOrder(request));
}

@DeleteMapping("/{pubOrderId}")
public ResponseEntity<Void> deleteOrder(@PathVariable("pubOrderId") Long pubOrderId) {
pubOrderCommandService.deleteOrder(pubOrderId);
return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package kr.co.knuserver.presentation.pubOrder.controller;

import kr.co.knuserver.application.pubOrder.PubOrderQueryService;
import kr.co.knuserver.presentation.pubOrder.dto.PubOrderResponseDto;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/admin/v1/pubOrder")
@RequiredArgsConstructor
public class PubOrderQueryController {

private final PubOrderQueryService pubOrderQueryService;

@GetMapping("/{pubTableSessionId}")
public ResponseEntity<PubOrderResponseDto> getAllByPubTableSessionId(@PathVariable("pubTableSessionId") Long pubTableSessionId) {
return ResponseEntity.ok(pubOrderQueryService.getAllByPubTableSessionId(pubTableSessionId));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package kr.co.knuserver.presentation.pubOrder.dto;

import jakarta.validation.constraints.NotNull;

public record OrderMenus(
@NotNull Long menuId,
@NotNull Integer quantity
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package kr.co.knuserver.presentation.pubOrder.dto;

import kr.co.knuserver.domain.pubMenu.entity.PubMenu;
import kr.co.knuserver.domain.pubOrder.entity.PubOrder;
import lombok.Builder;

@Builder
public record OrderedMenus(
Long orderId,
Long menuId,
String name,
int price,
Integer quantity
) {
public static OrderedMenus fromEntity(PubOrder pubOrder, PubMenu pubMenu) {
return OrderedMenus.builder()
.orderId(pubOrder.getId())
.menuId(pubMenu.getId())
.name(pubMenu.getName())
.price(pubMenu.getPrice())
.quantity(pubOrder.getQuantity())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package kr.co.knuserver.presentation.pubOrder.dto;

import jakarta.validation.constraints.NotNull;
import java.util.List;

public record PubOrderRequestDto(
@NotNull Long pubTableSessionId,
@NotNull List<OrderMenus> orderMenus
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package kr.co.knuserver.presentation.pubOrder.dto;

import jakarta.validation.constraints.NotNull;
import java.util.List;
import kr.co.knuserver.domain.pubOrder.entity.PubOrder;
import lombok.Builder;

@Builder
public record PubOrderResponseDto(
@NotNull Long pubTableSessionId,
@NotNull List<OrderedMenus> orderedMenus
) {
public static PubOrderResponseDto fromEntity(Long pubTableSessionId, List<OrderedMenus> orderedMenus) {
return PubOrderResponseDto.builder()
.pubTableSessionId(pubTableSessionId)
.orderedMenus(orderedMenus)
.build();
}
}
Loading