package com.label.controller; import com.label.annotation.RequireRole; import com.label.common.auth.TokenPrincipal; import com.label.common.result.Result; import com.label.service.QaService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.Map; /** * 问答生成阶段标注工作台接口(5 个端点)。 */ @Tag(name = "问答生成", description = "问答生成阶段的查看、编辑、提交和审批") @RestController @RequestMapping("/api/qa") @RequiredArgsConstructor public class QaController { private final QaService qaService; /** GET /api/qa/{taskId} — 获取候选问答对 */ @Operation(summary = "获取候选问答对") @GetMapping("/{taskId}") @RequireRole("ANNOTATOR") public Result> getResult(@PathVariable Long taskId, HttpServletRequest request) { return Result.success(qaService.getResult(taskId, principal(request))); } /** PUT /api/qa/{taskId} — 整体覆盖问答对 */ @Operation(summary = "更新候选问答对") @PutMapping("/{taskId}") @RequireRole("ANNOTATOR") public Result updateResult(@PathVariable Long taskId, @RequestBody String body, HttpServletRequest request) { qaService.updateResult(taskId, body, principal(request)); return Result.success(null); } /** POST /api/qa/{taskId}/submit — 提交问答对 */ @Operation(summary = "提交问答对") @PostMapping("/{taskId}/submit") @RequireRole("ANNOTATOR") public Result submit(@PathVariable Long taskId, HttpServletRequest request) { qaService.submit(taskId, principal(request)); return Result.success(null); } /** POST /api/qa/{taskId}/approve — 审批通过(REVIEWER) */ @Operation(summary = "审批通过问答对") @PostMapping("/{taskId}/approve") @RequireRole("REVIEWER") public Result approve(@PathVariable Long taskId, HttpServletRequest request) { qaService.approve(taskId, principal(request)); return Result.success(null); } /** POST /api/qa/{taskId}/reject — 驳回(REVIEWER) */ @Operation(summary = "驳回答案对") @PostMapping("/{taskId}/reject") @RequireRole("REVIEWER") public Result reject(@PathVariable Long taskId, @RequestBody Map body, HttpServletRequest request) { String reason = body != null ? body.get("reason") : null; qaService.reject(taskId, reason, principal(request)); return Result.success(null); } private TokenPrincipal principal(HttpServletRequest request) { return (TokenPrincipal) request.getAttribute("__token_principal__"); } }