From adf3072b07d5bd7d0dfe163fa2ed7be5e66f17ed Mon Sep 17 00:00:00 2001 From: andrew Date: Sun, 2 Feb 2025 20:05:23 +0900 Subject: [PATCH 1/4] =?UTF-8?q?CLAP-220=20Fix:=20label=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=95=84=ED=82=A4=ED=85=8D=EC=B2=98=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/admin/FindLabelAdminController.java | 5 +++-- .../web/admin/ManagementLabelController.java | 12 +++++++----- ...abelRequest.java => CreateLabelRequest.java} | 10 +++++++--- .../inbound/web/dto/label/EditLabelRequest.java | 17 +++++++++++++++++ .../web/dto/task/UpdateTaskLabelRequest.java | 6 ++++++ .../port/inbound/admin/AddLabelUsecase.java | 10 ---------- .../port/inbound/admin/UpdateLabelUsecase.java | 7 ------- .../port/inbound/label/AddLabelUsecase.java | 10 ++++++++++ .../inbound/label/FindLabelListUsecase.java | 1 - .../port/inbound/label/UpdateLabelUsecase.java | 7 +++++++ .../service/label/AddLabelService.java | 6 +++--- .../service/label/FindLabelListService.java | 3 ++- .../service/label/ManageLabelService.java | 6 +++--- .../clap/server/domain/model/task/Label.java | 7 ++++--- 14 files changed, 69 insertions(+), 38 deletions(-) rename src/main/java/clap/server/adapter/inbound/web/dto/label/{AddAndEditLabelRequest.java => CreateLabelRequest.java} (73%) create mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/label/EditLabelRequest.java delete mode 100644 src/main/java/clap/server/application/port/inbound/admin/AddLabelUsecase.java delete mode 100644 src/main/java/clap/server/application/port/inbound/admin/UpdateLabelUsecase.java create mode 100644 src/main/java/clap/server/application/port/inbound/label/AddLabelUsecase.java create mode 100644 src/main/java/clap/server/application/port/inbound/label/UpdateLabelUsecase.java diff --git a/src/main/java/clap/server/adapter/inbound/web/admin/FindLabelAdminController.java b/src/main/java/clap/server/adapter/inbound/web/admin/FindLabelAdminController.java index 634379cc..5aa59862 100644 --- a/src/main/java/clap/server/adapter/inbound/web/admin/FindLabelAdminController.java +++ b/src/main/java/clap/server/adapter/inbound/web/admin/FindLabelAdminController.java @@ -3,6 +3,7 @@ import clap.server.adapter.inbound.security.SecurityUserDetails; import clap.server.adapter.inbound.web.dto.common.SliceResponse; import clap.server.adapter.inbound.web.dto.label.FindLabelListResponse; +import clap.server.application.port.inbound.label.FindLabelListAdminUsecase; import clap.server.application.port.inbound.label.FindLabelListUsecase; import clap.server.common.annotation.architecture.WebAdapter; import io.swagger.v3.oas.annotations.Operation; @@ -22,13 +23,13 @@ @RequestMapping("/api/managements/labels") public class FindLabelAdminController { - private final FindLabelListUsecase findLabelListUsecase; + private final FindLabelListAdminUsecase findLabelListAdminUsecase; @Operation(summary = "구분 목록 조회 API") @Secured({"ROLE_ADMIN"}) @GetMapping public ResponseEntity> findLabelList( @AuthenticationPrincipal SecurityUserDetails userInfo) { - return ResponseEntity.ok(findLabelListUsecase.findLabelListAdmin(userInfo.getUserId())); + return ResponseEntity.ok(findLabelListAdminUsecase.findLabelListAdmin(userInfo.getUserId())); } } diff --git a/src/main/java/clap/server/adapter/inbound/web/admin/ManagementLabelController.java b/src/main/java/clap/server/adapter/inbound/web/admin/ManagementLabelController.java index 00ccd586..1117b19c 100644 --- a/src/main/java/clap/server/adapter/inbound/web/admin/ManagementLabelController.java +++ b/src/main/java/clap/server/adapter/inbound/web/admin/ManagementLabelController.java @@ -1,15 +1,17 @@ package clap.server.adapter.inbound.web.admin; import clap.server.adapter.inbound.security.SecurityUserDetails; -import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest; -import clap.server.application.port.inbound.admin.AddLabelUsecase; +import clap.server.adapter.inbound.web.dto.label.CreateLabelRequest; +import clap.server.adapter.inbound.web.dto.label.EditLabelRequest; +import clap.server.application.port.inbound.label.AddLabelUsecase; import clap.server.application.port.inbound.admin.DeleteLabelUsecase; -import clap.server.application.port.inbound.admin.UpdateLabelUsecase; +import clap.server.application.port.inbound.label.UpdateLabelUsecase; import clap.server.common.annotation.architecture.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.security.access.annotation.Secured; import org.springframework.security.core.annotation.AuthenticationPrincipal; @@ -29,7 +31,7 @@ public class ManagementLabelController { @PostMapping @Secured({"ROLE_ADMIN"}) public void addLabel(@AuthenticationPrincipal SecurityUserDetails userInfo, - @RequestBody AddAndEditLabelRequest request) { + @Valid @RequestBody CreateLabelRequest request) { addLabelUsecase.addLabel(userInfo.getUserId(), request); } @@ -39,7 +41,7 @@ public void addLabel(@AuthenticationPrincipal SecurityUserDetails userInfo, @Secured({"ROLE_ADMIN"}) public void updateLabel(@AuthenticationPrincipal SecurityUserDetails userInfo, @PathVariable Long labelId, - @RequestBody AddAndEditLabelRequest request) { + @Valid @RequestBody EditLabelRequest request) { updateLabelUsecase.editLabel(userInfo.getUserId(), labelId, request); } diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/label/AddAndEditLabelRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/label/CreateLabelRequest.java similarity index 73% rename from src/main/java/clap/server/adapter/inbound/web/dto/label/AddAndEditLabelRequest.java rename to src/main/java/clap/server/adapter/inbound/web/dto/label/CreateLabelRequest.java index 005235e3..cc4e7a0e 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/label/AddAndEditLabelRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/label/CreateLabelRequest.java @@ -1,13 +1,17 @@ package clap.server.adapter.inbound.web.dto.label; -import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; -public record AddAndEditLabelRequest( +public record CreateLabelRequest( @Schema(description = "구분(label) 이름") + @NotBlank String labelName, + @Schema(description = "구분(label) 색상") + @NotBlank LabelColor labelColor -) {} +) { +} diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/label/EditLabelRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/label/EditLabelRequest.java new file mode 100644 index 00000000..ab56f1af --- /dev/null +++ b/src/main/java/clap/server/adapter/inbound/web/dto/label/EditLabelRequest.java @@ -0,0 +1,17 @@ +package clap.server.adapter.inbound.web.dto.label; + +import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; + +public record EditLabelRequest( + + @Schema(description = "구분(label) 이름") + @NotBlank + String labelName, + + @Schema(description = "구분(label) 색상") + @NotBlank + LabelColor labelColor +) { +} diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskLabelRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskLabelRequest.java index 46e6bab5..372bcf60 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskLabelRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskLabelRequest.java @@ -1,6 +1,12 @@ package clap.server.adapter.inbound.web.dto.task; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; + public record UpdateTaskLabelRequest( + + @Schema(description = "변경할 구분 고유 ID", example = "1") + @NotBlank Long labelId ) { } diff --git a/src/main/java/clap/server/application/port/inbound/admin/AddLabelUsecase.java b/src/main/java/clap/server/application/port/inbound/admin/AddLabelUsecase.java deleted file mode 100644 index 23543723..00000000 --- a/src/main/java/clap/server/application/port/inbound/admin/AddLabelUsecase.java +++ /dev/null @@ -1,10 +0,0 @@ -package clap.server.application.port.inbound.admin; - -import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest; - -public interface AddLabelUsecase { - - void addLabel(Long adminId, AddAndEditLabelRequest request); - - -} diff --git a/src/main/java/clap/server/application/port/inbound/admin/UpdateLabelUsecase.java b/src/main/java/clap/server/application/port/inbound/admin/UpdateLabelUsecase.java deleted file mode 100644 index ca156b8b..00000000 --- a/src/main/java/clap/server/application/port/inbound/admin/UpdateLabelUsecase.java +++ /dev/null @@ -1,7 +0,0 @@ -package clap.server.application.port.inbound.admin; - -import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest; - -public interface UpdateLabelUsecase { - void editLabel(Long adminId, Long labelId, AddAndEditLabelRequest request); -} diff --git a/src/main/java/clap/server/application/port/inbound/label/AddLabelUsecase.java b/src/main/java/clap/server/application/port/inbound/label/AddLabelUsecase.java new file mode 100644 index 00000000..1acc97cd --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/label/AddLabelUsecase.java @@ -0,0 +1,10 @@ +package clap.server.application.port.inbound.label; + +import clap.server.adapter.inbound.web.dto.label.CreateLabelRequest; + +public interface AddLabelUsecase { + + void addLabel(Long adminId, CreateLabelRequest request); + + +} diff --git a/src/main/java/clap/server/application/port/inbound/label/FindLabelListUsecase.java b/src/main/java/clap/server/application/port/inbound/label/FindLabelListUsecase.java index e475b489..408cdcea 100644 --- a/src/main/java/clap/server/application/port/inbound/label/FindLabelListUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/label/FindLabelListUsecase.java @@ -9,5 +9,4 @@ public interface FindLabelListUsecase { SliceResponse findLabelList(Long memberId, Pageable pageable); - List findLabelListAdmin(Long memberId); } diff --git a/src/main/java/clap/server/application/port/inbound/label/UpdateLabelUsecase.java b/src/main/java/clap/server/application/port/inbound/label/UpdateLabelUsecase.java new file mode 100644 index 00000000..ccd18f21 --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/label/UpdateLabelUsecase.java @@ -0,0 +1,7 @@ +package clap.server.application.port.inbound.label; + +import clap.server.adapter.inbound.web.dto.label.EditLabelRequest; + +public interface UpdateLabelUsecase { + void editLabel(Long adminId, Long labelId, EditLabelRequest request); +} diff --git a/src/main/java/clap/server/application/service/label/AddLabelService.java b/src/main/java/clap/server/application/service/label/AddLabelService.java index 85cb8579..38821bed 100644 --- a/src/main/java/clap/server/application/service/label/AddLabelService.java +++ b/src/main/java/clap/server/application/service/label/AddLabelService.java @@ -1,7 +1,7 @@ package clap.server.application.service.label; -import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest; -import clap.server.application.port.inbound.admin.AddLabelUsecase; +import clap.server.adapter.inbound.web.dto.label.CreateLabelRequest; +import clap.server.application.port.inbound.label.AddLabelUsecase; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.outbound.task.CommandLabelPort; import clap.server.common.annotation.architecture.ApplicationService; @@ -19,7 +19,7 @@ public class AddLabelService implements AddLabelUsecase { @Transactional @Override - public void addLabel(Long adminId, AddAndEditLabelRequest request) { + public void addLabel(Long adminId, CreateLabelRequest request) { Member admin = memberService.findActiveMember(adminId); Label label = Label.addLabel(admin, request); commandLabelPort.save(label); diff --git a/src/main/java/clap/server/application/service/label/FindLabelListService.java b/src/main/java/clap/server/application/service/label/FindLabelListService.java index 57d23a49..1b0b39c4 100644 --- a/src/main/java/clap/server/application/service/label/FindLabelListService.java +++ b/src/main/java/clap/server/application/service/label/FindLabelListService.java @@ -4,6 +4,7 @@ import clap.server.adapter.inbound.web.dto.label.FindLabelListResponse; import clap.server.application.mapper.LabelMapper; import clap.server.application.port.inbound.domain.MemberService; +import clap.server.application.port.inbound.label.FindLabelListAdminUsecase; import clap.server.application.port.inbound.label.FindLabelListUsecase; import clap.server.application.port.outbound.task.LoadLabelPort; import clap.server.common.annotation.architecture.ApplicationService; @@ -19,7 +20,7 @@ @ApplicationService @RequiredArgsConstructor @Transactional(readOnly = true) -public class FindLabelListService implements FindLabelListUsecase { +public class FindLabelListService implements FindLabelListUsecase, FindLabelListAdminUsecase { private final LoadLabelPort loadLabelPort; private final MemberService memberService; diff --git a/src/main/java/clap/server/application/service/label/ManageLabelService.java b/src/main/java/clap/server/application/service/label/ManageLabelService.java index 69bcf062..a9cb930e 100644 --- a/src/main/java/clap/server/application/service/label/ManageLabelService.java +++ b/src/main/java/clap/server/application/service/label/ManageLabelService.java @@ -1,8 +1,8 @@ package clap.server.application.service.label; -import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest; +import clap.server.adapter.inbound.web.dto.label.EditLabelRequest; import clap.server.application.port.inbound.admin.DeleteLabelUsecase; -import clap.server.application.port.inbound.admin.UpdateLabelUsecase; +import clap.server.application.port.inbound.label.UpdateLabelUsecase; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.outbound.task.CommandLabelPort; import clap.server.application.port.outbound.task.LoadLabelPort; @@ -23,7 +23,7 @@ public class ManageLabelService implements UpdateLabelUsecase, DeleteLabelUsecas @Transactional @Override - public void editLabel(Long adminId, Long labelId, AddAndEditLabelRequest request) { + public void editLabel(Long adminId, Long labelId, EditLabelRequest request) { memberService.findActiveMember(adminId); Label label = loadLabelPort.findById(labelId) diff --git a/src/main/java/clap/server/domain/model/task/Label.java b/src/main/java/clap/server/domain/model/task/Label.java index 48e8a8ae..cbd477a6 100644 --- a/src/main/java/clap/server/domain/model/task/Label.java +++ b/src/main/java/clap/server/domain/model/task/Label.java @@ -1,6 +1,7 @@ package clap.server.domain.model.task; -import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest; +import clap.server.adapter.inbound.web.dto.label.CreateLabelRequest; +import clap.server.adapter.inbound.web.dto.label.EditLabelRequest; import clap.server.adapter.outbound.persistense.entity.task.constant.LabelColor; import clap.server.domain.model.common.BaseTime; import clap.server.domain.model.member.Member; @@ -19,7 +20,7 @@ public class Label extends BaseTime { private LabelColor labelColor; private boolean isDeleted; - public static Label addLabel(Member admin, AddAndEditLabelRequest request) { + public static Label addLabel(Member admin, CreateLabelRequest request) { return Label.builder() .admin(admin) .labelName(request.labelName()) @@ -28,7 +29,7 @@ public static Label addLabel(Member admin, AddAndEditLabelRequest request) { .build(); } - public void updateLabel(AddAndEditLabelRequest request) { + public void updateLabel(EditLabelRequest request) { this.labelName = request.labelName(); this.labelColor = request.labelColor(); } From d5806e70651678650f0b8837580af0f5f66c1a2f Mon Sep 17 00:00:00 2001 From: andrew Date: Sun, 2 Feb 2025 20:06:10 +0900 Subject: [PATCH 2/4] =?UTF-8?q?CLAP-220=20Fix:=20notification=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=95=84=ED=82=A4=ED=85=8D=EC=B2=98=20=EA=B5=AC?= =?UTF-8?q?=EC=A1=B0=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../notification/ManagementNotificationController.java | 8 +++----- .../port/inbound/label/FindLabelListAdminUsecase.java | 9 +++++++++ .../notification/UpdateAllNotificationUsecase.java | 6 ++++++ .../inbound/notification/UpdateNotificationUsecase.java | 2 -- .../service/notification/ReadNotificationService.java | 3 ++- 5 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 src/main/java/clap/server/application/port/inbound/label/FindLabelListAdminUsecase.java create mode 100644 src/main/java/clap/server/application/port/inbound/notification/UpdateAllNotificationUsecase.java diff --git a/src/main/java/clap/server/adapter/inbound/web/notification/ManagementNotificationController.java b/src/main/java/clap/server/adapter/inbound/web/notification/ManagementNotificationController.java index 79db55ca..ac78c15f 100644 --- a/src/main/java/clap/server/adapter/inbound/web/notification/ManagementNotificationController.java +++ b/src/main/java/clap/server/adapter/inbound/web/notification/ManagementNotificationController.java @@ -1,10 +1,7 @@ package clap.server.adapter.inbound.web.notification; import clap.server.adapter.inbound.security.SecurityUserDetails; -import clap.server.application.port.inbound.notification.EnableAgitUsecase; -import clap.server.application.port.inbound.notification.EnableEmailUsecase; -import clap.server.application.port.inbound.notification.EnableKakaoUsecase; -import clap.server.application.port.inbound.notification.UpdateNotificationUsecase; +import clap.server.application.port.inbound.notification.*; import clap.server.common.annotation.architecture.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -25,6 +22,7 @@ public class ManagementNotificationController { private final UpdateNotificationUsecase updateNotificationUsecase; + private final UpdateAllNotificationUsecase updateAllNotificationUsecase; private final EnableKakaoUsecase enableKakaoUsecase; private final EnableAgitUsecase enableAgitUsecase; private final EnableEmailUsecase enableEmailUsecase; @@ -40,7 +38,7 @@ public void updateNotificationIsRead(@AuthenticationPrincipal SecurityUserDetail @Operation(summary = "알림 목록에서 전체 읽음 버튼을 눌렀을 때 전체 읽음 처리") @PatchMapping public void updateAllNotificationIsRead(@AuthenticationPrincipal SecurityUserDetails userInfo) { - updateNotificationUsecase.updateAllNotification(userInfo.getUserId()); + updateAllNotificationUsecase.updateAllNotification(userInfo.getUserId()); } @Operation(summary = "카카오 푸시 알림 활성화/비활성화 API", description = "알림 거부였을 시 -> 승인으로 변경, 알림 승인이였을 시 -> 거부로 변경") diff --git a/src/main/java/clap/server/application/port/inbound/label/FindLabelListAdminUsecase.java b/src/main/java/clap/server/application/port/inbound/label/FindLabelListAdminUsecase.java new file mode 100644 index 00000000..7ef34d50 --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/label/FindLabelListAdminUsecase.java @@ -0,0 +1,9 @@ +package clap.server.application.port.inbound.label; + +import clap.server.adapter.inbound.web.dto.label.FindLabelListResponse; + +import java.util.List; + +public interface FindLabelListAdminUsecase { + List findLabelListAdmin(Long memberId); +} diff --git a/src/main/java/clap/server/application/port/inbound/notification/UpdateAllNotificationUsecase.java b/src/main/java/clap/server/application/port/inbound/notification/UpdateAllNotificationUsecase.java new file mode 100644 index 00000000..eea99666 --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/notification/UpdateAllNotificationUsecase.java @@ -0,0 +1,6 @@ +package clap.server.application.port.inbound.notification; + +public interface UpdateAllNotificationUsecase { + + void updateAllNotification(Long memberId); +} diff --git a/src/main/java/clap/server/application/port/inbound/notification/UpdateNotificationUsecase.java b/src/main/java/clap/server/application/port/inbound/notification/UpdateNotificationUsecase.java index c7949842..d9c1ccac 100644 --- a/src/main/java/clap/server/application/port/inbound/notification/UpdateNotificationUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/notification/UpdateNotificationUsecase.java @@ -2,6 +2,4 @@ public interface UpdateNotificationUsecase { void updateNotification(Long userId, Long notificationId); - - void updateAllNotification(Long memberId); } diff --git a/src/main/java/clap/server/application/service/notification/ReadNotificationService.java b/src/main/java/clap/server/application/service/notification/ReadNotificationService.java index 142a469f..4b04a987 100644 --- a/src/main/java/clap/server/application/service/notification/ReadNotificationService.java +++ b/src/main/java/clap/server/application/service/notification/ReadNotificationService.java @@ -1,6 +1,7 @@ package clap.server.application.service.notification; import clap.server.application.port.inbound.domain.MemberService; +import clap.server.application.port.inbound.notification.UpdateAllNotificationUsecase; import clap.server.application.port.inbound.notification.UpdateNotificationUsecase; import clap.server.application.port.outbound.notification.CommandNotificationPort; import clap.server.application.port.outbound.notification.LoadNotificationPort; @@ -15,7 +16,7 @@ @ApplicationService @RequiredArgsConstructor -public class ReadNotificationService implements UpdateNotificationUsecase { +public class ReadNotificationService implements UpdateNotificationUsecase, UpdateAllNotificationUsecase { private final MemberService memberService; private final LoadNotificationPort loadNotificationPort; From 98552f90b84bbc2d7e0ecdd7032272b7553d6ae6 Mon Sep 17 00:00:00 2001 From: andrew Date: Sun, 2 Feb 2025 20:07:05 +0900 Subject: [PATCH 3/4] =?UTF-8?q?CLAP-220=20Fix:=20=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=EC=9E=90=20=EB=B3=80=EA=B2=BD=20=EA=B4=80=EB=A0=A8=20=EC=95=84?= =?UTF-8?q?=ED=82=A4=ED=85=8D=EC=B2=98=20=EA=B5=AC=EC=A1=B0=EC=97=90=20?= =?UTF-8?q?=EB=A7=9E=EA=B2=8C=20=EC=A0=84=EC=B2=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inbound/web/dto/task/UpdateTaskProcessorRequest.java | 6 ++++++ .../adapter/inbound/web/task/ChangeTaskController.java | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskProcessorRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskProcessorRequest.java index 547e00f2..3e2ccf5b 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskProcessorRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskProcessorRequest.java @@ -1,7 +1,13 @@ package clap.server.adapter.inbound.web.dto.task; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; + public record UpdateTaskProcessorRequest( + + @Schema(description = "변경할 담당자 고유 ID", example = "1") + @NotBlank Long processorId ) { } diff --git a/src/main/java/clap/server/adapter/inbound/web/task/ChangeTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/ChangeTaskController.java index 3ca5a0f2..3b418102 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/ChangeTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/ChangeTaskController.java @@ -47,7 +47,7 @@ public ResponseEntity updateTaskState( public ResponseEntity updateTaskProcessor( @PathVariable Long taskId, @AuthenticationPrincipal SecurityUserDetails userInfo, - @RequestBody UpdateTaskProcessorRequest updateTaskProcessorRequest) { + @Valid @RequestBody UpdateTaskProcessorRequest updateTaskProcessorRequest) { return ResponseEntity.ok(updateTaskProcessorUsecase.updateTaskProcessor(taskId, userInfo.getUserId(), updateTaskProcessorRequest)); } @@ -57,7 +57,7 @@ public ResponseEntity updateTaskProcessor( public ResponseEntity updateTaskLabel( @PathVariable Long taskId, @AuthenticationPrincipal SecurityUserDetails userInfo, - @RequestBody UpdateTaskLabelRequest updateTaskLabelRequest) { + @Valid @RequestBody UpdateTaskLabelRequest updateTaskLabelRequest) { return ResponseEntity.ok(updateTaskLabelUsecase.updateTaskLabel(taskId, userInfo.getUserId(), updateTaskLabelRequest)); } @@ -67,7 +67,7 @@ public ResponseEntity updateTaskLabel( public ResponseEntity approvalTask( @RequestBody @Valid ApprovalTaskRequest approvalTaskRequest, @PathVariable Long taskId, - @AuthenticationPrincipal SecurityUserDetails userInfo){ + @Valid @AuthenticationPrincipal SecurityUserDetails userInfo){ return ResponseEntity.ok(approvalTaskUsecase.approvalTaskByReviewer(userInfo.getUserId(), taskId, approvalTaskRequest)); } } From f63bfd37c2292585c7e0a267b8ea3c35e5f3f27c Mon Sep 17 00:00:00 2001 From: andrew Date: Sun, 2 Feb 2025 20:07:43 +0900 Subject: [PATCH 4/4] =?UTF-8?q?CLAP-220=20Fix:=20=EB=8C=93=EA=B8=80=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EC=95=84=ED=82=A4=ED=85=8D=EC=B2=98=20?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=EC=97=90=20=EB=A7=9E=EA=B2=8C=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/comment/CommandCommentController.java | 15 +++++++++------ .../web/comment/PostCommentController.java | 17 +++++++++-------- .../web/dto/comment/CreateCommentRequest.java | 11 +++++++++++ .../web/dto/comment/EditCommentRequest.java | 11 +++++++++++ .../web/dto/task/PostAndEditCommentRequest.java | 10 ---------- .../inbound/comment/CommandCommentUsecase.java | 10 ---------- .../inbound/comment/DeleteCommentUsecase.java | 6 ++++++ .../inbound/comment/EditCommentUsecase.java | 8 ++++++++ .../inbound/comment/PostCommentUsecase.java | 13 ------------- .../comment/SaveCommentAttachmentUsecase.java | 8 ++++++++ .../inbound/comment/SaveCommentUsecase.java | 8 ++++++++ .../service/comment/CommandCommentService.java | 9 +++++---- .../service/comment/PostCommentService.java | 9 +++++---- .../clap/server/domain/model/task/Comment.java | 2 -- 14 files changed, 80 insertions(+), 57 deletions(-) create mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/comment/CreateCommentRequest.java create mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/comment/EditCommentRequest.java delete mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/task/PostAndEditCommentRequest.java delete mode 100644 src/main/java/clap/server/application/port/inbound/comment/CommandCommentUsecase.java create mode 100644 src/main/java/clap/server/application/port/inbound/comment/DeleteCommentUsecase.java create mode 100644 src/main/java/clap/server/application/port/inbound/comment/EditCommentUsecase.java delete mode 100644 src/main/java/clap/server/application/port/inbound/comment/PostCommentUsecase.java create mode 100644 src/main/java/clap/server/application/port/inbound/comment/SaveCommentAttachmentUsecase.java create mode 100644 src/main/java/clap/server/application/port/inbound/comment/SaveCommentUsecase.java diff --git a/src/main/java/clap/server/adapter/inbound/web/comment/CommandCommentController.java b/src/main/java/clap/server/adapter/inbound/web/comment/CommandCommentController.java index 6ddd1f06..335e243f 100644 --- a/src/main/java/clap/server/adapter/inbound/web/comment/CommandCommentController.java +++ b/src/main/java/clap/server/adapter/inbound/web/comment/CommandCommentController.java @@ -1,13 +1,15 @@ package clap.server.adapter.inbound.web.comment; import clap.server.adapter.inbound.security.SecurityUserDetails; -import clap.server.adapter.inbound.web.dto.task.PostAndEditCommentRequest; -import clap.server.application.port.inbound.comment.CommandCommentUsecase; +import clap.server.adapter.inbound.web.dto.comment.EditCommentRequest; +import clap.server.application.port.inbound.comment.DeleteCommentUsecase; +import clap.server.application.port.inbound.comment.EditCommentUsecase; import clap.server.common.annotation.architecture.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.security.access.annotation.Secured; import org.springframework.security.core.annotation.AuthenticationPrincipal; @@ -20,7 +22,8 @@ @RequestMapping("/api/comment") public class CommandCommentController { - private final CommandCommentUsecase commandCommentUsecase; + private final EditCommentUsecase editCommentUsecase; + private final DeleteCommentUsecase deleteCommentUsecase; @Operation(summary = "댓글 수정") @Parameter(name = "commentId", description = "수정할 댓글 고유 ID", required = true, in = ParameterIn.PATH) @@ -29,8 +32,8 @@ public class CommandCommentController { public void editComment( @AuthenticationPrincipal SecurityUserDetails userInfo, @PathVariable Long commentId, - @RequestBody PostAndEditCommentRequest request) { - commandCommentUsecase.updateComment(userInfo.getUserId(), commentId, request); + @Valid @RequestBody EditCommentRequest request) { + editCommentUsecase.editComment(userInfo.getUserId(), commentId, request); } @Operation(summary = "댓글 삭제", description = "첨부파일 댓글일 경우 request body에 삭제할 파일 ID를 리스트로 전달") @@ -40,7 +43,7 @@ public void editComment( public void deleteComment( @AuthenticationPrincipal SecurityUserDetails userInfo, @PathVariable Long commentId) { - commandCommentUsecase.deleteComment(userInfo.getUserId(), commentId); + deleteCommentUsecase.deleteComment(userInfo.getUserId(), commentId); } } diff --git a/src/main/java/clap/server/adapter/inbound/web/comment/PostCommentController.java b/src/main/java/clap/server/adapter/inbound/web/comment/PostCommentController.java index 5889e1cc..307c4ee3 100644 --- a/src/main/java/clap/server/adapter/inbound/web/comment/PostCommentController.java +++ b/src/main/java/clap/server/adapter/inbound/web/comment/PostCommentController.java @@ -1,13 +1,15 @@ package clap.server.adapter.inbound.web.comment; import clap.server.adapter.inbound.security.SecurityUserDetails; -import clap.server.adapter.inbound.web.dto.task.PostAndEditCommentRequest; -import clap.server.application.port.inbound.comment.PostCommentUsecase; +import clap.server.adapter.inbound.web.dto.comment.CreateCommentRequest; +import clap.server.application.port.inbound.comment.SaveCommentAttachmentUsecase; +import clap.server.application.port.inbound.comment.SaveCommentUsecase; import clap.server.common.annotation.architecture.WebAdapter; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.enums.ParameterIn; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.springframework.security.access.annotation.Secured; @@ -15,8 +17,6 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import java.util.List; - @Tag(name = "02. Task [생성/수정]", description = "작업 생성/수정 API") @WebAdapter @RestController @@ -24,7 +24,8 @@ @RequestMapping("/api/comment") public class PostCommentController { - private final PostCommentUsecase postCommentUsecase; + private final SaveCommentUsecase saveCommentUsecase; + private final SaveCommentAttachmentUsecase saveCommentAttachmentUsecase; @Operation(summary = "댓글 작성") @Parameter(name = "taskId", description = "댓글 작성할 작업 고유 ID", required = true, in = ParameterIn.PATH) @@ -33,8 +34,8 @@ public class PostCommentController { public void createComment( @AuthenticationPrincipal SecurityUserDetails userInfo, @PathVariable Long taskId, - @RequestBody(required = true) PostAndEditCommentRequest request){ - postCommentUsecase.save(userInfo.getUserId(), taskId, request); + @Valid @RequestBody CreateCommentRequest request){ + saveCommentUsecase.save(userInfo.getUserId(), taskId, request); } @Operation(summary = "댓글 작성(첨부 파일)") @@ -45,7 +46,7 @@ public void createAttachmentComment( @AuthenticationPrincipal SecurityUserDetails userInfo, @PathVariable Long taskId, @RequestPart(name = "attachment") @NotNull MultipartFile attachment) { - postCommentUsecase.saveCommentAttachment(userInfo.getUserId(), taskId, attachment); + saveCommentAttachmentUsecase.saveCommentAttachment(userInfo.getUserId(), taskId, attachment); } } diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/comment/CreateCommentRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/comment/CreateCommentRequest.java new file mode 100644 index 00000000..81883729 --- /dev/null +++ b/src/main/java/clap/server/adapter/inbound/web/dto/comment/CreateCommentRequest.java @@ -0,0 +1,11 @@ +package clap.server.adapter.inbound.web.dto.comment; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; + +public record CreateCommentRequest( + @Schema(description = "댓글 내용") + @NotBlank + String content +) { +} diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/comment/EditCommentRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/comment/EditCommentRequest.java new file mode 100644 index 00000000..7820f915 --- /dev/null +++ b/src/main/java/clap/server/adapter/inbound/web/dto/comment/EditCommentRequest.java @@ -0,0 +1,11 @@ +package clap.server.adapter.inbound.web.dto.comment; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; + +public record EditCommentRequest( + @Schema(description = "댓글 내용") + @NotBlank + String content +) { +} diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/PostAndEditCommentRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/PostAndEditCommentRequest.java deleted file mode 100644 index b66a6506..00000000 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/PostAndEditCommentRequest.java +++ /dev/null @@ -1,10 +0,0 @@ -package clap.server.adapter.inbound.web.dto.task; - - -import io.swagger.v3.oas.annotations.media.Schema; - -public record PostAndEditCommentRequest( - @Schema(description = "댓글 내용") - String content -) { -} diff --git a/src/main/java/clap/server/application/port/inbound/comment/CommandCommentUsecase.java b/src/main/java/clap/server/application/port/inbound/comment/CommandCommentUsecase.java deleted file mode 100644 index 6c3e2238..00000000 --- a/src/main/java/clap/server/application/port/inbound/comment/CommandCommentUsecase.java +++ /dev/null @@ -1,10 +0,0 @@ -package clap.server.application.port.inbound.comment; - -import clap.server.adapter.inbound.web.dto.task.PostAndEditCommentRequest; - -public interface CommandCommentUsecase { - - void updateComment(Long userId, Long commentId, PostAndEditCommentRequest request); - - void deleteComment(Long userId, Long commentId); -} diff --git a/src/main/java/clap/server/application/port/inbound/comment/DeleteCommentUsecase.java b/src/main/java/clap/server/application/port/inbound/comment/DeleteCommentUsecase.java new file mode 100644 index 00000000..5445344e --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/comment/DeleteCommentUsecase.java @@ -0,0 +1,6 @@ +package clap.server.application.port.inbound.comment; + +public interface DeleteCommentUsecase { + + void deleteComment(Long userId, Long commentId); +} diff --git a/src/main/java/clap/server/application/port/inbound/comment/EditCommentUsecase.java b/src/main/java/clap/server/application/port/inbound/comment/EditCommentUsecase.java new file mode 100644 index 00000000..37af7789 --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/comment/EditCommentUsecase.java @@ -0,0 +1,8 @@ +package clap.server.application.port.inbound.comment; + +import clap.server.adapter.inbound.web.dto.comment.EditCommentRequest; + +public interface EditCommentUsecase { + + void editComment(Long userId, Long commentId, EditCommentRequest request); +} diff --git a/src/main/java/clap/server/application/port/inbound/comment/PostCommentUsecase.java b/src/main/java/clap/server/application/port/inbound/comment/PostCommentUsecase.java deleted file mode 100644 index 168dbf37..00000000 --- a/src/main/java/clap/server/application/port/inbound/comment/PostCommentUsecase.java +++ /dev/null @@ -1,13 +0,0 @@ -package clap.server.application.port.inbound.comment; - -import clap.server.adapter.inbound.web.dto.task.PostAndEditCommentRequest; -import org.springframework.web.multipart.MultipartFile; - -import java.util.List; - -public interface PostCommentUsecase { - - void save(Long userId, Long taskId, PostAndEditCommentRequest request); - - void saveCommentAttachment(Long userId, Long taskId, MultipartFile file); -} diff --git a/src/main/java/clap/server/application/port/inbound/comment/SaveCommentAttachmentUsecase.java b/src/main/java/clap/server/application/port/inbound/comment/SaveCommentAttachmentUsecase.java new file mode 100644 index 00000000..d6566f6b --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/comment/SaveCommentAttachmentUsecase.java @@ -0,0 +1,8 @@ +package clap.server.application.port.inbound.comment; + +import org.springframework.web.multipart.MultipartFile; + +public interface SaveCommentAttachmentUsecase { + + void saveCommentAttachment(Long userId, Long taskId, MultipartFile file); +} diff --git a/src/main/java/clap/server/application/port/inbound/comment/SaveCommentUsecase.java b/src/main/java/clap/server/application/port/inbound/comment/SaveCommentUsecase.java new file mode 100644 index 00000000..cc8bac82 --- /dev/null +++ b/src/main/java/clap/server/application/port/inbound/comment/SaveCommentUsecase.java @@ -0,0 +1,8 @@ +package clap.server.application.port.inbound.comment; + +import clap.server.adapter.inbound.web.dto.comment.CreateCommentRequest; + +public interface SaveCommentUsecase { + + void save(Long userId, Long taskId, CreateCommentRequest request); +} diff --git a/src/main/java/clap/server/application/service/comment/CommandCommentService.java b/src/main/java/clap/server/application/service/comment/CommandCommentService.java index b0c3bd40..ab330b3e 100644 --- a/src/main/java/clap/server/application/service/comment/CommandCommentService.java +++ b/src/main/java/clap/server/application/service/comment/CommandCommentService.java @@ -1,7 +1,8 @@ package clap.server.application.service.comment; -import clap.server.adapter.inbound.web.dto.task.PostAndEditCommentRequest; -import clap.server.application.port.inbound.comment.CommandCommentUsecase; +import clap.server.adapter.inbound.web.dto.comment.EditCommentRequest; +import clap.server.application.port.inbound.comment.DeleteCommentUsecase; +import clap.server.application.port.inbound.comment.EditCommentUsecase; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.outbound.task.CommandAttachmentPort; import clap.server.application.port.outbound.task.CommandCommentPort; @@ -18,7 +19,7 @@ @ApplicationService @RequiredArgsConstructor -public class CommandCommentService implements CommandCommentUsecase { +public class CommandCommentService implements EditCommentUsecase, DeleteCommentUsecase { private final MemberService memberService; private final LoadCommentPort loadCommentPort; @@ -28,7 +29,7 @@ public class CommandCommentService implements CommandCommentUsecase { @Transactional @Override - public void updateComment(Long userId, Long commentId, PostAndEditCommentRequest request) { + public void editComment(Long userId, Long commentId, EditCommentRequest request) { Member member = memberService.findActiveMember(userId); diff --git a/src/main/java/clap/server/application/service/comment/PostCommentService.java b/src/main/java/clap/server/application/service/comment/PostCommentService.java index 6eb15918..e493598a 100644 --- a/src/main/java/clap/server/application/service/comment/PostCommentService.java +++ b/src/main/java/clap/server/application/service/comment/PostCommentService.java @@ -1,12 +1,13 @@ package clap.server.application.service.comment; -import clap.server.adapter.inbound.web.dto.task.PostAndEditCommentRequest; +import clap.server.adapter.inbound.web.dto.comment.CreateCommentRequest; import clap.server.adapter.outbound.infrastructure.s3.S3UploadAdapter; import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; import clap.server.adapter.outbound.persistense.entity.notification.constant.NotificationType; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskHistoryType; import clap.server.application.mapper.AttachmentMapper; -import clap.server.application.port.inbound.comment.PostCommentUsecase; +import clap.server.application.port.inbound.comment.SaveCommentAttachmentUsecase; +import clap.server.application.port.inbound.comment.SaveCommentUsecase; import clap.server.application.port.inbound.domain.MemberService; import clap.server.application.port.inbound.domain.TaskService; import clap.server.application.port.outbound.task.CommandAttachmentPort; @@ -30,7 +31,7 @@ @ApplicationService @RequiredArgsConstructor -public class PostCommentService implements PostCommentUsecase { +public class PostCommentService implements SaveCommentUsecase, SaveCommentAttachmentUsecase { private final MemberService memberService; private final TaskService taskService; @@ -42,7 +43,7 @@ public class PostCommentService implements PostCommentUsecase { @Transactional @Override - public void save(Long userId, Long taskId, PostAndEditCommentRequest request) { + public void save(Long userId, Long taskId, CreateCommentRequest request) { Task task = taskService.findById(taskId); Member member = memberService.findActiveMember(userId); diff --git a/src/main/java/clap/server/domain/model/task/Comment.java b/src/main/java/clap/server/domain/model/task/Comment.java index fda3fe4a..fa74651b 100644 --- a/src/main/java/clap/server/domain/model/task/Comment.java +++ b/src/main/java/clap/server/domain/model/task/Comment.java @@ -1,13 +1,11 @@ package clap.server.domain.model.task; -import clap.server.adapter.inbound.web.dto.task.PostAndEditCommentRequest; import clap.server.domain.model.common.BaseTime; import clap.server.domain.model.member.Member; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -import org.hibernate.annotations.SQLDelete; @Getter @SuperBuilder