From a789f31804bcdb7f3b7ff8544cbe1c6080e7e829 Mon Sep 17 00:00:00 2001 From: summit45 Date: Sat, 11 Nov 2023 11:20:53 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=EC=B9=B4=ED=85=8C=EA=B3=A0?= =?UTF-8?q?=EB=A6=AC=20=EB=93=B1=EB=A1=9D=20api=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kusitms/jipbap/food/FoodController.java | 10 +++++++++- .../com/kusitms/jipbap/food/FoodService.java | 11 +++++++++++ .../com/kusitms/jipbap/food/dto/CategoryDto.java | 16 ++++++++++++++++ .../food/dto/RegisterCategoryRequestDto.java | 11 +++++++++++ .../kusitms/jipbap/store/StoreController.java | 4 +++- .../store/dto/RegisterStoreRequestDto.java | 4 ++-- 6 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/kusitms/jipbap/food/dto/CategoryDto.java create mode 100644 src/main/java/com/kusitms/jipbap/food/dto/RegisterCategoryRequestDto.java diff --git a/src/main/java/com/kusitms/jipbap/food/FoodController.java b/src/main/java/com/kusitms/jipbap/food/FoodController.java index acb7c4c..e70bf72 100644 --- a/src/main/java/com/kusitms/jipbap/food/FoodController.java +++ b/src/main/java/com/kusitms/jipbap/food/FoodController.java @@ -1,13 +1,16 @@ package com.kusitms.jipbap.food; import com.kusitms.jipbap.common.response.CommonResponse; +import com.kusitms.jipbap.food.dto.CategoryDto; import com.kusitms.jipbap.food.dto.FoodDto; +import com.kusitms.jipbap.food.dto.RegisterCategoryRequestDto; import com.kusitms.jipbap.food.dto.RegisterFoodRequestDto; import com.kusitms.jipbap.security.Auth; import com.kusitms.jipbap.security.AuthInfo; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; 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; @@ -20,8 +23,13 @@ public class FoodController { @Operation(summary = "음식 등록하기") @PostMapping - public CommonResponse registerFood(@Auth AuthInfo authInfo, RegisterFoodRequestDto dto) { + public CommonResponse registerFood(@Auth AuthInfo authInfo, @RequestBody RegisterFoodRequestDto dto) { return new CommonResponse<>(foodService.registerFood(authInfo.getEmail(), dto)); } + @Operation(summary = "카테고리 등록하기") + @PostMapping("/category") + public CommonResponse registerCategory(@RequestBody RegisterCategoryRequestDto dto) { + return new CommonResponse<>(foodService.registerCategory(dto)); + } } diff --git a/src/main/java/com/kusitms/jipbap/food/FoodService.java b/src/main/java/com/kusitms/jipbap/food/FoodService.java index 4cec56a..da5192a 100644 --- a/src/main/java/com/kusitms/jipbap/food/FoodService.java +++ b/src/main/java/com/kusitms/jipbap/food/FoodService.java @@ -1,6 +1,8 @@ package com.kusitms.jipbap.food; +import com.kusitms.jipbap.food.dto.CategoryDto; import com.kusitms.jipbap.food.dto.FoodDto; +import com.kusitms.jipbap.food.dto.RegisterCategoryRequestDto; import com.kusitms.jipbap.food.dto.RegisterFoodRequestDto; import com.kusitms.jipbap.food.exception.CategoryNotExistsException; import com.kusitms.jipbap.store.Store; @@ -35,4 +37,13 @@ public FoodDto registerFood(String email, RegisterFoodRequestDto dto) { ); return new FoodDto(food.getId(), store.getId(), category.getId(), food.getName(), food.getPrice(), food.getDescription()); } + + @Transactional + public CategoryDto registerCategory(RegisterCategoryRequestDto dto) { + System.out.println(dto.getName()); + Category category = categoryRepository.save( + new Category(null, dto.getName(), dto.getImage()) + ); + return new CategoryDto(category.getId(), category.getName(), category.getImage()); + } } diff --git a/src/main/java/com/kusitms/jipbap/food/dto/CategoryDto.java b/src/main/java/com/kusitms/jipbap/food/dto/CategoryDto.java new file mode 100644 index 0000000..82ae499 --- /dev/null +++ b/src/main/java/com/kusitms/jipbap/food/dto/CategoryDto.java @@ -0,0 +1,16 @@ +package com.kusitms.jipbap.food.dto; + +import jakarta.persistence.Column; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +public class CategoryDto { + + private Long id; + private String name; + private String image; +} diff --git a/src/main/java/com/kusitms/jipbap/food/dto/RegisterCategoryRequestDto.java b/src/main/java/com/kusitms/jipbap/food/dto/RegisterCategoryRequestDto.java new file mode 100644 index 0000000..1a8c906 --- /dev/null +++ b/src/main/java/com/kusitms/jipbap/food/dto/RegisterCategoryRequestDto.java @@ -0,0 +1,11 @@ +package com.kusitms.jipbap.food.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class RegisterCategoryRequestDto { + private String name; + private String image; +} diff --git a/src/main/java/com/kusitms/jipbap/store/StoreController.java b/src/main/java/com/kusitms/jipbap/store/StoreController.java index 7d6ce0a..0c767c0 100644 --- a/src/main/java/com/kusitms/jipbap/store/StoreController.java +++ b/src/main/java/com/kusitms/jipbap/store/StoreController.java @@ -12,6 +12,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; +import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -26,7 +27,8 @@ public class StoreController { @Operation(summary = "가게 등록하기") @PostMapping - public CommonResponse registerStore(@Auth AuthInfo authInfo, @Valid @RequestBody RegisterStoreRequestDto dto) { + @ResponseStatus(HttpStatus.CREATED) + public CommonResponse registerStore(@Auth AuthInfo authInfo, @Valid @RequestBody RegisterStoreRequestDto dto){ return new CommonResponse<>(storeService.registerStore(authInfo.getEmail(), dto)); } diff --git a/src/main/java/com/kusitms/jipbap/store/dto/RegisterStoreRequestDto.java b/src/main/java/com/kusitms/jipbap/store/dto/RegisterStoreRequestDto.java index 192a44d..ca6b1f7 100644 --- a/src/main/java/com/kusitms/jipbap/store/dto/RegisterStoreRequestDto.java +++ b/src/main/java/com/kusitms/jipbap/store/dto/RegisterStoreRequestDto.java @@ -1,10 +1,10 @@ package com.kusitms.jipbap.store.dto; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Getter @Setter +@AllArgsConstructor public class RegisterStoreRequestDto { private String name; From aa2e819634dbc50da7545c941e521ab8107562d6 Mon Sep 17 00:00:00 2001 From: summit45 Date: Sat, 11 Nov 2023 11:34:07 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=EC=9D=8C=EC=8B=9D(=EB=A9=94?= =?UTF-8?q?=EB=89=B4)=20=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20api=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jipbap/common/response/ErrorCode.java | 3 ++- .../kusitms/jipbap/food/FoodController.java | 25 ++++++++++++------- .../jipbap/food/FoodExceptionHandler.java | 8 ++++++ .../com/kusitms/jipbap/food/FoodService.java | 20 +++++++++------ .../exception/FoodNotExistsException.java | 7 ++++++ 5 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/kusitms/jipbap/food/exception/FoodNotExistsException.java diff --git a/src/main/java/com/kusitms/jipbap/common/response/ErrorCode.java b/src/main/java/com/kusitms/jipbap/common/response/ErrorCode.java index a1909a8..30ac8f1 100644 --- a/src/main/java/com/kusitms/jipbap/common/response/ErrorCode.java +++ b/src/main/java/com/kusitms/jipbap/common/response/ErrorCode.java @@ -32,7 +32,8 @@ public enum ErrorCode { STORE_ALREADY_EXISTS_ERROR(false, HttpStatus.BAD_REQUEST.value(), "이미 존재하는 가게입니다."), //food - CATEGORY_NOT_FOUND_ERROR(false, HttpStatus.BAD_REQUEST.value(), "존재하지 않는 카테고리입니다.") + CATEGORY_NOT_FOUND_ERROR(false, HttpStatus.BAD_REQUEST.value(), "존재하지 않는 카테고리입니다."), + FOOD_NOT_FOUND_ERROR(false, HttpStatus.BAD_REQUEST.value(), "존재하지 않는 메뉴입니다."), ; private Boolean isSuccess; diff --git a/src/main/java/com/kusitms/jipbap/food/FoodController.java b/src/main/java/com/kusitms/jipbap/food/FoodController.java index e70bf72..df363d2 100644 --- a/src/main/java/com/kusitms/jipbap/food/FoodController.java +++ b/src/main/java/com/kusitms/jipbap/food/FoodController.java @@ -9,10 +9,8 @@ import com.kusitms.jipbap.security.AuthInfo; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; -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; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/food") @@ -21,15 +19,24 @@ public class FoodController { private final FoodService foodService; - @Operation(summary = "음식 등록하기") + @Operation(summary = "카테고리 등록하기") + @PostMapping("/category") + @ResponseStatus(HttpStatus.CREATED) + public CommonResponse registerCategory(@RequestBody RegisterCategoryRequestDto dto) { + return new CommonResponse<>(foodService.registerCategory(dto)); + } + + @Operation(summary = "메뉴 등록하기") @PostMapping + @ResponseStatus(HttpStatus.CREATED) public CommonResponse registerFood(@Auth AuthInfo authInfo, @RequestBody RegisterFoodRequestDto dto) { return new CommonResponse<>(foodService.registerFood(authInfo.getEmail(), dto)); } - @Operation(summary = "카테고리 등록하기") - @PostMapping("/category") - public CommonResponse registerCategory(@RequestBody RegisterCategoryRequestDto dto) { - return new CommonResponse<>(foodService.registerCategory(dto)); + @Operation(summary = "메뉴 하나 상세조회") + @GetMapping("/{foodId}") + @ResponseStatus(HttpStatus.OK) + public CommonResponse getFoodDetail(@PathVariable Long foodId) { + return new CommonResponse<>(foodService.getFoodDetail(foodId)); } } diff --git a/src/main/java/com/kusitms/jipbap/food/FoodExceptionHandler.java b/src/main/java/com/kusitms/jipbap/food/FoodExceptionHandler.java index 6489194..f74daf8 100644 --- a/src/main/java/com/kusitms/jipbap/food/FoodExceptionHandler.java +++ b/src/main/java/com/kusitms/jipbap/food/FoodExceptionHandler.java @@ -3,6 +3,7 @@ import com.kusitms.jipbap.common.response.CommonResponse; import com.kusitms.jipbap.common.response.ErrorCode; import com.kusitms.jipbap.food.exception.CategoryNotExistsException; +import com.kusitms.jipbap.food.exception.FoodNotExistsException; import com.kusitms.jipbap.store.exception.StoreExistsException; import com.kusitms.jipbap.store.exception.StoreNotExistsException; import jakarta.servlet.http.HttpServletRequest; @@ -22,4 +23,11 @@ public CommonResponse handleCategoryNotExistsException(CategoryNotExistsExcep return new CommonResponse<>(ErrorCode.CATEGORY_NOT_FOUND_ERROR); } + @ExceptionHandler(FoodNotExistsException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public CommonResponse handelFoodNotExistsException(FoodNotExistsException e, HttpServletRequest request) { + log.warn("FOOD-002> 요청 URI: " + request.getRequestURI() + ", 에러 메세지: " + e.getMessage()); + return new CommonResponse<>(ErrorCode.FOOD_NOT_FOUND_ERROR); + } + } diff --git a/src/main/java/com/kusitms/jipbap/food/FoodService.java b/src/main/java/com/kusitms/jipbap/food/FoodService.java index da5192a..b885d02 100644 --- a/src/main/java/com/kusitms/jipbap/food/FoodService.java +++ b/src/main/java/com/kusitms/jipbap/food/FoodService.java @@ -5,6 +5,7 @@ import com.kusitms.jipbap.food.dto.RegisterCategoryRequestDto; import com.kusitms.jipbap.food.dto.RegisterFoodRequestDto; import com.kusitms.jipbap.food.exception.CategoryNotExistsException; +import com.kusitms.jipbap.food.exception.FoodNotExistsException; import com.kusitms.jipbap.store.Store; import com.kusitms.jipbap.store.StoreRepository; import com.kusitms.jipbap.store.exception.StoreNotExistsException; @@ -26,6 +27,15 @@ public class FoodService { private final FoodRepository foodRepository; private final CategoryRepository categoryRepository; + @Transactional + public CategoryDto registerCategory(RegisterCategoryRequestDto dto) { + System.out.println(dto.getName()); + Category category = categoryRepository.save( + new Category(null, dto.getName(), dto.getImage()) + ); + return new CategoryDto(category.getId(), category.getName(), category.getImage()); + } + @Transactional public FoodDto registerFood(String email, RegisterFoodRequestDto dto) { userRepository.findByEmail(email).orElseThrow(()-> new UserNotFoundException("유저 정보가 존재하지 않습니다.")); @@ -38,12 +48,8 @@ public FoodDto registerFood(String email, RegisterFoodRequestDto dto) { return new FoodDto(food.getId(), store.getId(), category.getId(), food.getName(), food.getPrice(), food.getDescription()); } - @Transactional - public CategoryDto registerCategory(RegisterCategoryRequestDto dto) { - System.out.println(dto.getName()); - Category category = categoryRepository.save( - new Category(null, dto.getName(), dto.getImage()) - ); - return new CategoryDto(category.getId(), category.getName(), category.getImage()); + public FoodDto getFoodDetail(Long foodId) { + Food food = foodRepository.findById(foodId).orElseThrow(()-> new FoodNotExistsException("해당 음식 Id는 유효하지 않습니다.")); + return new FoodDto(food.getId(), food.getStore().getId(), food.getCategory().getId(), food.getName(), food.getPrice(), food.getDescription()); } } diff --git a/src/main/java/com/kusitms/jipbap/food/exception/FoodNotExistsException.java b/src/main/java/com/kusitms/jipbap/food/exception/FoodNotExistsException.java new file mode 100644 index 0000000..446d488 --- /dev/null +++ b/src/main/java/com/kusitms/jipbap/food/exception/FoodNotExistsException.java @@ -0,0 +1,7 @@ +package com.kusitms.jipbap.food.exception; + +public class FoodNotExistsException extends RuntimeException { + public FoodNotExistsException(String message) { + super(message); + } +} From 8c065fbe47bd7ec631a7c46de90db364f64b5d26 Mon Sep 17 00:00:00 2001 From: summit45 Date: Sat, 11 Nov 2023 16:01:07 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=EC=9D=8C=EC=8B=9D=20=EC=A3=BC?= =?UTF-8?q?=EB=AC=B8=20api=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/kusitms/jipbap/food/FoodService.java | 1 - .../java/com/kusitms/jipbap/order/Order.java | 2 -- .../kusitms/jipbap/order/OrderController.java | 29 +++++++++++++++ .../kusitms/jipbap/order/OrderRepository.java | 7 ++++ .../kusitms/jipbap/order/OrderService.java | 36 +++++++++++++++++++ .../kusitms/jipbap/order/dto/OrderDto.java | 19 ++++++++++ .../jipbap/order/dto/OrderFoodRequestDto.java | 15 ++++++++ 7 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/kusitms/jipbap/order/OrderController.java create mode 100644 src/main/java/com/kusitms/jipbap/order/OrderRepository.java create mode 100644 src/main/java/com/kusitms/jipbap/order/OrderService.java create mode 100644 src/main/java/com/kusitms/jipbap/order/dto/OrderDto.java create mode 100644 src/main/java/com/kusitms/jipbap/order/dto/OrderFoodRequestDto.java diff --git a/src/main/java/com/kusitms/jipbap/food/FoodService.java b/src/main/java/com/kusitms/jipbap/food/FoodService.java index b885d02..467c4cd 100644 --- a/src/main/java/com/kusitms/jipbap/food/FoodService.java +++ b/src/main/java/com/kusitms/jipbap/food/FoodService.java @@ -29,7 +29,6 @@ public class FoodService { @Transactional public CategoryDto registerCategory(RegisterCategoryRequestDto dto) { - System.out.println(dto.getName()); Category category = categoryRepository.save( new Category(null, dto.getName(), dto.getImage()) ); diff --git a/src/main/java/com/kusitms/jipbap/order/Order.java b/src/main/java/com/kusitms/jipbap/order/Order.java index 4ebac54..e74800d 100644 --- a/src/main/java/com/kusitms/jipbap/order/Order.java +++ b/src/main/java/com/kusitms/jipbap/order/Order.java @@ -1,9 +1,7 @@ package com.kusitms.jipbap.order; import com.kusitms.jipbap.common.entity.DateEntity; -import com.kusitms.jipbap.food.Category; import com.kusitms.jipbap.food.Food; -import com.kusitms.jipbap.store.Store; import com.kusitms.jipbap.user.User; import jakarta.persistence.*; import lombok.AllArgsConstructor; diff --git a/src/main/java/com/kusitms/jipbap/order/OrderController.java b/src/main/java/com/kusitms/jipbap/order/OrderController.java new file mode 100644 index 0000000..ccf4a35 --- /dev/null +++ b/src/main/java/com/kusitms/jipbap/order/OrderController.java @@ -0,0 +1,29 @@ +package com.kusitms.jipbap.order; + +import com.kusitms.jipbap.common.response.CommonResponse; +import com.kusitms.jipbap.food.dto.CategoryDto; +import com.kusitms.jipbap.food.dto.RegisterCategoryRequestDto; +import com.kusitms.jipbap.order.dto.OrderDto; +import com.kusitms.jipbap.order.dto.OrderFoodRequestDto; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +@RestController +@RequestMapping("/order") +@RequiredArgsConstructor +public class OrderController { + + private final OrderService orderService; + + @Operation(summary = "음식 주문하기") + @PostMapping("/food") + @ResponseStatus(HttpStatus.CREATED) + public CommonResponse orderFood(@Valid @RequestBody OrderFoodRequestDto dto) { + return new CommonResponse<>(orderService.orderFood(dto)); + } + +} diff --git a/src/main/java/com/kusitms/jipbap/order/OrderRepository.java b/src/main/java/com/kusitms/jipbap/order/OrderRepository.java new file mode 100644 index 0000000..1ba896d --- /dev/null +++ b/src/main/java/com/kusitms/jipbap/order/OrderRepository.java @@ -0,0 +1,7 @@ +package com.kusitms.jipbap.order; + +import com.kusitms.jipbap.food.Food; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface OrderRepository extends JpaRepository { +} diff --git a/src/main/java/com/kusitms/jipbap/order/OrderService.java b/src/main/java/com/kusitms/jipbap/order/OrderService.java new file mode 100644 index 0000000..520cc61 --- /dev/null +++ b/src/main/java/com/kusitms/jipbap/order/OrderService.java @@ -0,0 +1,36 @@ +package com.kusitms.jipbap.order; + +import com.kusitms.jipbap.food.Category; +import com.kusitms.jipbap.food.Food; +import com.kusitms.jipbap.food.FoodRepository; +import com.kusitms.jipbap.food.dto.CategoryDto; +import com.kusitms.jipbap.food.exception.FoodNotExistsException; +import com.kusitms.jipbap.order.dto.OrderDto; +import com.kusitms.jipbap.order.dto.OrderFoodRequestDto; +import com.kusitms.jipbap.user.User; +import com.kusitms.jipbap.user.UserRepository; +import com.kusitms.jipbap.user.exception.UserNotFoundException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +@RequiredArgsConstructor +public class OrderService { + + private final OrderRepository orderRepository; + private final UserRepository userRepository; + private final FoodRepository foodRepository; + + public OrderDto orderFood(OrderFoodRequestDto dto) { + User user = userRepository.findById(dto.getUser()).orElseThrow(()-> new UserNotFoundException("유저 정보가 존재하지 않습니다.")); + Food food = foodRepository.findById(dto.getFood()).orElseThrow(()-> new FoodNotExistsException("해당 음식은 유효하지 않습니다.")); + + Order order = orderRepository.save( + new Order(null, user, food, dto.getOrderCount()) + ); + + return new OrderDto(order.getId(), user.getId(), food.getId(), order.getOrderCount()); + } +} diff --git a/src/main/java/com/kusitms/jipbap/order/dto/OrderDto.java b/src/main/java/com/kusitms/jipbap/order/dto/OrderDto.java new file mode 100644 index 0000000..e5f190d --- /dev/null +++ b/src/main/java/com/kusitms/jipbap/order/dto/OrderDto.java @@ -0,0 +1,19 @@ +package com.kusitms.jipbap.order.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +public class OrderDto { + + private Long id; + + private Long user; + + private Long food; + + private Long orderCount; +} diff --git a/src/main/java/com/kusitms/jipbap/order/dto/OrderFoodRequestDto.java b/src/main/java/com/kusitms/jipbap/order/dto/OrderFoodRequestDto.java new file mode 100644 index 0000000..3f3b928 --- /dev/null +++ b/src/main/java/com/kusitms/jipbap/order/dto/OrderFoodRequestDto.java @@ -0,0 +1,15 @@ +package com.kusitms.jipbap.order.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class OrderFoodRequestDto { + private Long user; + + private Long food; + + private Long orderCount; +}