-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMenuController.java
More file actions
99 lines (90 loc) · 5.4 KB
/
Copy pathMenuController.java
File metadata and controls
99 lines (90 loc) · 5.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package com.ourmenu.backend.domain.menu.api;
import com.ourmenu.backend.domain.menu.application.MenuService;
import com.ourmenu.backend.domain.menu.domain.SortOrder;
import com.ourmenu.backend.domain.menu.dto.GetMenuFolderMenuResponse;
import com.ourmenu.backend.domain.menu.dto.GetMenuResponse;
import com.ourmenu.backend.domain.menu.dto.GetSimpleMenuResponse;
import com.ourmenu.backend.domain.menu.dto.MenuDto;
import com.ourmenu.backend.domain.menu.dto.MenuFilterDto;
import com.ourmenu.backend.domain.menu.dto.SaveMenuRequest;
import com.ourmenu.backend.domain.menu.dto.SaveMenuResponse;
import com.ourmenu.backend.domain.menu.util.PriceUtil;
import com.ourmenu.backend.domain.search.application.SearchService;
import com.ourmenu.backend.domain.search.dto.SimpleSearchDto;
import com.ourmenu.backend.domain.user.domain.CustomUserDetails;
import com.ourmenu.backend.global.response.ApiResponse;
import com.ourmenu.backend.global.response.util.ApiUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
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.RestController;
@Tag(name = "메뉴 API")
@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class MenuController {
private final MenuService menuService;
private final SearchService searchService;
@Operation(summary = "메뉴 등록", description = "메뉴를 등록한다. 메뉴판 관계를 설정할 수 있다.")
@PostMapping(path = "/menu", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ApiResponse<SaveMenuResponse> saveMenu(@ModelAttribute SaveMenuRequest request,
@AuthenticationPrincipal CustomUserDetails userDetails) {
request.initList();
SimpleSearchDto simpleSearchDto = searchService.getSearchDto(request.getIsCrawled(), request.getStoreId());
MenuDto menuDto = MenuDto.of(request, request.getMenuImgs(), userDetails, simpleSearchDto);
SaveMenuResponse response = menuService.saveMenu(menuDto);
return ApiUtil.success(response);
}
@Operation(summary = "메뉴 삭제", description = "메뉴 및 해당 메뉴 엔티티와 관련된 엔티티를 삭제한다.")
@DeleteMapping("/menu/{menuId}")
public ApiResponse<Void> deleteMenu(@PathVariable("menuId") Long menuId,
@AuthenticationPrincipal CustomUserDetails userDetails) {
menuService.deleteMenu(userDetails.getId(), menuId);
return ApiUtil.successOnly();
}
@Operation(summary = "메뉴판 메뉴 리스트 조회", description = "메뉴판의 메뉴 리스트를 조회한다. 필터를 사용할 수 있다")
@GetMapping("/menu-folders/{menuFolderId}/menus")
public ApiResponse<GetMenuFolderMenuResponse> getMenuFolderMenus(
@PathVariable("menuFolderId") Long menuFolderId,
@RequestParam(value = "sortOrder") SortOrder sortOrder,
@AuthenticationPrincipal CustomUserDetails userDetails) {
MenuFilterDto menuFilterDto = MenuFilterDto.from(sortOrder);
GetMenuFolderMenuResponse response = menuService.findMenusByMenuFolder(userDetails.getId(),
menuFolderId, menuFilterDto);
return ApiUtil.success(response);
}
@Operation(summary = "메뉴 리스트 조회", description = "메뉴 리스트를 조회한다. 필터를 사용할 수 있다")
@GetMapping("/menus")
public ApiResponse<List<GetSimpleMenuResponse>> getMenus(
@RequestParam(value = "tags", required = false) List<com.ourmenu.backend.domain.tag.domain.Tag> tags,
@RequestParam(value = "minPrice", required = false) Long minPrice,
@RequestParam(value = "maxPrice", required = false) Long maxPrice,
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size") int size,
@RequestParam(value = "sortOrder") SortOrder sortOrder,
@AuthenticationPrincipal CustomUserDetails userDetails) {
minPrice = PriceUtil.convertMinPrice(minPrice);
maxPrice = PriceUtil.convertMaxPrice(maxPrice);
MenuFilterDto menuFilterDto = MenuFilterDto.from(tags, minPrice, maxPrice, page, size, sortOrder);
List<GetSimpleMenuResponse> response = menuService.findMenusByCriteriaPageAndSort(userDetails.getId(),
menuFilterDto);
return ApiUtil.success(response);
}
@Operation(summary = "메뉴 상세 조회", description = "메뉴를 상세 조회한다")
@GetMapping("/menus/{menuId}")
public ApiResponse<GetMenuResponse> getMenu(@PathVariable("menuId") Long menuId,
@AuthenticationPrincipal CustomUserDetails userDetails) {
GetMenuResponse response = menuService.findMenu(userDetails.getId(), menuId);
return ApiUtil.success(response);
}
}