diff --git a/src/main/java/com/bmilab/backend/domain/file/enums/FileDomainType.java b/src/main/java/com/bmilab/backend/domain/file/enums/FileDomainType.java index b40be85b..e163460f 100644 --- a/src/main/java/com/bmilab/backend/domain/file/enums/FileDomainType.java +++ b/src/main/java/com/bmilab/backend/domain/file/enums/FileDomainType.java @@ -18,6 +18,8 @@ public enum FileDomainType { TASK_DRAFT_PRESENTATION, TASK_AGREEMENT_FINAL_PROPOSAL, TASK_AGREEMENT_FINAL_SUBMISSION, - TASK_PERIOD, + TASK_PERIOD_FILES, + TASK_PERIOD_INTERIM_REPORT, + TASK_PERIOD_ANNUAL_REPORT, TEMP } diff --git a/src/main/java/com/bmilab/backend/domain/task/dto/request/TaskPeriodUpdateRequest.java b/src/main/java/com/bmilab/backend/domain/task/dto/request/TaskPeriodUpdateRequest.java index 020871d8..9309bafc 100644 --- a/src/main/java/com/bmilab/backend/domain/task/dto/request/TaskPeriodUpdateRequest.java +++ b/src/main/java/com/bmilab/backend/domain/task/dto/request/TaskPeriodUpdateRequest.java @@ -22,7 +22,13 @@ public record TaskPeriodUpdateRequest( @Schema(description = "과제 참여자 ID 목록") List memberIds, - @Schema(description = "연차별 첨부파일 ID 목록") - List fileIds + @Schema(description = "연차별 관련 파일 ID 목록") + List periodFileIds, + + @Schema(description = "중간보고 파일 ID 목록") + List interimReportFileIds, + + @Schema(description = "연차보고 파일 ID 목록") + List annualReportFileIds ) { } diff --git a/src/main/java/com/bmilab/backend/domain/task/dto/response/TaskPeriodResponse.java b/src/main/java/com/bmilab/backend/domain/task/dto/response/TaskPeriodResponse.java index cef7809c..ca1c879a 100644 --- a/src/main/java/com/bmilab/backend/domain/task/dto/response/TaskPeriodResponse.java +++ b/src/main/java/com/bmilab/backend/domain/task/dto/response/TaskPeriodResponse.java @@ -30,8 +30,14 @@ public record TaskPeriodResponse( @Schema(description = "과제 참여자 목록") List members, - @Schema(description = "연차별 첨부파일 목록") - List files + @Schema(description = "연차별 관련 파일 목록") + List periodFiles, + + @Schema(description = "중간보고 파일 목록") + List interimReportFiles, + + @Schema(description = "연차보고 파일 목록") + List annualReportFiles ) { public static TaskPeriodResponse from(TaskPeriod period) { List members = period.getMembers().stream() @@ -46,11 +52,18 @@ public static TaskPeriodResponse from(TaskPeriod period) { period.getManager() != null ? period.getManager().getId() : null, period.getManager() != null ? period.getManager().getName() : null, members, + List.of(), + List.of(), List.of() ); } - public static TaskPeriodResponse from(TaskPeriod period, List files) { + public static TaskPeriodResponse from( + TaskPeriod period, + List periodFiles, + List interimReportFiles, + List annualReportFiles + ) { List members = period.getMembers().stream() .map(user -> new TaskMemberSummary(user.getId(), user.getName(), user.getEmail())) .collect(Collectors.toList()); @@ -63,7 +76,9 @@ public static TaskPeriodResponse from(TaskPeriod period, List files period.getManager() != null ? period.getManager().getId() : null, period.getManager() != null ? period.getManager().getName() : null, members, - files + periodFiles, + interimReportFiles, + annualReportFiles ); } } diff --git a/src/main/java/com/bmilab/backend/domain/task/service/TaskService.java b/src/main/java/com/bmilab/backend/domain/task/service/TaskService.java index 4a121656..a103d214 100644 --- a/src/main/java/com/bmilab/backend/domain/task/service/TaskService.java +++ b/src/main/java/com/bmilab/backend/domain/task/service/TaskService.java @@ -280,13 +280,8 @@ public void updateBasicInfo(Long userId, Long taskId, TaskBasicInfoUpdateRequest taskBasicInfoRepository.save(basicInfo); - if (request.rfpFileIds() != null) { - fileService.syncFiles(request.rfpFileIds(), FileDomainType.TASK_RFP, taskId); - } - - if (request.announcementFileIds() != null) { - fileService.syncFiles(request.announcementFileIds(), FileDomainType.TASK_ANNOUNCEMENT, taskId); - } + syncFiles(taskId, request.rfpFileIds(), FileDomainType.TASK_RFP); + syncFiles(taskId, request.announcementFileIds(), FileDomainType.TASK_ANNOUNCEMENT); } @Transactional @@ -315,25 +310,11 @@ public void updateProposal(Long userId, Long taskId, TaskProposalUpdateRequest r taskProposalRepository.save(proposal); - if (request.finalProposalFileIds() != null) { - fileService.syncFiles(request.finalProposalFileIds(), FileDomainType.TASK_FINAL_PROPOSAL, taskId); - } - - if (request.finalSubmissionFileIds() != null) { - fileService.syncFiles(request.finalSubmissionFileIds(), FileDomainType.TASK_FINAL_SUBMISSION, taskId); - } - - if (request.relatedFileIds() != null) { - fileService.syncFiles(request.relatedFileIds(), FileDomainType.TASK_PROPOSAL_RELATED, taskId); - } - - if (request.meetingNotesFileIds() != null) { - fileService.syncFiles(request.meetingNotesFileIds(), FileDomainType.TASK_PROPOSAL_MEETING_NOTES, taskId); - } - - if (request.structureDiagramFileIds() != null) { - fileService.syncFiles(request.structureDiagramFileIds(), FileDomainType.TASK_STRUCTURE_DIAGRAM, taskId); - } + syncFiles(taskId, request.finalProposalFileIds(), FileDomainType.TASK_FINAL_PROPOSAL); + syncFiles(taskId, request.finalSubmissionFileIds(), FileDomainType.TASK_FINAL_SUBMISSION); + syncFiles(taskId, request.relatedFileIds(), FileDomainType.TASK_PROPOSAL_RELATED); + syncFiles(taskId, request.meetingNotesFileIds(), FileDomainType.TASK_PROPOSAL_MEETING_NOTES); + syncFiles(taskId, request.structureDiagramFileIds(), FileDomainType.TASK_STRUCTURE_DIAGRAM); taskProposalWriterRepository.deleteByTaskProposal(proposal); @@ -463,13 +444,8 @@ public void updatePresentation(Long userId, Long taskId, TaskPresentationUpdateR taskPresentationRepository.save(presentation); - if (request.finalPresentationFileIds() != null) { - fileService.syncFiles(request.finalPresentationFileIds(), FileDomainType.TASK_FINAL_PRESENTATION, taskId); - } - - if (request.draftPresentationFileIds() != null) { - fileService.syncFiles(request.draftPresentationFileIds(), FileDomainType.TASK_DRAFT_PRESENTATION, taskId); - } + syncFiles(taskId, request.finalPresentationFileIds(), FileDomainType.TASK_FINAL_PRESENTATION); + syncFiles(taskId, request.draftPresentationFileIds(), FileDomainType.TASK_DRAFT_PRESENTATION); taskPresentationMakerRepository.deleteByTaskPresentation(presentation); @@ -525,13 +501,8 @@ public void updateAgreement(Long userId, Long taskId, TaskAgreementUpdateRequest taskAgreementRepository.save(agreement); - if (request.agreementFinalProposalFileIds() != null) { - fileService.syncFiles(request.agreementFinalProposalFileIds(), FileDomainType.TASK_AGREEMENT_FINAL_PROPOSAL, taskId); - } - - if (request.agreementFinalSubmissionFileIds() != null) { - fileService.syncFiles(request.agreementFinalSubmissionFileIds(), FileDomainType.TASK_AGREEMENT_FINAL_SUBMISSION, taskId); - } + syncFiles(taskId, request.agreementFinalProposalFileIds(), FileDomainType.TASK_AGREEMENT_FINAL_PROPOSAL); + syncFiles(taskId, request.agreementFinalSubmissionFileIds(), FileDomainType.TASK_AGREEMENT_FINAL_SUBMISSION); } public TaskPeriodResponse getTaskPeriod(Long userId, Long taskId, Long periodId) { @@ -541,12 +512,22 @@ public TaskPeriodResponse getTaskPeriod(Long userId, Long taskId, Long periodId) TaskPeriod period = taskPeriodRepository.findById(periodId) .orElseThrow(() -> new ApiException(TaskErrorCode.TASK_NOT_FOUND)); - List files = fileService.findAllByDomainTypeAndEntityId(FileDomainType.TASK_PERIOD, periodId) + List periodFiles = fileService.findAllByDomainTypeAndEntityId(FileDomainType.TASK_PERIOD_FILES, periodId) + .stream() + .map(FileSummary::from) + .collect(Collectors.toList()); + + List interimReportFiles = fileService.findAllByDomainTypeAndEntityId(FileDomainType.TASK_PERIOD_INTERIM_REPORT, periodId) .stream() .map(FileSummary::from) .collect(Collectors.toList()); - return TaskPeriodResponse.from(period, files); + List annualReportFiles = fileService.findAllByDomainTypeAndEntityId(FileDomainType.TASK_PERIOD_ANNUAL_REPORT, periodId) + .stream() + .map(FileSummary::from) + .collect(Collectors.toList()); + + return TaskPeriodResponse.from(period, periodFiles, interimReportFiles, annualReportFiles); } @Transactional @@ -571,9 +552,9 @@ public void updateTaskPeriod(Long userId, Long taskId, Long periodId, TaskPeriod taskPeriodRepository.save(period); - if (request.fileIds() != null) { - fileService.syncFiles(request.fileIds(), FileDomainType.TASK_PERIOD, periodId); - } + syncFiles(periodId, request.periodFileIds(), FileDomainType.TASK_PERIOD_FILES); + syncFiles(periodId, request.interimReportFileIds(), FileDomainType.TASK_PERIOD_INTERIM_REPORT); + syncFiles(periodId, request.annualReportFileIds(), FileDomainType.TASK_PERIOD_ANNUAL_REPORT); } @Transactional @@ -727,4 +708,10 @@ private Task getTaskById(Long taskId) { return taskRepository.findById(taskId).orElseThrow(() -> new ApiException(TaskErrorCode.TASK_NOT_FOUND)); } + + private void syncFiles(Long entityId, List fileIds, FileDomainType domainType) { + if (fileIds != null && !fileIds.isEmpty()) { + fileService.syncFiles(fileIds, domainType, entityId); + } + } }