package com.zioinfo.cms.ugc; import com.zioinfo.cms.common.ApiResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; /** * UGC API — 게시판/리뷰/댓글/문의 + 모더레이션 큐. * *

작성(POST /public)은 공개 delivery 경로가 아니므로 Author+ 권한 필요. * 운영 화면용 큐/모더레이션은 Editor+ 권장(SecurityConfig POST/PUT 가드). */ @RestController @RequestMapping("/api/cms/ugc") @RequiredArgsConstructor public class UgcController { private final UgcService service; @GetMapping public ApiResponse> list(@RequestParam(required = false) String ugcType, @RequestParam(required = false) String moderationStatus, @RequestParam(required = false) Long targetContentId) { return ApiResponse.ok(service.list(ugcType, moderationStatus, targetContentId)); } /** 모더레이션 큐 (PENDING). */ @GetMapping("/queue") public ApiResponse> queue() { return ApiResponse.ok(service.queue()); } @GetMapping("/{id}") public ApiResponse get(@PathVariable Long id) { return ApiResponse.ok(service.get(id)); } /** UGC 작성 (AI 모더레이션 자동). */ @PostMapping public ApiResponse create(@RequestBody Map req) { return ApiResponse.ok(service.create(req)); } /** 모더레이터 승인/반려. */ @PutMapping("/{id}/moderate") public ApiResponse moderate(@PathVariable Long id, @RequestBody Map req) { return ApiResponse.ok(service.moderate(id, req.get("status"), req.get("reason"))); } /** 리뷰 AI 요약. */ @GetMapping("/review-summary") public ApiResponse> reviewSummary(@RequestParam String targetRef) { return ApiResponse.ok(service.reviewSummary(targetRef)); } @DeleteMapping("/{id}") public ApiResponse delete(@PathVariable Long id) { service.delete(id); return ApiResponse.ok(null); } }