This commit is contained in:
2026-01-02 22:18:09 +09:00
parent a7b04d0be8
commit dc2b9286f4
7 changed files with 595 additions and 581 deletions

View File

@@ -36,86 +36,86 @@ public class LabelAllocateApiController {
@Operation(summary = "배정 가능한 사용자 목록 조회", description = "라벨링 작업 배정을 위한 활성 상태의 사용자 목록을 조회합니다.")
@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@GetMapping("/avail-user")
public ApiResponseDto<List<LabelAllocateDto.UserList>> availUserList(
@Parameter(
description = "사용자 역할",
example = "LABELER",
schema = @Schema(allowableValues = {"LABELER", "REVIEWER"}))
@RequestParam
String role) {
@Parameter(
description = "사용자 역할",
example = "LABELER",
schema = @Schema(allowableValues = {"LABELER", "REVIEWER"}))
@RequestParam
String role) {
return ApiResponseDto.ok(labelAllocateService.availUserList(role));
}
@Operation(summary = "작업현황관리(작업자 목록 및 3일치 통계 조회)", description = "학습데이터 제작 현황 조회 API입니다.")
@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "데이터를 찾을 수 없음"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "데이터를 찾을 수 없음"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@GetMapping("/admin/workers")
public ApiResponseDto<WorkerListResponse> getWorkerStatistics(
@Parameter(description = "분석 ID (필수)", required = true, example = "3") @RequestParam
Long analUid,
@Parameter(
description = "작업자 유형 (선택) - 미입력 시 LABELER로 조회",
example = "LABELER",
schema =
@Schema(
allowableValues = {"LABELER", "REVIEWER"},
defaultValue = "LABELER"))
@RequestParam(required = false)
String type,
@Parameter(description = "작업자 이름 검색 (부분 일치)", example = "김라벨") @RequestParam(required = false)
String searchName,
@Parameter(description = "작업자 사번 검색 (부분 일치)", example = "1234567")
@RequestParam(required = false)
String searchEmployeeNo,
@Parameter(
description = "정렬 조건 (선택) - 미입력 시 이름 오름차순",
example = "REMAINING_DESC",
schema =
@Schema(
allowableValues = {
"REMAINING_DESC",
"REMAINING_ASC",
"NAME_ASC",
"NAME_DESC"
},
defaultValue = "NAME_ASC"))
@RequestParam(required = false)
String sort) {
@Parameter(description = "분석 ID (필수)", required = true, example = "3") @RequestParam
Long analUid,
@Parameter(
description = "작업자 유형 (선택) - 미입력 시 LABELER로 조회",
example = "LABELER",
schema =
@Schema(
allowableValues = {"LABELER", "REVIEWER"},
defaultValue = "LABELER"))
@RequestParam(required = false)
String type,
@Parameter(description = "작업자 이름 검색 (부분 일치)", example = "김라벨") @RequestParam(required = false)
String searchName,
@Parameter(description = "작업자 사번 검색 (부분 일치)", example = "1234567")
@RequestParam(required = false)
String searchEmployeeNo,
@Parameter(
description = "정렬 조건 (선택) - 미입력 시 이름 오름차순",
example = "REMAINING_DESC",
schema =
@Schema(
allowableValues = {
"REMAINING_DESC",
"REMAINING_ASC",
"NAME_ASC",
"NAME_DESC"
},
defaultValue = "NAME_ASC"))
@RequestParam(required = false)
String sort) {
// type이 null이면 기본값으로 LABELER 설정
String workerType = (type == null || type.isEmpty()) ? RoleType.LABELER.name() : type;
return ApiResponseDto.ok(
labelAllocateService.getWorkerStatistics(
analUid, workerType, searchName, searchEmployeeNo, sort));
labelAllocateService.getWorkerStatistics(
analUid, workerType, searchName, searchEmployeeNo, sort));
}
@Operation(summary = "작업 배정", description = "작업 배정")
@ApiResponses(
value = {
@ApiResponse(
responseCode = "201",
description = "등록 성공",
content =
@Content(
mediaType = "application/json",
schema = @Schema(implementation = Long.class),
examples = {
@ExampleObject(
name = "라벨러 할당 예시",
description = "라벨러 할당 예시",
value =
"""
value = {
@ApiResponse(
responseCode = "201",
description = "등록 성공",
content =
@Content(
mediaType = "application/json",
schema = @Schema(implementation = Long.class),
examples = {
@ExampleObject(
name = "라벨러 할당 예시",
description = "라벨러 할당 예시",
value =
"""
{
"autoType": "AUTO",
"stage": 4,
@@ -150,67 +150,71 @@ public class LabelAllocateApiController {
]
}
""")
})),
@ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content),
@ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content),
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
})
})),
@ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content),
@ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content),
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
})
@PostMapping("/allocate")
public ApiResponseDto<Void> labelAllocate(@RequestBody LabelAllocateDto.AllocateDto dto) {
labelAllocateService.allocateAsc(
dto.getAutoType(),
dto.getStage(),
dto.getLabelers(),
dto.getInspectors(),
dto.getCompareYyyy(),
dto.getTargetYyyy()
);
dto.getAutoType(),
dto.getStage(),
dto.getLabelers(),
dto.getInspectors(),
dto.getCompareYyyy(),
dto.getTargetYyyy());
return ApiResponseDto.ok(null);
}
@Operation(summary = "추론 상세 조회", description = "분석 ID에 해당하는 추론 상세 정보를 조회합니다.")
@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "데이터를 찾을 수 없음"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "404", description = "데이터를 찾을 수 없음"),
@ApiResponse(responseCode = "500", description = "서버 오류")
})
@GetMapping("/stage-detail")
public ApiResponseDto<InferenceDetail> findInferenceDetail(
@Parameter(description = "비교년도", required = true, example = "2022") @RequestParam Integer compareYyyy,
@Parameter(description = "기준년도", required = true, example = "2024") @RequestParam Integer targetYyyy,
@Parameter(description = "회차", required = true, example = "4") @RequestParam Integer stage
) {
return ApiResponseDto.ok(labelAllocateService.findInferenceDetail(compareYyyy, targetYyyy, stage));
@Parameter(description = "비교년도", required = true, example = "2022") @RequestParam
Integer compareYyyy,
@Parameter(description = "기준년도", required = true, example = "2024") @RequestParam
Integer targetYyyy,
@Parameter(description = "회차", required = true, example = "4") @RequestParam Integer stage) {
return ApiResponseDto.ok(
labelAllocateService.findInferenceDetail(compareYyyy, targetYyyy, stage));
}
@Operation(summary = "작업이관 > 라벨러 상세 정보", description = "작업이관 > 라벨러 상세 정보")
@GetMapping("/labeler-detail")
public ApiResponseDto<LabelerDetail> findLabelerDetail(
@RequestParam(defaultValue = "01022223333") String userId,
@Parameter(description = "비교년도", required = true, example = "2022") @RequestParam Integer compareYyyy,
@Parameter(description = "기준년도", required = true, example = "2024") @RequestParam Integer targetYyyy,
@Parameter(description = "회차", required = true, example = "4") @RequestParam Integer stage) {
return ApiResponseDto.ok(labelAllocateService.findLabelerDetail(userId, compareYyyy, targetYyyy, stage));
@RequestParam(defaultValue = "01022223333") String userId,
@Parameter(description = "비교년도", required = true, example = "2022") @RequestParam
Integer compareYyyy,
@Parameter(description = "기준년도", required = true, example = "2024") @RequestParam
Integer targetYyyy,
@Parameter(description = "회차", required = true, example = "4") @RequestParam Integer stage) {
return ApiResponseDto.ok(
labelAllocateService.findLabelerDetail(userId, compareYyyy, targetYyyy, stage));
}
@Operation(summary = "작업 이관", description = "작업 이관")
@ApiResponses(
value = {
@ApiResponse(
responseCode = "201",
description = "등록 성공",
content =
@Content(
mediaType = "application/json",
schema = @Schema(implementation = Long.class),
examples = {
@ExampleObject(
name = "라벨러 할당 예시",
description = "라벨러 할당 예시",
value =
"""
value = {
@ApiResponse(
responseCode = "201",
description = "등록 성공",
content =
@Content(
mediaType = "application/json",
schema = @Schema(implementation = Long.class),
examples = {
@ExampleObject(
name = "라벨러 할당 예시",
description = "라벨러 할당 예시",
value =
"""
{
"autoType": "AUTO",
"stage": 4,
@@ -226,24 +230,29 @@ public class LabelAllocateApiController {
]
}
""")
})),
@ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content),
@ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content),
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
})
})),
@ApiResponse(responseCode = "400", description = "잘못된 요청 데이터", content = @Content),
@ApiResponse(responseCode = "404", description = "코드를 찾을 수 없음", content = @Content),
@ApiResponse(responseCode = "500", description = "서버 오류", content = @Content)
})
@PostMapping("/allocate-move")
public ApiResponseDto<Void> labelAllocateMove(
@io.swagger.v3.oas.annotations.parameters.RequestBody(
description = "라벨링 이관",
required = true,
content =
@Content(
mediaType = "application/json",
schema = @Schema(implementation = LabelAllocateDto.AllocateMoveDto.class)))
@RequestBody
LabelAllocateDto.AllocateMoveDto dto) {
@io.swagger.v3.oas.annotations.parameters.RequestBody(
description = "라벨링 이관",
required = true,
content =
@Content(
mediaType = "application/json",
schema = @Schema(implementation = LabelAllocateDto.AllocateMoveDto.class)))
@RequestBody
LabelAllocateDto.AllocateMoveDto dto) {
labelAllocateService.allocateMove(dto.getAutoType(), dto.getStage(), dto.getLabelers(), dto.getCompareYyyy(), dto.getTargetYyyy());
labelAllocateService.allocateMove(
dto.getAutoType(),
dto.getStage(),
dto.getLabelers(),
dto.getCompareYyyy(),
dto.getTargetYyyy());
return ApiResponseDto.ok(null);
}