package com.kamco.cd.kamcoback.menu; import com.fasterxml.jackson.databind.ObjectMapper; import com.kamco.cd.kamcoback.config.api.ApiLogFunction; import com.kamco.cd.kamcoback.config.api.ApiResponseDto; import com.kamco.cd.kamcoback.menu.dto.MenuDto; import com.kamco.cd.kamcoback.menu.service.MenuService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import java.util.LinkedHashMap; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @RequiredArgsConstructor @RequestMapping("/api/menu") public class MenuApiController { private final MenuService menuService; private final ObjectMapper objectMapper; @Operation(summary = "목록 조회", description = "모든 메뉴 조회") @ApiResponses( value = { @ApiResponse( responseCode = "200", description = "조회 성공", content = @Content( mediaType = "application/json", schema = @Schema(implementation = MenuDto.Basic.class))), @ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content), @ApiResponse(responseCode = "500", description = "서버 오류", content = @Content) }) @GetMapping public ApiResponseDto> getFindAll() { return ApiResponseDto.ok(menuService.getFindAll()); } @GetMapping("/find-uri") public ApiResponseDto getFindAllByUid(@RequestParam String apiUri) { List list = menuService.getFindAll(); List result = list.stream() .map( item -> { if (item instanceof LinkedHashMap map) { return objectMapper.convertValue(map, MenuDto.Basic.class); } else if (item instanceof MenuDto.Basic dto) { return dto; } else { throw new IllegalStateException("Unsupported cache type: " + item.getClass()); } }) .toList(); return ApiResponseDto.ok(ApiLogFunction.getUriMenuInfo(result, apiUri)); } }