package com.hlab.yanalyst.domain.reply; import com.hlab.yanalyst.domain.reply.dto.ReplyCommentDto; import com.hlab.yanalyst.global.common.ApiResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; /** 내 채널 댓글 답장 초안 API. 실제 게시는 OAuth 가 없어 불가 — 초안까지만. */ @RestController @RequestMapping("/api/replies") @RequiredArgsConstructor @Tag(name = "Comment Reply API", description = "내 채널 미응답 댓글 수집 + 답글 초안 생성") public class CommentReplyController { private final CommentReplyService service; @GetMapping @Operation(summary = "답장 대기 목록", description = "status 미지정이면 완료 제외 전체. 좋아요 많은 순.") public ApiResponse> queue(@RequestParam(required = false) String status) { return ApiResponse.ok(service.queue(status)); } @GetMapping("/stats") @Operation(summary = "현황", description = "미응답/초안있음/완료 건수와 학습된 말투 샘플 수") public ApiResponse> stats() { return ApiResponse.ok(service.stats()); } @PostMapping("/collect") @Operation(summary = "댓글 수집", description = "내 채널 영상 전체를 돌며 내가 답글 안 단 댓글을 모은다. 영상당 1 unit.") public ApiResponse> collect() { return ApiResponse.ok(service.collectAll()); } @PostMapping("/{id}/draft") @Operation(summary = "초안 생성", description = "영상 내용 + 댓글을 근거로 서로 다른 초안 2개 생성. " + "refreshContext=true 면 캐시된 영상 요약을 버리고 다시 만든다(요약이 틀렸을 때).") public ApiResponse draft(@PathVariable Long id, @RequestParam(defaultValue = "false") boolean refreshContext) { return ApiResponse.ok(service.generateDrafts(id, refreshContext)); } @PostMapping("/{id}/done") @Operation(summary = "완료 표시", description = "실제로 답글을 달았을 때 목록에서 내린다") public ApiResponse done(@PathVariable Long id) { service.markDone(id); return ApiResponse.ok(null); } @PostMapping("/{id}/undo") @Operation(summary = "완료 취소", description = "다시 미응답으로 되돌린다") public ApiResponse undo(@PathVariable Long id) { service.markPending(id); return ApiResponse.ok(null); } }