Files
invyone/backend-spring/src/main/java/com/erp/ai/controller/AiKnowledgeController.java
T
johngreen 7c57c69f84
Build & Deploy to K8s / build-and-deploy (push) Successful in 4m33s
fix: AiKnowledgeController 추가 (Epic C 누락분)
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>
2026-04-29 13:52:20 +09:00

72 lines
2.9 KiB
Java

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, "지식 파일이 삭제되었습니다."));
}
}