package com.labelsys.backend.controller; import com.labelsys.backend.annotation.RequirePosition; import com.labelsys.backend.context.LoginUser; import com.labelsys.backend.dto.common.PageResult; import com.labelsys.backend.dto.request.AnnotationResultPageQuery; import com.labelsys.backend.dto.request.MergeReviewResultRequest; import com.labelsys.backend.dto.response.AnnotationResultCompareResponse; import com.labelsys.backend.dto.response.AnnotationResultResponse; import com.labelsys.backend.enums.UserPosition; import com.labelsys.backend.service.AnnotationResultService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/annotation-results") @RequiredArgsConstructor @Tag(name = "标注结果管理", description = "标注结果相关接口") public class AnnotationResultController { private final AnnotationResultService annotationResultService; @Operation(summary = "分页查询标注结果") @GetMapping public ResponseEntity> pageResults( @Valid AnnotationResultPageQuery query, @Parameter(hidden = true) LoginUser currentUser) { return ResponseEntity.ok(annotationResultService.pageResults(currentUser, query)); } @Operation(summary = "查询标注结果详情") @GetMapping("/{id}") public ResponseEntity getResult( @Parameter(description = "结果ID", example = "191000000000000401") @PathVariable Long id, @Parameter(hidden = true) LoginUser currentUser) { return ResponseEntity.ok(annotationResultService.getResult(currentUser, id)); } @Operation(summary = "查询结果比对信息,REVIEWER岗位以上可操作") @GetMapping("/{id}/compare") @RequirePosition(UserPosition.REVIEWER) public ResponseEntity compareResult( @Parameter(description = "结果ID", example = "191000000000000401") @PathVariable Long id, @Parameter(hidden = true) LoginUser currentUser) { return ResponseEntity.ok(annotationResultService.compareResult(currentUser, id)); } @Operation(summary = "提交合并审核结果,REVIEWER岗位以上可操作") @PostMapping("/{id}/merge") @RequirePosition(UserPosition.REVIEWER) public ResponseEntity mergeReviewResult( @Parameter(description = "结果ID", example = "191000000000000401") @PathVariable Long id, @Valid @RequestBody MergeReviewResultRequest request, @Parameter(hidden = true) LoginUser currentUser) { annotationResultService.mergeReviewResult(currentUser, id, request); return ResponseEntity.ok().build(); } }