From 71995ada9140a8da573da91f9ae7a17b9c16b5df Mon Sep 17 00:00:00 2001 From: wngktjd13 Date: Thu, 16 Oct 2025 14:36:42 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EC=97=B0=EC=B0=A8=EB=B3=84=20?= =?UTF-8?q?=ED=83=AD=20=ED=8C=8C=EC=9D=BC=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20=E2=80=93=20=ED=8C=8C=EC=9D=BC=20=EC=9C=A0=ED=98=95?= =?UTF-8?q?=203=EA=B0=80=EC=A7=80=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/file/enums/FileDomainType.java | 4 +++- .../dto/request/TaskPeriodUpdateRequest.java | 10 ++++++-- .../task/dto/response/TaskPeriodResponse.java | 23 ++++++++++++++---- .../domain/task/service/TaskService.java | 24 +++++++++++++++---- 4 files changed, 50 insertions(+), 11 deletions(-) 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..f0da1c28 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 @@ -541,12 +541,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()); - return TaskPeriodResponse.from(period, files); + List interimReportFiles = fileService.findAllByDomainTypeAndEntityId(FileDomainType.TASK_PERIOD_INTERIM_REPORT, periodId) + .stream() + .map(FileSummary::from) + .collect(Collectors.toList()); + + 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,8 +581,14 @@ 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); + if (request.periodFileIds() != null) { + fileService.syncFiles(request.periodFileIds(), FileDomainType.TASK_PERIOD_FILES, periodId); + } + if (request.interimReportFileIds() != null) { + fileService.syncFiles(request.interimReportFileIds(), FileDomainType.TASK_PERIOD_INTERIM_REPORT, periodId); + } + if (request.annualReportFileIds() != null) { + fileService.syncFiles(request.annualReportFileIds(), FileDomainType.TASK_PERIOD_ANNUAL_REPORT, periodId); } } From f93aee5f6cbffb366db127e6df40ead57e5bf669 Mon Sep 17 00:00:00 2001 From: wngktjd13 Date: Thu, 16 Oct 2025 14:47:11 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=ED=8C=8C=EC=9D=BC=20=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=ED=99=94=20=EB=A1=9C=EC=A7=81=20=EA=B3=B5=ED=86=B5=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=EB=A1=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/task/service/TaskService.java | 69 ++++++------------- 1 file changed, 20 insertions(+), 49 deletions(-) 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 f0da1c28..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) { @@ -581,15 +552,9 @@ public void updateTaskPeriod(Long userId, Long taskId, Long periodId, TaskPeriod taskPeriodRepository.save(period); - if (request.periodFileIds() != null) { - fileService.syncFiles(request.periodFileIds(), FileDomainType.TASK_PERIOD_FILES, periodId); - } - if (request.interimReportFileIds() != null) { - fileService.syncFiles(request.interimReportFileIds(), FileDomainType.TASK_PERIOD_INTERIM_REPORT, periodId); - } - if (request.annualReportFileIds() != null) { - fileService.syncFiles(request.annualReportFileIds(), FileDomainType.TASK_PERIOD_ANNUAL_REPORT, 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 @@ -743,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); + } + } }