Skip to content

Commit

Permalink
Merge pull request #16 from marinesnow34/option
Browse files Browse the repository at this point in the history
Feat: 식음료 옵션 확인 구현
  • Loading branch information
marinesnow34 authored Nov 15, 2023
2 parents 070d832 + d1d39b1 commit 59a3c8e
Show file tree
Hide file tree
Showing 10 changed files with 179 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.readyvery.readyverydemo.domain.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.readyvery.readyverydemo.domain.Foodie;

public interface FoodieRepository extends JpaRepository<Foodie, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.readyvery.readyverydemo.global;

public class Constant {
public static final Long EAT_IN = 1L;
public static final Long TAKE_OUT = 2L;
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

@Getter
public enum ExceptionCode {
STORE_NOT_FOUND(404, "Store does not exists.");
STORE_NOT_FOUND(404, "Store does not exists."),
FOODY_NOT_FOUND(404, "Foody does not exists.");

private int status;
private String message;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.readyvery.readyverydemo.src.order;

import org.springframework.http.HttpStatus;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.readyvery.readyverydemo.src.order.dto.FoodyDetailRes;

import lombok.RequiredArgsConstructor;

@RestController
@RequestMapping("/api/v1/order")
@RequiredArgsConstructor
public class OrderController {
private final OrderService orderService;

@GetMapping("/{storeId}")
public ResponseEntity<FoodyDetailRes> getFoody(
@PathVariable("storeId") Long storeId,
@RequestParam("foody_id") Long foodyId,
@RequestParam("inout") Long inout) {
FoodyDetailRes foodyDetailRes = orderService.getFoody(storeId, foodyId, inout);
return new ResponseEntity<>(foodyDetailRes, HttpStatus.OK);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.readyvery.readyverydemo.src.order;

import com.readyvery.readyverydemo.src.order.dto.FoodyDetailRes;

public interface OrderService {
FoodyDetailRes getFoody(Long storeId, Long foodyId, Long inout);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.readyvery.readyverydemo.src.order;

import org.springframework.stereotype.Service;

import com.readyvery.readyverydemo.domain.Foodie;
import com.readyvery.readyverydemo.domain.repository.FoodieRepository;
import com.readyvery.readyverydemo.global.exception.BusinessLogicException;
import com.readyvery.readyverydemo.global.exception.ExceptionCode;
import com.readyvery.readyverydemo.src.order.dto.FoodyDetailRes;
import com.readyvery.readyverydemo.src.order.dto.OrderMapper;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {
private final FoodieRepository foodieRepository;
private final OrderMapper orderMapper;

@Override
public FoodyDetailRes getFoody(Long storeId, Long foodyId, Long inout) {
Foodie foodie = foodieRepository.findById(foodyId).orElseThrow(
() -> new BusinessLogicException(ExceptionCode.FOODY_NOT_FOUND)
);
return orderMapper.foodieToFoodyDetailRes(foodie, inout);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.readyvery.readyverydemo.src.order.dto;

import java.util.List;

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class FoodyDetailRes {
private String name;
private String imgUrl;
private Long price;
private List<OptionCategoryDto> category;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.readyvery.readyverydemo.src.order.dto;

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class FoodyOptionDto {
private Long idx;
private String name;
private Long price;
}
Original file line number Diff line number Diff line change
@@ -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 OptionCategoryDto {
private String name;
private Boolean essential;
private List<FoodyOptionDto> options;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.readyvery.readyverydemo.src.order.dto;

import static com.readyvery.readyverydemo.global.Constant.*;

import java.util.Objects;

import org.springframework.stereotype.Component;

import com.readyvery.readyverydemo.domain.Foodie;
import com.readyvery.readyverydemo.domain.FoodieOption;
import com.readyvery.readyverydemo.domain.FoodieOptionCategory;

@Component
public class OrderMapper {
public FoodyDetailRes foodieToFoodyDetailRes(Foodie foodie, Long inout) {
Long price = determinePrice(foodie, inout);

return FoodyDetailRes.builder()
.name(foodie.getName())
.imgUrl(foodie.getImgUrl())
.price(price)
.category(
foodie.getFoodieOptionCategory()
.stream()
.map(this::foodieOptionCategoryToOptionCategoryDto)
.toList())
.build();
}

private Long determinePrice(Foodie foodie, Long inout) {
if (Objects.equals(inout, EAT_IN)) {
return foodie.getPrice();
} else if (Objects.equals(inout, TAKE_OUT)) {
return foodie.getTakeOut() != null ? foodie.getTakeOut().getPrice() : foodie.getPrice();
}
// inout이 EAT_IN도 TAKE_OUT도 아닌 경우, null을 반환
return null;
}

private OptionCategoryDto foodieOptionCategoryToOptionCategoryDto(FoodieOptionCategory category) {
return OptionCategoryDto.builder()
.name(category.getName())
.essential(category.isRequired())
.options(
category.getFoodieOptions()
.stream()
.map(this::foodyOptionToOptionDto)
.toList())
.build();
}

private FoodyOptionDto foodyOptionToOptionDto(FoodieOption option) {
return FoodyOptionDto.builder()
.idx(option.getId())
.name(option.getName())
.price(option.getPrice())
.build();
}
}

0 comments on commit 59a3c8e

Please sign in to comment.