package com.zioinfo.cms.ai; import com.zioinfo.cms.common.ApiResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; /** * GUARDiA CMS AI 도구 API (Ollama 온프레미스 + Java 폴백). * *

모든 엔드포인트는 Ollama 미가용 시에도 폴백으로 동작한다. */ @RestController @RequestMapping("/api/cms/ai") @RequiredArgsConstructor public class AiController { private final AiService aiService; @GetMapping("/status") public ApiResponse> status() { return ApiResponse.ok(Map.of("ollamaAvailable", aiService.ollamaAvailable())); } /** 1. 콘텐츠 초안 생성. */ @PostMapping("/draft") public ApiResponse> draft(@RequestBody Map req) { String text = aiService.draft(req.get("kind"), req.get("topic"), req.get("tone")); return ApiResponse.ok(Map.of("draft", text)); } /** 2. 이미지 태깅/대체텍스트 (base64 이미지). */ @PostMapping("/image-tags") public ApiResponse> imageTags(@RequestBody Map req) { return ApiResponse.ok(aiService.imageTags(req.get("imageBase64"), req.get("fileName"))); } /** 3. SEO 제안. */ @PostMapping("/seo") public ApiResponse> seo(@RequestBody Map req) { return ApiResponse.ok(aiService.seoSuggest(req.get("title"), req.get("body"))); } /** 4. 번역. */ @PostMapping("/translate") public ApiResponse> translate(@RequestBody Map req) { String out = aiService.translate(req.get("text"), req.getOrDefault("targetLocale", "en")); return ApiResponse.ok(Map.of("translated", out)); } /** 6. 리뷰 요약·감성. */ @PostMapping("/review-summary") public ApiResponse> reviewSummary(@RequestBody Map req) { @SuppressWarnings("unchecked") List reviews = (List) req.getOrDefault("reviews", List.of()); return ApiResponse.ok(aiService.reviewSummary(reviews)); } /** 7. 자연어 검색 키워드. */ @PostMapping("/search-keywords") public ApiResponse> searchKeywords(@RequestBody Map req) { return ApiResponse.ok(Map.of("keywords", aiService.searchKeywords(req.get("query")))); } /** 8. UGC 모더레이션. */ @PostMapping("/moderate") public ApiResponse> moderate(@RequestBody Map req) { return ApiResponse.ok(aiService.moderate(req.get("text"))); } }