From 7ca887cab6c08fec44bf60273471d4111ef51ce1 Mon Sep 17 00:00:00 2001 From: ParkRootSeok Date: Wed, 8 Feb 2023 01:55:07 +0900 Subject: [PATCH] =?UTF-8?q?[Refactor]=20#163=20-=20=EC=B9=B4=ED=8E=98=20?= =?UTF-8?q?=EB=A9=94=EB=89=B4=20=EC=83=9D=EC=84=B1=20API=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 로직 수정 및 Swagger 설정 추가 --- .../cafemenu/api/CafeMenuApiController.java | 21 +++++++++++++---- .../domain/cafemenu/dto/PostCafeMenuReq.java | 20 +++++++--------- .../domain/cafemenu/dto/PostCafeMenuRes.java | 21 ++++++++--------- .../cafemenu/service/CafeMenuService.java | 23 ++++--------------- 4 files changed, 38 insertions(+), 47 deletions(-) diff --git a/src/main/java/shop/cazait/domain/cafemenu/api/CafeMenuApiController.java b/src/main/java/shop/cazait/domain/cafemenu/api/CafeMenuApiController.java index a8695389..9a92d7aa 100644 --- a/src/main/java/shop/cazait/domain/cafemenu/api/CafeMenuApiController.java +++ b/src/main/java/shop/cazait/domain/cafemenu/api/CafeMenuApiController.java @@ -1,18 +1,25 @@ package shop.cazait.domain.cafemenu.api; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.media.Schema; import java.io.IOException; import java.util.List; import javax.validation.Valid; import lombok.RequiredArgsConstructor; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @@ -38,13 +45,17 @@ public class CafeMenuApiController { */ @ApiOperation(value = "카페 메뉴 등록", notes = "카페 ID와 메뉴에 대한 정보를 받아 등록한다.") @ApiImplicitParam(name = "cafeId", value = "카페 ID") - @PostMapping("/cafe/{cafeId}") - public SuccessResponse> registerMenu(@PathVariable(name = "cafeId") Long cafeId, - @RequestPart @Valid List postCafeMenuReq, - @RequestPart(required = false) List menuImages) + @PostMapping(value ="/cafe/{cafeId}", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) + public SuccessResponse registerMenu(@PathVariable(name = "cafeId") Long cafeId, + @Parameter(description = "메뉴 정보 : {\"name\": \"아메리카노\", \"description\": \"맛있어!\", \"price\": 4500}") + @RequestParam @Valid String menuInfo, + @Parameter(description = "메뉴 이미지") @RequestPart(required = false) MultipartFile menuImage) throws CafeException, IOException { - return new SuccessResponse<>(cafeMenuService.registerMenu(cafeId, postCafeMenuReq, menuImages)); + ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); + PostCafeMenuReq postCafeMenuReq = objectMapper.readValue(menuInfo, new TypeReference<>() {}); + + return new SuccessResponse<>(cafeMenuService.registerMenu(cafeId, postCafeMenuReq, menuImage)); } diff --git a/src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuReq.java b/src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuReq.java index 76001b69..71a7a898 100644 --- a/src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuReq.java +++ b/src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuReq.java @@ -26,18 +26,14 @@ public class PostCafeMenuReq { @NotBlank(message = "메뉴 가격을 입력해주세요.") private Integer price; - @Schema(description = "이미지 URL", example = "americano.png (미등록 : null)") - private String imageUrl; - - public static List toEntity(Cafe cafe, List postCafeMenuReqs, String uploadFileName) { - return postCafeMenuReqs.stream() - .map(postCafeMenuReq -> CafeMenu.builder() - .cafe(cafe) - .name(postCafeMenuReq.getName()) - .description(postCafeMenuReq.getDescription()) - .price(postCafeMenuReq.getPrice()) - .imageUrl(uploadFileName) - .build()).collect(Collectors.toList()); + public static CafeMenu toEntity(Cafe cafe, PostCafeMenuReq postCafeMenuReq, String uploadFileName) { + return CafeMenu.builder() + .cafe(cafe) + .name(postCafeMenuReq.getName()) + .description(postCafeMenuReq.getDescription()) + .price(postCafeMenuReq.getPrice()) + .imageUrl(uploadFileName) + .build(); } } diff --git a/src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuRes.java b/src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuRes.java index e2137cc5..2925bdf6 100644 --- a/src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuRes.java +++ b/src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuRes.java @@ -28,18 +28,15 @@ public class PostCafeMenuRes { @Schema(description = "이미지 URL", example = "americano.png") private String imageUrl; - public static List of(List menus) { - - return menus.stream() - .map(menu -> PostCafeMenuRes.builder() - .menuId(menu.getId()) - .name(menu.getName()) - .description(menu.getDescription()) - .price(menu.getPrice()) - .imageUrl(menu.getImageUrl()) - .build()) - .collect(Collectors.toList()); - + public static PostCafeMenuRes of(CafeMenu menu) { + + return PostCafeMenuRes.builder() + .menuId(menu.getId()) + .name(menu.getName()) + .description(menu.getDescription()) + .price(menu.getPrice()) + .imageUrl(menu.getImageUrl()) + .build(); } } diff --git a/src/main/java/shop/cazait/domain/cafemenu/service/CafeMenuService.java b/src/main/java/shop/cazait/domain/cafemenu/service/CafeMenuService.java index c5d5aa7f..fe42107a 100644 --- a/src/main/java/shop/cazait/domain/cafemenu/service/CafeMenuService.java +++ b/src/main/java/shop/cazait/domain/cafemenu/service/CafeMenuService.java @@ -51,27 +51,14 @@ public List getMenu(Long cafeId) { /** * 카페 메뉴 등록 */ - public List registerMenu(Long cafeId, List postCafeMenuReqs, List menuImages) + public PostCafeMenuRes registerMenu(Long cafeId, PostCafeMenuReq postCafeMenuReq, MultipartFile menuImage) throws CafeException, IOException { Cafe findCafe = getCafe(cafeId); - List menus = menuImages.stream() - .map(menuImage -> { - String uploadFileName = null; - try { - uploadFileName = awsS3Servicel.uploadImage(menuImage); - } catch (IOException e) { - throw new RuntimeException(e); - } - return PostCafeMenuReq.toEntity(findCafe, postCafeMenuReqs, uploadFileName); - }).collect(Collectors.toList()) - .stream() - .flatMap(List::stream) - .collect(Collectors.toList()); - - List addMenus = cafeMenuRepository.saveAll(menus); - - return PostCafeMenuRes.of(addMenus); + String uploadFileName = awsS3Servicel.uploadImage(menuImage); + CafeMenu menu = PostCafeMenuReq.toEntity(findCafe, postCafeMenuReq, uploadFileName); + CafeMenu addMenu = cafeMenuRepository.save(menu); + return PostCafeMenuRes.of(addMenu); }