fix: AiKnowledgeController 추가 (Epic C 누락분)
Build & Deploy to K8s / build-and-deploy (push) Successful in 4m33s
Build & Deploy to K8s / build-and-deploy (push) Successful in 4m33s
frontend 가 /api/ai-knowledge 호출하는데 backend 에 컨트롤러가 없어 "지식 파일 목록 로드 실패" 토스트가 나던 증상 fix. 서비스/매퍼/모델/DTO 는 이미 있고 컨트롤러만 누락이었음. 다른 ai 컨트롤러 (AiAgentController) 와 동일 패턴으로 GET/POST/PUT/DELETE + 멀티테넌시(company_code 필터, SUPER_ADMIN 예외) 적용. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
package com.erp.ai.controller;
|
||||
|
||||
import com.erp.ai.dto.KnowledgeFileRequest;
|
||||
import com.erp.ai.model.AiKnowledgeFile;
|
||||
import com.erp.ai.service.AiKnowledgeService;
|
||||
import com.erp.dto.ApiResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/ai-knowledge")
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class AiKnowledgeController {
|
||||
|
||||
private final AiKnowledgeService aiKnowledgeService;
|
||||
|
||||
@GetMapping
|
||||
public ResponseEntity<ApiResponse<List<AiKnowledgeFile>>> list(
|
||||
@RequestAttribute(value = "company_code", required = false) String companyCode,
|
||||
@RequestAttribute(value = "role", required = false) String role,
|
||||
@RequestParam(required = false) String category,
|
||||
@RequestParam(required = false) String search) {
|
||||
boolean isSuper = "SUPER_ADMIN".equals(role);
|
||||
String filter = isSuper ? null : companyCode;
|
||||
return ResponseEntity.ok(ApiResponse.success(aiKnowledgeService.list(category, filter)));
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<ApiResponse<AiKnowledgeFile>> getById(@PathVariable long id) {
|
||||
AiKnowledgeFile file = aiKnowledgeService.getById(id);
|
||||
if (file == null) {
|
||||
return ResponseEntity.status(404).body(ApiResponse.error("지식 파일을 찾을 수 없습니다."));
|
||||
}
|
||||
return ResponseEntity.ok(ApiResponse.success(file));
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public ResponseEntity<ApiResponse<AiKnowledgeFile>> create(
|
||||
@RequestAttribute(value = "user_id", required = false) String userId,
|
||||
@RequestAttribute(value = "company_code", required = false) String companyCode,
|
||||
@RequestBody KnowledgeFileRequest req) {
|
||||
return ResponseEntity.status(201).body(
|
||||
ApiResponse.success(
|
||||
aiKnowledgeService.create(req,
|
||||
userId != null ? userId : "system",
|
||||
companyCode != null ? companyCode : "*"),
|
||||
"지식 파일이 등록되었습니다."));
|
||||
}
|
||||
|
||||
@PutMapping("/{id}")
|
||||
public ResponseEntity<ApiResponse<AiKnowledgeFile>> update(
|
||||
@PathVariable long id,
|
||||
@RequestBody KnowledgeFileRequest req) {
|
||||
AiKnowledgeFile updated = aiKnowledgeService.update(id, req);
|
||||
if (updated == null) {
|
||||
return ResponseEntity.status(404).body(ApiResponse.error("지식 파일을 찾을 수 없습니다."));
|
||||
}
|
||||
return ResponseEntity.ok(ApiResponse.success(updated, "지식 파일이 수정되었습니다."));
|
||||
}
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
public ResponseEntity<ApiResponse<Void>> delete(@PathVariable long id) {
|
||||
aiKnowledgeService.delete(id);
|
||||
return ResponseEntity.ok(ApiResponse.success(null, "지식 파일이 삭제되었습니다."));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user