Skip to content

Commit

Permalink
[Refactor] #163 - 카페 메뉴 생성 API 로직 수정
Browse files Browse the repository at this point in the history
로직 수정 및 Swagger 설정 추가
  • Loading branch information
parkrootseok committed Feb 7, 2023
1 parent 0d24835 commit 7ca887c
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 47 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -38,13 +45,17 @@ public class CafeMenuApiController {
*/
@ApiOperation(value = "카페 메뉴 등록", notes = "카페 ID와 메뉴에 대한 정보를 받아 등록한다.")
@ApiImplicitParam(name = "cafeId", value = "카페 ID")
@PostMapping("/cafe/{cafeId}")
public SuccessResponse<List<PostCafeMenuRes>> registerMenu(@PathVariable(name = "cafeId") Long cafeId,
@RequestPart @Valid List<PostCafeMenuReq> postCafeMenuReq,
@RequestPart(required = false) List<MultipartFile> menuImages)
@PostMapping(value ="/cafe/{cafeId}", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
public SuccessResponse<PostCafeMenuRes> 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));

}

Expand Down
20 changes: 8 additions & 12 deletions src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuReq.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<CafeMenu> toEntity(Cafe cafe, List<PostCafeMenuReq> 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();
}

}
21 changes: 9 additions & 12 deletions src/main/java/shop/cazait/domain/cafemenu/dto/PostCafeMenuRes.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,15 @@ public class PostCafeMenuRes {
@Schema(description = "이미지 URL", example = "americano.png")
private String imageUrl;

public static List<PostCafeMenuRes> of(List<CafeMenu> 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();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -51,27 +51,14 @@ public List<GetCafeMenuRes> getMenu(Long cafeId) {
/**
* 카페 메뉴 등록
*/
public List<PostCafeMenuRes> registerMenu(Long cafeId, List<PostCafeMenuReq> postCafeMenuReqs, List<MultipartFile> menuImages)
public PostCafeMenuRes registerMenu(Long cafeId, PostCafeMenuReq postCafeMenuReq, MultipartFile menuImage)
throws CafeException, IOException {

Cafe findCafe = getCafe(cafeId);
List<CafeMenu> 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<CafeMenu> 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);

}

Expand Down

0 comments on commit 7ca887c

Please sign in to comment.