From 8820da48f15b3deed756e7683b0e43bc25306e26 Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Thu, 23 Jan 2025 18:44:23 +0900 Subject: [PATCH 1/5] =?UTF-8?q?CLAP-108=20Feat:=20=EC=B9=B4=ED=85=8C?= =?UTF-8?q?=EA=B3=A0=EB=A6=AC=20=ED=95=84=ED=84=B0=EB=A7=81=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...kResponse.java => CreateTaskResponse.java} | 2 +- .../web/dto/task/FindTaskListRequest.java | 9 ++++-- .../web/dto/task/UpdateTaskResponse.java | 8 +++++ .../web/task/ManagementTaskController.java | 7 ++-- .../repository/task/AttachmentRepository.java | 1 - .../task/TaskCustomRepositoryImpl.java | 17 +++++----- .../application/Task/CreateTaskService.java | 6 ++-- .../application/Task/UpdateTaskService.java | 6 ++-- .../server/application/mapper/TaskMapper.java | 32 ++++--------------- .../port/inbound/task/CreateTaskUsecase.java | 4 +-- .../port/inbound/task/UpdateTaskUsecase.java | 4 +-- .../clap/server/domain/model/task/Term.java | 28 ++++++++++++++++ 12 files changed, 73 insertions(+), 51 deletions(-) rename src/main/java/clap/server/adapter/inbound/web/dto/task/{CreateAndUpdateTaskResponse.java => CreateTaskResponse.java} (74%) create mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskResponse.java create mode 100644 src/main/java/clap/server/domain/model/task/Term.java diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/CreateAndUpdateTaskResponse.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/CreateTaskResponse.java similarity index 74% rename from src/main/java/clap/server/adapter/inbound/web/dto/task/CreateAndUpdateTaskResponse.java rename to src/main/java/clap/server/adapter/inbound/web/dto/task/CreateTaskResponse.java index bb923fd8..a58f1a79 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/CreateAndUpdateTaskResponse.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/CreateTaskResponse.java @@ -2,7 +2,7 @@ -public record CreateAndUpdateTaskResponse( +public record CreateTaskResponse( Long taskId, Long categoryId, String title diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/FindTaskListRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/FindTaskListRequest.java index 13fe72cb..90669739 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/FindTaskListRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/FindTaskListRequest.java @@ -2,11 +2,14 @@ import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; +import clap.server.domain.model.task.Term; + +import java.util.List; public record FindTaskListRequest( - Integer term, //조회기간: 1주일, 1개월, 3개월 - Long categoryId, - Long mainCategoryId, + Term term, + List categoryIds, + List mainCategoryIds, String title, String nickName, //처리자 닉네임 TaskStatus taskStatus diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskResponse.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskResponse.java new file mode 100644 index 00000000..9f97ebd8 --- /dev/null +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskResponse.java @@ -0,0 +1,8 @@ +package clap.server.adapter.inbound.web.dto.task; + +public record UpdateTaskResponse( + Long taskId, + Long categoryId, + String title +) { +} diff --git a/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java index ff9b1151..5bd8969f 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java @@ -1,8 +1,9 @@ package clap.server.adapter.inbound.web.task; import clap.server.adapter.inbound.web.dto.task.CreateTaskRequest; -import clap.server.adapter.inbound.web.dto.task.CreateAndUpdateTaskResponse; +import clap.server.adapter.inbound.web.dto.task.CreateTaskResponse; import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest; +import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse; import clap.server.application.port.inbound.task.CreateTaskUsecase; import clap.server.application.port.inbound.task.UpdateTaskUsecase; import clap.server.common.annotation.architecture.WebAdapter; @@ -23,13 +24,13 @@ public class ManagementTaskController { private static final Long memberId = 4L; @PostMapping - public ResponseEntity createTask( + public ResponseEntity createTask( @RequestBody @Valid CreateTaskRequest createTaskRequest){ return ResponseEntity.ok(createTaskUsecase.createTask(memberId, createTaskRequest)); } @PatchMapping - public ResponseEntity updateTask( + public ResponseEntity updateTask( @RequestBody @Valid UpdateTaskRequest updateTaskRequest){ return ResponseEntity.ok(updateTaskUsecase.updateTask(memberId, updateTaskRequest)); } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java index c3b71706..f26a5c6e 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java @@ -8,7 +8,6 @@ @Repository public interface AttachmentRepository extends JpaRepository { List findAllByTask_TaskId(Long taskId); - // fileIds 목록을 받아 해당하는 파일들을 삭제 void deleteAllByAttachmentIdIn(List attachmentIds); } \ No newline at end of file diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java index c7336c87..ce6b9450 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java @@ -4,6 +4,7 @@ import clap.server.adapter.outbound.persistense.entity.task.QTaskEntity; import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; +import clap.server.domain.model.task.Term; import com.querydsl.core.BooleanBuilder; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; @@ -27,22 +28,22 @@ public Page findRequestedTaskList(Long requesterId, Pageable pageabl BooleanBuilder whereClause = new BooleanBuilder(); whereClause.and(task.requester.memberId.eq(requesterId)); - Long categoryId = findTaskListRequest.categoryId(); - Long mainCategoryId = findTaskListRequest.mainCategoryId(); + List categoryIds = findTaskListRequest.categoryIds(); + List mainCategoryIds = findTaskListRequest.mainCategoryIds(); String title = findTaskListRequest.title(); String nickName = findTaskListRequest.nickName(); TaskStatus taskStatus = findTaskListRequest.taskStatus(); - Integer term = findTaskListRequest.term(); + Term term = findTaskListRequest.term(); if (term != null) { - LocalDateTime fromDate = LocalDateTime.now().minusMonths(term); + LocalDateTime fromDate = LocalDateTime.now().minusMonths(term.getHours()); whereClause.and(task.createdAt.after(fromDate)); } - if (categoryId != null) { - whereClause.and(task.category.categoryId.eq(categoryId)); + if (categoryIds != null && !categoryIds.isEmpty()) { + whereClause.and(task.category.categoryId.in(categoryIds)); // 리스트를 처리하는 in 조건 } - if (mainCategoryId != null) { - whereClause.and(task.category.mainCategory.categoryId.eq(mainCategoryId)); + if (mainCategoryIds != null && !mainCategoryIds.isEmpty()) { + whereClause.and(task.category.mainCategory.categoryId.in(mainCategoryIds)); // 리스트를 처리하는 in 조건 } if (title != null && !title.isEmpty()) { whereClause.and(task.title.containsIgnoreCase(title)); diff --git a/src/main/java/clap/server/application/Task/CreateTaskService.java b/src/main/java/clap/server/application/Task/CreateTaskService.java index c490d067..7fb52efa 100644 --- a/src/main/java/clap/server/application/Task/CreateTaskService.java +++ b/src/main/java/clap/server/application/Task/CreateTaskService.java @@ -1,7 +1,7 @@ package clap.server.application.Task; import clap.server.adapter.inbound.web.dto.task.CreateTaskRequest; -import clap.server.adapter.inbound.web.dto.task.CreateAndUpdateTaskResponse; +import clap.server.adapter.inbound.web.dto.task.CreateTaskResponse; import clap.server.application.mapper.TaskMapper; import clap.server.application.port.inbound.domain.CategoryService; @@ -33,7 +33,7 @@ public class CreateTaskService implements CreateTaskUsecase { @Override @Transactional - public CreateAndUpdateTaskResponse createTask(Long requesterId, CreateTaskRequest createTaskRequest) { + public CreateTaskResponse createTask(Long requesterId, CreateTaskRequest createTaskRequest) { Member member = memberService.findActiveMember(requesterId); Category category = categoryService.findById(createTaskRequest.categoryId()); Task task = Task.createTask(member, category, createTaskRequest.title(), createTaskRequest.description()); @@ -42,6 +42,6 @@ public CreateAndUpdateTaskResponse createTask(Long requesterId, CreateTaskReques List attachments = Attachment.createAttachments(savedTask, createTaskRequest.fileUrls()); commandAttachmentPort.saveAll(attachments); - return TaskMapper.toCreateAndUpdateTaskResponse(savedTask); + return TaskMapper.toCreateTaskResponse(savedTask); } } \ No newline at end of file diff --git a/src/main/java/clap/server/application/Task/UpdateTaskService.java b/src/main/java/clap/server/application/Task/UpdateTaskService.java index 7fb5a7ae..1c87b9a4 100644 --- a/src/main/java/clap/server/application/Task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/Task/UpdateTaskService.java @@ -1,7 +1,7 @@ package clap.server.application.Task; -import clap.server.adapter.inbound.web.dto.task.CreateAndUpdateTaskResponse; import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest; +import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse; import clap.server.application.mapper.AttachmentMapper; import clap.server.application.mapper.TaskMapper; import clap.server.application.port.inbound.domain.CategoryService; @@ -39,7 +39,7 @@ public class UpdateTaskService implements UpdateTaskUsecase { @Override @Transactional - public CreateAndUpdateTaskResponse updateTask(Long requesterId, UpdateTaskRequest updateTaskRequest) { + public UpdateTaskResponse updateTask(Long requesterId, UpdateTaskRequest updateTaskRequest) { Member member = memberService.findActiveMember(requesterId); Category category = categoryService.findById(updateTaskRequest.categoryId()); Task task = taskService.findById(updateTaskRequest.taskId()); @@ -52,6 +52,6 @@ public CreateAndUpdateTaskResponse updateTask(Long requesterId, UpdateTaskReques List attachments = Attachment.updateAttachments(savedTask, updateTaskRequest.attachmentRequests()); commandAttachmentPort.saveAll(attachments); - return TaskMapper.toCreateAndUpdateTaskResponse(savedTask); + return TaskMapper.toUpdateTaskResponse(savedTask); } } diff --git a/src/main/java/clap/server/application/mapper/TaskMapper.java b/src/main/java/clap/server/application/mapper/TaskMapper.java index eab5dad0..0e903a3c 100644 --- a/src/main/java/clap/server/application/mapper/TaskMapper.java +++ b/src/main/java/clap/server/application/mapper/TaskMapper.java @@ -1,18 +1,12 @@ package clap.server.application.mapper; -import clap.server.adapter.inbound.web.dto.task.AttachmentResponse; -import clap.server.adapter.inbound.web.dto.task.CreateAndUpdateTaskResponse; -import clap.server.adapter.inbound.web.dto.task.FindTaskDetailsResponse; -import clap.server.adapter.inbound.web.dto.task.FindTaskListResponse; -import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; -import clap.server.domain.model.member.Member; +import clap.server.adapter.inbound.web.dto.task.*; + import clap.server.domain.model.task.Attachment; -import clap.server.domain.model.task.Category; + import clap.server.domain.model.task.Task; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.List; import java.util.stream.Collectors; @@ -20,24 +14,12 @@ public class TaskMapper { private TaskMapper() { throw new IllegalArgumentException(); } - private static final String formattedDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmm")); - - public static Task toUpdatedTask(Task task, Member member, Category category, String title, String description) { - - return Task.builder() - .taskId(task.getTaskId()) - .title(title) - .description(description) - .category(category) - .requester(member) - .taskStatus(TaskStatus.REQUESTED) - .taskCode(category.getMainCategory().getCode() + formattedDateTime) - .build(); + public static CreateTaskResponse toCreateTaskResponse(Task task) { + return new CreateTaskResponse(task.getTaskId(), task.getCategory().getCategoryId(), task.getTitle()); } - - public static CreateAndUpdateTaskResponse toCreateAndUpdateTaskResponse(Task task) { - return new CreateAndUpdateTaskResponse(task.getTaskId(), task.getCategory().getCategoryId(), task.getTitle()); + public static UpdateTaskResponse toUpdateTaskResponse(Task task) { + return new UpdateTaskResponse(task.getTaskId(), task.getCategory().getCategoryId(), task.getTitle()); } public static FindTaskListResponse toFindTaskListResponse(Task task) { diff --git a/src/main/java/clap/server/application/port/inbound/task/CreateTaskUsecase.java b/src/main/java/clap/server/application/port/inbound/task/CreateTaskUsecase.java index 1627b9f4..9529e066 100644 --- a/src/main/java/clap/server/application/port/inbound/task/CreateTaskUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/CreateTaskUsecase.java @@ -1,8 +1,8 @@ package clap.server.application.port.inbound.task; import clap.server.adapter.inbound.web.dto.task.CreateTaskRequest; -import clap.server.adapter.inbound.web.dto.task.CreateAndUpdateTaskResponse; +import clap.server.adapter.inbound.web.dto.task.CreateTaskResponse; public interface CreateTaskUsecase { - CreateAndUpdateTaskResponse createTask(Long memberId, CreateTaskRequest createTaskRequest); + CreateTaskResponse createTask(Long memberId, CreateTaskRequest createTaskRequest); } diff --git a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java index caf1c41f..18d27670 100644 --- a/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/UpdateTaskUsecase.java @@ -1,9 +1,9 @@ package clap.server.application.port.inbound.task; -import clap.server.adapter.inbound.web.dto.task.CreateAndUpdateTaskResponse; import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest; +import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse; public interface UpdateTaskUsecase { - CreateAndUpdateTaskResponse updateTask(Long memberId, UpdateTaskRequest updateTaskRequest); + UpdateTaskResponse updateTask(Long memberId, UpdateTaskRequest updateTaskRequest); } diff --git a/src/main/java/clap/server/domain/model/task/Term.java b/src/main/java/clap/server/domain/model/task/Term.java new file mode 100644 index 00000000..fc4c571d --- /dev/null +++ b/src/main/java/clap/server/domain/model/task/Term.java @@ -0,0 +1,28 @@ +package clap.server.domain.model.task; + +import com.fasterxml.jackson.annotation.JsonCreator; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public enum Term { + ONE_HOUR(1, "1시간 이내"), + ONE_DAY(24, "24시간 이내"), + ONE_WEEK(168, "1주일 이내"), + ONE_MONTH(730, "1개월 이내"), + THREE_MONTHS(2190, "3개월 이내"); + + private final int hours; + private final String description; + + @JsonCreator + public static Term fromDescription(String description) { + for (Term term : values()) { + if (term.getDescription().equals(description)) { + return term; + } + } + throw new IllegalArgumentException("Invalid description value: " + description); + } +} \ No newline at end of file From a1e80d2fb96c9ee002921244e6b29cb55f410bab Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Fri, 24 Jan 2025 00:29:08 +0900 Subject: [PATCH 2/5] =?UTF-8?q?CLAP-108=20Add:=20=EC=9A=94=EC=B2=AD=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C=20=ED=8A=B9?= =?UTF-8?q?=EC=A0=95=20=EC=86=8D=EC=84=B1=EC=97=90=20=EB=94=B0=EB=A5=B8=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC=20=EC=A1=B0=EA=B1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/dto/task/FilterTaskListRequest.java | 27 ++++++++ .../web/dto/task/FindTaskListRequest.java | 17 ----- .../inbound/web/dto/task/OrderRequest.java | 10 +++ .../inbound/web/task/FindTaskController.java | 47 +++++++++---- .../web/task/ManagementTaskController.java | 18 +++-- .../persistense/TaskPersistenceAdapter.java | 4 +- .../entity/task/constant/TaskStatus.java | 2 +- .../mapper/TaskPersistenceMapper.java | 2 +- .../repository/task/TaskCustomRepository.java | 4 +- .../task/TaskCustomRepositoryImpl.java | 66 ++++++++++++------- .../application/Task/FindTaskListService.java | 4 +- .../application/Task/UpdateTaskService.java | 12 ++-- .../application/mapper/AttachmentMapper.java | 2 - .../server/application/mapper/TaskMapper.java | 12 ++-- .../inbound/task/FindTaskListUsecase.java | 4 +- .../port/outbound/task/LoadTaskPort.java | 4 +- .../clap/server/domain/model/task/Task.java | 23 +++---- .../clap/server/domain/model/task/Term.java | 28 -------- src/main/resources/redis.yml | 6 +- 19 files changed, 166 insertions(+), 126 deletions(-) create mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/task/FilterTaskListRequest.java delete mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/task/FindTaskListRequest.java create mode 100644 src/main/java/clap/server/adapter/inbound/web/dto/task/OrderRequest.java delete mode 100644 src/main/java/clap/server/domain/model/task/Term.java diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterTaskListRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterTaskListRequest.java new file mode 100644 index 00000000..e1ef5304 --- /dev/null +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterTaskListRequest.java @@ -0,0 +1,27 @@ +package clap.server.adapter.inbound.web.dto.task; + + +import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; +import jakarta.validation.constraints.NotNull; +import org.springframework.beans.factory.annotation.Value; + +import java.util.List; + + +public record FilterTaskListRequest( + + Integer term, + @NotNull + List categoryIds, + @NotNull + List mainCategoryIds, + @NotNull + String title, + @NotNull + String nickName, + @NotNull + List taskStatus, + @NotNull + OrderRequest orderRequest +) { +} diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/FindTaskListRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/FindTaskListRequest.java deleted file mode 100644 index 90669739..00000000 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/FindTaskListRequest.java +++ /dev/null @@ -1,17 +0,0 @@ -package clap.server.adapter.inbound.web.dto.task; - - -import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; -import clap.server.domain.model.task.Term; - -import java.util.List; - -public record FindTaskListRequest( - Term term, - List categoryIds, - List mainCategoryIds, - String title, - String nickName, //처리자 닉네임 - TaskStatus taskStatus -) { -} diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/OrderRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/OrderRequest.java new file mode 100644 index 00000000..97a42c75 --- /dev/null +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/OrderRequest.java @@ -0,0 +1,10 @@ +package clap.server.adapter.inbound.web.dto.task; + +import jakarta.validation.constraints.NotNull; + +public record OrderRequest( + @NotNull + String target, + @NotNull + String type +) {} diff --git a/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java index 6ec4bdff..6c4143dd 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java @@ -1,41 +1,66 @@ package clap.server.adapter.inbound.web.task; +import clap.server.adapter.inbound.security.SecurityUserDetails; import clap.server.adapter.inbound.web.dto.task.FindTaskDetailsResponse; -import clap.server.adapter.inbound.web.dto.task.FindTaskListRequest; +import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.inbound.web.dto.task.FindTaskListResponse; import clap.server.application.port.inbound.task.FindTaskDetailsUsecase; import clap.server.application.port.inbound.task.FindTaskListUsecase; import clap.server.common.annotation.architecture.WebAdapter; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.annotation.Secured; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import java.util.List; +@Tag(name = "작업 조회") @WebAdapter @RestController @RequiredArgsConstructor @RequestMapping("/api/tasks") +@Slf4j public class FindTaskController { private final FindTaskDetailsUsecase taskDetailsUsecase; private final FindTaskListUsecase taskListUsecase; - private static final Long taskId = 3L; - private static final Long memberId = 4L; + + @Operation(summary = "내가 요청한 작업 목록 조회 (filtering, paging, sorting") + @Secured({"ROLE_USER"}) @GetMapping("/requests") public ResponseEntity> getRequestedTaskList( @RequestParam(defaultValue = "0") int page, - @RequestParam(defaultValue = "20") int size, - @RequestBody FindTaskListRequest findTaskListRequest){ - Pageable pageable = PageRequest.of(page, size); - return ResponseEntity.ok(taskListUsecase.findRequestedTaskList(memberId, pageable, findTaskListRequest)); - } + @RequestParam(defaultValue = "20") int pageSize, + @ModelAttribute FilterTaskListRequest filterTaskListRequest, + @AuthenticationPrincipal SecurityUserDetails userInfo){ + Pageable pageable = PageRequest.of(page, pageSize); - @GetMapping("/requests/details") - public ResponseEntity> getRequestedTaskDetails(){ - return ResponseEntity.ok(taskDetailsUsecase.findRequestedTaskDetails(memberId, taskId)); + log.info("요청된 파라미터 - page: {}, pageSize: {}, userId: {}", page, pageSize, userInfo.getUserId()); + log.info("FilterTaskListRequest - term: {}, categoryIds: {}, mainCategoryIds: {}, title: {}, nickName: {}, taskStatus: {}, orderRequest: {}", + filterTaskListRequest.term(), + filterTaskListRequest.categoryIds(), + filterTaskListRequest.mainCategoryIds(), + filterTaskListRequest.title(), + filterTaskListRequest.nickName(), + filterTaskListRequest.taskStatus(), + filterTaskListRequest.orderRequest()); + log.info("isEmpty={}", filterTaskListRequest.nickName().isEmpty()); + + return ResponseEntity.ok(taskListUsecase.findRequestedTaskList(userInfo.getUserId(), pageable, filterTaskListRequest)); + } + @Operation(summary = "요청한 작업 상세 조회") + @Secured({"ROLE_USER", "ROLE_MANAGER"}) + @GetMapping("/requests/details/{taskId}") + public ResponseEntity> getRequestedTaskDetails( + @PathVariable Long taskId, + @AuthenticationPrincipal SecurityUserDetails userInfo){ + return ResponseEntity.ok(taskDetailsUsecase.findRequestedTaskDetails(userInfo.getUserId(), taskId)); } } \ No newline at end of file diff --git a/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java index 5bd8969f..a87f30bb 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/ManagementTaskController.java @@ -1,5 +1,6 @@ package clap.server.adapter.inbound.web.task; +import clap.server.adapter.inbound.security.SecurityUserDetails; import clap.server.adapter.inbound.web.dto.task.CreateTaskRequest; import clap.server.adapter.inbound.web.dto.task.CreateTaskResponse; import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest; @@ -7,12 +8,16 @@ import clap.server.application.port.inbound.task.CreateTaskUsecase; import clap.server.application.port.inbound.task.UpdateTaskUsecase; import clap.server.common.annotation.architecture.WebAdapter; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; +@Tag(name = "작업 생성 및 수정") @WebAdapter @RestController @RequiredArgsConstructor @@ -21,17 +26,20 @@ public class ManagementTaskController { private final CreateTaskUsecase createTaskUsecase; private final UpdateTaskUsecase updateTaskUsecase; - private static final Long memberId = 4L; + @Operation(summary = "작업 요청 생성") @PostMapping public ResponseEntity createTask( - @RequestBody @Valid CreateTaskRequest createTaskRequest){ - return ResponseEntity.ok(createTaskUsecase.createTask(memberId, createTaskRequest)); + @RequestBody @Valid CreateTaskRequest createTaskRequest, + @AuthenticationPrincipal SecurityUserDetails userInfo){ + return ResponseEntity.ok(createTaskUsecase.createTask(userInfo.getUserId(), createTaskRequest)); } + @Operation(summary = "요청한 작업 수정") @PatchMapping public ResponseEntity updateTask( - @RequestBody @Valid UpdateTaskRequest updateTaskRequest){ - return ResponseEntity.ok(updateTaskUsecase.updateTask(memberId, updateTaskRequest)); + @RequestBody @Valid UpdateTaskRequest updateTaskRequest, + @AuthenticationPrincipal SecurityUserDetails userInfo){ + return ResponseEntity.ok(updateTaskUsecase.updateTask(userInfo.getUserId(), updateTaskRequest)); } } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java index 79bfb48f..c8128d32 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/TaskPersistenceAdapter.java @@ -1,6 +1,6 @@ package clap.server.adapter.outbound.persistense; -import clap.server.adapter.inbound.web.dto.task.FindTaskListRequest; +import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.inbound.web.dto.task.FindTaskListResponse; import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; import clap.server.adapter.outbound.persistense.mapper.TaskPersistenceMapper; @@ -38,7 +38,7 @@ public Optional findById(Long id) { } @Override - public Page findAllByRequesterId(Long requesterId, Pageable pageable, FindTaskListRequest findTaskListRequest) { + public Page findAllByRequesterId(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest) { Page taskList = taskRepository.findRequestedTaskList(requesterId, pageable, findTaskListRequest) .map(taskPersistenceMapper::toDomain); return taskList.map(TaskMapper::toFindTaskListResponse); diff --git a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/constant/TaskStatus.java b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/constant/TaskStatus.java index 011eb8e6..2bb4f027 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/constant/TaskStatus.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/constant/TaskStatus.java @@ -10,7 +10,7 @@ public enum TaskStatus { REQUESTED("요청"), IN_PROGRESS("진행 중"), - PENDING_COMPLETED("검토중"), + PENDING_COMPLETED("검토 중"), COMPLETED("완료"), TERMINATED("종료"); diff --git a/src/main/java/clap/server/adapter/outbound/persistense/mapper/TaskPersistenceMapper.java b/src/main/java/clap/server/adapter/outbound/persistense/mapper/TaskPersistenceMapper.java index ce18103a..08387c40 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/mapper/TaskPersistenceMapper.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/mapper/TaskPersistenceMapper.java @@ -4,8 +4,8 @@ import clap.server.adapter.outbound.persistense.mapper.common.PersistenceMapper; import clap.server.domain.model.task.Task; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; @Mapper(componentModel = "spring", uses = {MemberPersistenceMapper.class, LabelPersistenceMapper.class, CategoryPersistenceMapper.class}) public interface TaskPersistenceMapper extends PersistenceMapper { - } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java index be6dee0e..dd7028c5 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepository.java @@ -1,11 +1,11 @@ package clap.server.adapter.outbound.persistense.repository.task; -import clap.server.adapter.inbound.web.dto.task.FindTaskListRequest; +import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; public interface TaskCustomRepository { - Page findRequestedTaskList(Long requesterId, Pageable pageable, FindTaskListRequest findTaskListRequest); + Page findRequestedTaskList(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest); } diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java index ce6b9450..43398096 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java @@ -1,11 +1,11 @@ package clap.server.adapter.outbound.persistense.repository.task; -import clap.server.adapter.inbound.web.dto.task.FindTaskListRequest; -import clap.server.adapter.outbound.persistense.entity.task.QTaskEntity; +import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; -import clap.server.domain.model.task.Term; import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.types.OrderSpecifier; +import com.querydsl.core.types.dsl.DateTimePath; import com.querydsl.jpa.impl.JPAQueryFactory; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -16,6 +16,9 @@ import java.time.LocalDateTime; import java.util.List; +import static clap.server.adapter.outbound.persistense.entity.task.QTaskEntity.taskEntity; +import static com.querydsl.core.types.Order.*; + @Repository @RequiredArgsConstructor public class TaskCustomRepositoryImpl implements TaskCustomRepository { @@ -23,50 +26,63 @@ public class TaskCustomRepositoryImpl implements TaskCustomRepository { private final JPAQueryFactory queryFactory; @Override - public Page findRequestedTaskList(Long requesterId, Pageable pageable, FindTaskListRequest findTaskListRequest) { - QTaskEntity task = QTaskEntity.taskEntity; + public Page findRequestedTaskList(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest) { BooleanBuilder whereClause = new BooleanBuilder(); - whereClause.and(task.requester.memberId.eq(requesterId)); + whereClause.and(taskEntity.requester.memberId.eq(requesterId)); List categoryIds = findTaskListRequest.categoryIds(); List mainCategoryIds = findTaskListRequest.mainCategoryIds(); String title = findTaskListRequest.title(); String nickName = findTaskListRequest.nickName(); - TaskStatus taskStatus = findTaskListRequest.taskStatus(); - Term term = findTaskListRequest.term(); + List taskStatuses = findTaskListRequest.taskStatus(); + Integer termHours = findTaskListRequest.term(); + String sortTarget = findTaskListRequest.orderRequest().target(); + String sortType = findTaskListRequest.orderRequest().type(); - if (term != null) { - LocalDateTime fromDate = LocalDateTime.now().minusMonths(term.getHours()); - whereClause.and(task.createdAt.after(fromDate)); + if (termHours != null) { + LocalDateTime fromDate = LocalDateTime.now().minusHours(termHours); + whereClause.and(taskEntity.createdAt.after(fromDate)); } - if (categoryIds != null && !categoryIds.isEmpty()) { - whereClause.and(task.category.categoryId.in(categoryIds)); // 리스트를 처리하는 in 조건 + if (!categoryIds.isEmpty()) { + whereClause.and(taskEntity.category.categoryId.in(categoryIds)); } - if (mainCategoryIds != null && !mainCategoryIds.isEmpty()) { - whereClause.and(task.category.mainCategory.categoryId.in(mainCategoryIds)); // 리스트를 처리하는 in 조건 + if (!mainCategoryIds.isEmpty()) { + whereClause.and(taskEntity.category.mainCategory.categoryId.in(mainCategoryIds)); } - if (title != null && !title.isEmpty()) { - whereClause.and(task.title.containsIgnoreCase(title)); + if (!title.isEmpty()) { + whereClause.and(taskEntity.title.containsIgnoreCase(title)); } - if (nickName != null) { - whereClause.and(task.processor.nickname.eq(nickName)); + if (!nickName.isEmpty()) { + whereClause.and(taskEntity.processor.nickname.eq(nickName)); } - if (taskStatus != null) { - whereClause.and(task.taskStatus.eq(taskStatus)); + if (!taskStatuses.isEmpty()) { + whereClause.and(taskEntity.taskStatus.in(taskStatuses)); } + OrderSpecifier orderSpecifier = getOrderSpecifier(sortTarget, sortType); + List result = queryFactory - .selectFrom(task) + .selectFrom(taskEntity) .where(whereClause) + .orderBy(orderSpecifier) .offset(pageable.getOffset()) .limit(pageable.getPageSize()) .fetch(); - int total = queryFactory - .selectFrom(task) + .selectFrom(taskEntity) .where(whereClause) .fetch().size(); - return new PageImpl<>(result, pageable, total); } + + private OrderSpecifier getOrderSpecifier(String sortTarget, String sortType) { + DateTimePath sortColumn = switch (sortTarget) { + case "REQUESTED_AT" -> taskEntity.updatedAt; + case "FINISHED_AT" -> taskEntity.completedAt; + default -> taskEntity.updatedAt; + }; + return "ASC".equalsIgnoreCase(sortType) + ? new OrderSpecifier<>(ASC, sortColumn) + : new OrderSpecifier<>(DESC, sortColumn); + } } diff --git a/src/main/java/clap/server/application/Task/FindTaskListService.java b/src/main/java/clap/server/application/Task/FindTaskListService.java index 52c1af1f..bb8d9183 100644 --- a/src/main/java/clap/server/application/Task/FindTaskListService.java +++ b/src/main/java/clap/server/application/Task/FindTaskListService.java @@ -1,6 +1,6 @@ package clap.server.application.Task; -import clap.server.adapter.inbound.web.dto.task.FindTaskListRequest; +import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.inbound.web.dto.task.FindTaskListResponse; import clap.server.application.port.inbound.domain.MemberService; @@ -28,7 +28,7 @@ public class FindTaskListService implements FindTaskListUsecase { @Override - public Page findRequestedTaskList(Long requesterId, Pageable pageable, FindTaskListRequest findTaskListRequest) { + public Page findRequestedTaskList(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest) { Member requester = memberService.findActiveMember(requesterId); return loadTaskPort.findAllByRequesterId(requester.getMemberId(), pageable, findTaskListRequest); } diff --git a/src/main/java/clap/server/application/Task/UpdateTaskService.java b/src/main/java/clap/server/application/Task/UpdateTaskService.java index 1c87b9a4..e83d1b7f 100644 --- a/src/main/java/clap/server/application/Task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/Task/UpdateTaskService.java @@ -40,18 +40,18 @@ public class UpdateTaskService implements UpdateTaskUsecase { @Override @Transactional public UpdateTaskResponse updateTask(Long requesterId, UpdateTaskRequest updateTaskRequest) { - Member member = memberService.findActiveMember(requesterId); + memberService.findActiveMember(requesterId); Category category = categoryService.findById(updateTaskRequest.categoryId()); Task task = taskService.findById(updateTaskRequest.taskId()); - - Task updatedTask = Task.updateTask(task, member, category, updateTaskRequest.title(), updateTaskRequest.description()); - Task savedTask = commandTaskPort.save(updatedTask); + //TODO: 작업이 요청 상태인 경우만 업데이트 가능 + task.updateTask(category, updateTaskRequest.title(), updateTaskRequest.description()); + Task updatedTask = commandTaskPort.save(task); List attachmentIds = AttachmentMapper.toAttachmentIds(updateTaskRequest.attachmentRequests()); commandAttachmentPort.deleteByIds(attachmentIds); - List attachments = Attachment.updateAttachments(savedTask, updateTaskRequest.attachmentRequests()); + List attachments = Attachment.updateAttachments(updatedTask, updateTaskRequest.attachmentRequests()); commandAttachmentPort.saveAll(attachments); - return TaskMapper.toUpdateTaskResponse(savedTask); + return TaskMapper.toUpdateTaskResponse(updatedTask); } } diff --git a/src/main/java/clap/server/application/mapper/AttachmentMapper.java b/src/main/java/clap/server/application/mapper/AttachmentMapper.java index 73713949..9387bbad 100644 --- a/src/main/java/clap/server/application/mapper/AttachmentMapper.java +++ b/src/main/java/clap/server/application/mapper/AttachmentMapper.java @@ -15,8 +15,6 @@ private AttachmentMapper() { throw new IllegalArgumentException(); } - - public static List toAttachmentIds(List attachmentRequests) { return attachmentRequests.stream() .map(AttachmentRequest::fileId) diff --git a/src/main/java/clap/server/application/mapper/TaskMapper.java b/src/main/java/clap/server/application/mapper/TaskMapper.java index 0e903a3c..752c8833 100644 --- a/src/main/java/clap/server/application/mapper/TaskMapper.java +++ b/src/main/java/clap/server/application/mapper/TaskMapper.java @@ -6,7 +6,9 @@ import clap.server.domain.model.task.Attachment; import clap.server.domain.model.task.Task; +import lombok.extern.slf4j.Slf4j; +import java.time.LocalDateTime; import java.util.List; import java.util.stream.Collectors; @@ -26,13 +28,13 @@ public static FindTaskListResponse toFindTaskListResponse(Task task) { return new FindTaskListResponse( task.getTaskId(), task.getTaskCode(), - task.getCreatedAt(), + task.getUpdatedAt(), task.getCategory().getMainCategory().getName(), task.getCategory().getName(), task.getTitle(), - task.getProcessor() != null ? task.getProcessor().getMemberInfo().getName() : null, + task.getProcessor() != null ? task.getProcessor().getMemberInfo().getNickname() : "", task.getTaskStatus(), - task.getCompletedAt() + task.getCompletedAt() != null ? task.getCompletedAt() : null ); } @@ -56,8 +58,8 @@ public static List toFindTaskDetailResponses(Task task, task.getTaskStatus(), task.getRequester().getMemberInfo().getNickname(), task.getRequester().getImageUrl(), - task.getProcessor() != null ? task.getProcessor().getMemberInfo().getNickname() : null, - task.getProcessor() != null ? task.getProcessor().getImageUrl() : null, + task.getProcessor() != null ? task.getProcessor().getMemberInfo().getNickname() : "", + task.getProcessor() != null ? task.getProcessor().getImageUrl() : "", task.getCategory().getMainCategory().getName(), task.getCategory().getName(), task.getTitle(), diff --git a/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java b/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java index ccb56170..8d85fdbf 100644 --- a/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java +++ b/src/main/java/clap/server/application/port/inbound/task/FindTaskListUsecase.java @@ -1,10 +1,10 @@ package clap.server.application.port.inbound.task; -import clap.server.adapter.inbound.web.dto.task.FindTaskListRequest; +import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.inbound.web.dto.task.FindTaskListResponse; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; public interface FindTaskListUsecase { - Page findRequestedTaskList(Long memberId, Pageable pageable, FindTaskListRequest findTaskListRequest); + Page findRequestedTaskList(Long memberId, Pageable pageable, FilterTaskListRequest findTaskListRequest); } diff --git a/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java b/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java index 4419aee5..9e8cb996 100644 --- a/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java +++ b/src/main/java/clap/server/application/port/outbound/task/LoadTaskPort.java @@ -1,6 +1,6 @@ package clap.server.application.port.outbound.task; -import clap.server.adapter.inbound.web.dto.task.FindTaskListRequest; +import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.inbound.web.dto.task.FindTaskListResponse; import clap.server.domain.model.task.Task; import org.springframework.data.domain.Page; @@ -15,6 +15,6 @@ public interface LoadTaskPort { List findYesterdayTaskByDate(LocalDateTime now); - Page findAllByRequesterId(Long requesterId, Pageable pageable, FindTaskListRequest findTaskListRequest); + Page findAllByRequesterId(Long requesterId, Pageable pageable, FilterTaskListRequest findTaskListRequest); } \ No newline at end of file diff --git a/src/main/java/clap/server/domain/model/task/Task.java b/src/main/java/clap/server/domain/model/task/Task.java index 4289c6ae..d6be02bc 100644 --- a/src/main/java/clap/server/domain/model/task/Task.java +++ b/src/main/java/clap/server/domain/model/task/Task.java @@ -23,7 +23,7 @@ public class Task extends BaseTime { private Category category; private Member requester; private TaskStatus taskStatus; - private int processorOrder; //칸반보드 상태에 따른 순서 + private int processorOrder; private Member processor; private Label label; private Member reviewer; @@ -37,21 +37,18 @@ public static Task createTask(Member member, Category category, String title, St .title(title) .description(description) .taskStatus(TaskStatus.REQUESTED) - .taskCode(category.getMainCategory().getCode() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmm"))) + .taskCode(toTaskCode(category)) .build(); } - public static Task updateTask(Task task, Member member, Category category, String title, String description) { - - return Task.builder() - .taskId(task.getTaskId()) - .requester(member) - .category(category) - .title(title) - .description(description) - .taskStatus(TaskStatus.REQUESTED) - .taskCode(category.getMainCategory().getCode() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmm"))) - .build(); + public void updateTask(Category category, String title, String description) { + this.category = category; + this.title = title; + this.description = description; + this.taskCode = toTaskCode(category); } + private static String toTaskCode(Category category){ + return category.getMainCategory().getCode() + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmm")); + } } diff --git a/src/main/java/clap/server/domain/model/task/Term.java b/src/main/java/clap/server/domain/model/task/Term.java deleted file mode 100644 index fc4c571d..00000000 --- a/src/main/java/clap/server/domain/model/task/Term.java +++ /dev/null @@ -1,28 +0,0 @@ -package clap.server.domain.model.task; - -import com.fasterxml.jackson.annotation.JsonCreator; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public enum Term { - ONE_HOUR(1, "1시간 이내"), - ONE_DAY(24, "24시간 이내"), - ONE_WEEK(168, "1주일 이내"), - ONE_MONTH(730, "1개월 이내"), - THREE_MONTHS(2190, "3개월 이내"); - - private final int hours; - private final String description; - - @JsonCreator - public static Term fromDescription(String description) { - for (Term term : values()) { - if (term.getDescription().equals(description)) { - return term; - } - } - throw new IllegalArgumentException("Invalid description value: " + description); - } -} \ No newline at end of file diff --git a/src/main/resources/redis.yml b/src/main/resources/redis.yml index c1157e75..9016361b 100644 --- a/src/main/resources/redis.yml +++ b/src/main/resources/redis.yml @@ -1,6 +1,8 @@ spring: data: redis: - host: ${REDIS_HOST:localhost} + host: ${REDIS_HOST:127.0.0.1} port: ${REDIS_PORT:6379} - password: ${REDIS_PASSWORD} \ No newline at end of file + password: ${REDIS_PASSWORD} + + From 5c48768b7af333e025e0514cf37796d125bf97b0 Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Fri, 24 Jan 2025 14:00:21 +0900 Subject: [PATCH 3/5] =?UTF-8?q?CLAP-108=20Add:=20=EC=9E=91=EC=97=85=20?= =?UTF-8?q?=EC=9A=94=EC=B2=AD=20=EB=B0=8F=20=EC=A1=B0=ED=9A=8C=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EB=AA=85=EC=84=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/dto/task/AttachmentRequest.java | 8 +++++++- .../web/dto/task/CreateTaskRequest.java | 12 ++++++++++++ .../web/dto/task/FilterTaskListRequest.java | 16 +++++++++++++++- .../inbound/web/dto/task/OrderRequest.java | 11 ++++++----- .../web/dto/task/UpdateTaskRequest.java | 18 ++++++++++++++++-- .../inbound/web/task/FindTaskController.java | 15 +-------------- .../task/TaskCustomRepositoryImpl.java | 12 ++++++------ .../{ => service}/Task/CreateTaskService.java | 2 +- .../Task/FindTaskDetailsService.java | 2 +- .../Task/FindTaskListService.java | 2 +- .../{ => service}/Task/UpdateTaskService.java | 2 +- .../server/exception/code/TaskErrorCode.java | 1 + 12 files changed, 68 insertions(+), 33 deletions(-) rename src/main/java/clap/server/application/{ => service}/Task/CreateTaskService.java (97%) rename src/main/java/clap/server/application/{ => service}/Task/FindTaskDetailsService.java (97%) rename src/main/java/clap/server/application/{ => service}/Task/FindTaskListService.java (96%) rename src/main/java/clap/server/application/{ => service}/Task/UpdateTaskService.java (98%) diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/AttachmentRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/AttachmentRequest.java index 52c1d9c6..96a038c7 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/AttachmentRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/AttachmentRequest.java @@ -1,7 +1,13 @@ package clap.server.adapter.inbound.web.dto.task; +import io.swagger.v3.oas.annotations.media.Schema; + public record AttachmentRequest( + @Schema(description = "파일 ID", example = "45") Long fileId, - String fileUrl) { + + @Schema(description = "파일 URL", example = "https://example.com/file.png") + String fileUrl +) { } diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/CreateTaskRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/CreateTaskRequest.java index 6e1195e9..df1a3512 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/CreateTaskRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/CreateTaskRequest.java @@ -1,18 +1,30 @@ package clap.server.adapter.inbound.web.dto.task; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import java.util.List; + +@Schema(description = "작업 생성 요청") public record CreateTaskRequest( + @Schema(description = "카테고리 ID") @NotNull Long categoryId, + + @Schema(description = "메인 카테고리 ID") @NotNull Long mainCategoryId, + + @Schema(description = "작업 제목") @NotBlank String title, + + @Schema(description = "작업 설명") String description, + + @Schema(description = "첨부 파일 URL 목록", example = "[\"https://example.com/file1.png\", \"https://example.com/file2.pdf\"]") List<@NotBlank String> fileUrls ) { } diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterTaskListRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterTaskListRequest.java index e1ef5304..3e858ed9 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterTaskListRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/FilterTaskListRequest.java @@ -2,25 +2,39 @@ import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotNull; import org.springframework.beans.factory.annotation.Value; import java.util.List; - +@Schema(description = "작업 필터링 요청") public record FilterTaskListRequest( + @Schema(description = "검색 기간 (단위: 시간)", example = "1, 24, 168, 730, 2190 (1시간, 24시간, 1주일, 1개월, 3개월)") Integer term, + + @Schema(description = "카테고리 ID 목록", example = "[1, 2, 3]") @NotNull List categoryIds, + + @Schema(description = "메인 카테고리 ID 목록", example = "[10, 20, 30]") @NotNull List mainCategoryIds, + + @Schema(description = "작업 제목", example = "작업 제목") @NotNull String title, + + @Schema(description = "사용자 닉네임", example = "atom.park") @NotNull String nickName, + + @Schema(description = "작업 상태 목록", example = "[\"REQUESTED\", \"IN_PROGRESS\"]") @NotNull List taskStatus, + + @Schema(description = "정렬 기준", implementation = OrderRequest.class) @NotNull OrderRequest orderRequest ) { diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/OrderRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/OrderRequest.java index 97a42c75..4c6a3e31 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/OrderRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/OrderRequest.java @@ -1,10 +1,11 @@ package clap.server.adapter.inbound.web.dto.task; -import jakarta.validation.constraints.NotNull; +import io.swagger.v3.oas.annotations.media.Schema; public record OrderRequest( - @NotNull - String target, - @NotNull - String type + @Schema(description = "정렬 기준 (REQUESTED_AT/FINISHED_AT)", example = "REQUESTED_AT") + String sortBy, + + @Schema(description = "정렬 방향 (ASC/DESC)", example = "ASC") + String sortDirection ) {} diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskRequest.java index f9dbfeeb..166bdb64 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/task/UpdateTaskRequest.java @@ -1,20 +1,34 @@ package clap.server.adapter.inbound.web.dto.task; +import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import java.util.List; +@Schema(description = "작업 업데이트 요청") public record UpdateTaskRequest( + + @Schema(description = "작업 ID", example = "123") @NotNull Long taskId, + + @Schema(description = "카테고리 ID", example = "1") @NotNull Long categoryId, + + @Schema(description = "메인 카테고리 ID", example = "10") @NotNull Long mainCategoryId, + + @Schema(description = "작업 제목", example = "업데이트된 제목") @NotBlank String title, + + @Schema(description = "작업 설명", example = "업데이트된 설명.") String description, + + @Schema(description = "첨부 파일 요청 목록", implementation = AttachmentRequest.class) List attachmentRequests -) { -} +) {} + diff --git a/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java b/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java index 6c4143dd..339cb5cd 100644 --- a/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java +++ b/src/main/java/clap/server/adapter/inbound/web/task/FindTaskController.java @@ -27,12 +27,11 @@ @RestController @RequiredArgsConstructor @RequestMapping("/api/tasks") -@Slf4j public class FindTaskController { private final FindTaskDetailsUsecase taskDetailsUsecase; private final FindTaskListUsecase taskListUsecase; - @Operation(summary = "내가 요청한 작업 목록 조회 (filtering, paging, sorting") + @Operation(summary = "사용자 요청 작업 목록 조회") @Secured({"ROLE_USER"}) @GetMapping("/requests") public ResponseEntity> getRequestedTaskList( @@ -41,18 +40,6 @@ public ResponseEntity> getRequestedTaskList( @ModelAttribute FilterTaskListRequest filterTaskListRequest, @AuthenticationPrincipal SecurityUserDetails userInfo){ Pageable pageable = PageRequest.of(page, pageSize); - - log.info("요청된 파라미터 - page: {}, pageSize: {}, userId: {}", page, pageSize, userInfo.getUserId()); - log.info("FilterTaskListRequest - term: {}, categoryIds: {}, mainCategoryIds: {}, title: {}, nickName: {}, taskStatus: {}, orderRequest: {}", - filterTaskListRequest.term(), - filterTaskListRequest.categoryIds(), - filterTaskListRequest.mainCategoryIds(), - filterTaskListRequest.title(), - filterTaskListRequest.nickName(), - filterTaskListRequest.taskStatus(), - filterTaskListRequest.orderRequest()); - log.info("isEmpty={}", filterTaskListRequest.nickName().isEmpty()); - return ResponseEntity.ok(taskListUsecase.findRequestedTaskList(userInfo.getUserId(), pageable, filterTaskListRequest)); } @Operation(summary = "요청한 작업 상세 조회") diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java index 43398096..be184f6f 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskCustomRepositoryImpl.java @@ -36,8 +36,8 @@ public Page findRequestedTaskList(Long requesterId, Pageable pageabl String nickName = findTaskListRequest.nickName(); List taskStatuses = findTaskListRequest.taskStatus(); Integer termHours = findTaskListRequest.term(); - String sortTarget = findTaskListRequest.orderRequest().target(); - String sortType = findTaskListRequest.orderRequest().type(); + String sortBy = findTaskListRequest.orderRequest().sortBy(); + String sortDirection = findTaskListRequest.orderRequest().sortDirection(); if (termHours != null) { LocalDateTime fromDate = LocalDateTime.now().minusHours(termHours); @@ -59,7 +59,7 @@ public Page findRequestedTaskList(Long requesterId, Pageable pageabl whereClause.and(taskEntity.taskStatus.in(taskStatuses)); } - OrderSpecifier orderSpecifier = getOrderSpecifier(sortTarget, sortType); + OrderSpecifier orderSpecifier = getOrderSpecifier(sortBy, sortDirection); List result = queryFactory .selectFrom(taskEntity) @@ -75,13 +75,13 @@ public Page findRequestedTaskList(Long requesterId, Pageable pageabl return new PageImpl<>(result, pageable, total); } - private OrderSpecifier getOrderSpecifier(String sortTarget, String sortType) { - DateTimePath sortColumn = switch (sortTarget) { + private OrderSpecifier getOrderSpecifier(String sortBy, String sortDirection) { + DateTimePath sortColumn = switch (sortBy) { case "REQUESTED_AT" -> taskEntity.updatedAt; case "FINISHED_AT" -> taskEntity.completedAt; default -> taskEntity.updatedAt; }; - return "ASC".equalsIgnoreCase(sortType) + return "ASC".equalsIgnoreCase(sortDirection) ? new OrderSpecifier<>(ASC, sortColumn) : new OrderSpecifier<>(DESC, sortColumn); } diff --git a/src/main/java/clap/server/application/Task/CreateTaskService.java b/src/main/java/clap/server/application/service/Task/CreateTaskService.java similarity index 97% rename from src/main/java/clap/server/application/Task/CreateTaskService.java rename to src/main/java/clap/server/application/service/Task/CreateTaskService.java index 7fb52efa..cd988ce4 100644 --- a/src/main/java/clap/server/application/Task/CreateTaskService.java +++ b/src/main/java/clap/server/application/service/Task/CreateTaskService.java @@ -1,4 +1,4 @@ -package clap.server.application.Task; +package clap.server.application.service.Task; import clap.server.adapter.inbound.web.dto.task.CreateTaskRequest; import clap.server.adapter.inbound.web.dto.task.CreateTaskResponse; diff --git a/src/main/java/clap/server/application/Task/FindTaskDetailsService.java b/src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java similarity index 97% rename from src/main/java/clap/server/application/Task/FindTaskDetailsService.java rename to src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java index c9ed511f..8698b2da 100644 --- a/src/main/java/clap/server/application/Task/FindTaskDetailsService.java +++ b/src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java @@ -1,4 +1,4 @@ -package clap.server.application.Task; +package clap.server.application.service.Task; import clap.server.adapter.inbound.web.dto.task.FindTaskDetailsResponse; import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; diff --git a/src/main/java/clap/server/application/Task/FindTaskListService.java b/src/main/java/clap/server/application/service/Task/FindTaskListService.java similarity index 96% rename from src/main/java/clap/server/application/Task/FindTaskListService.java rename to src/main/java/clap/server/application/service/Task/FindTaskListService.java index bb8d9183..9573d3f3 100644 --- a/src/main/java/clap/server/application/Task/FindTaskListService.java +++ b/src/main/java/clap/server/application/service/Task/FindTaskListService.java @@ -1,4 +1,4 @@ -package clap.server.application.Task; +package clap.server.application.service.Task; import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.inbound.web.dto.task.FindTaskListResponse; diff --git a/src/main/java/clap/server/application/Task/UpdateTaskService.java b/src/main/java/clap/server/application/service/Task/UpdateTaskService.java similarity index 98% rename from src/main/java/clap/server/application/Task/UpdateTaskService.java rename to src/main/java/clap/server/application/service/Task/UpdateTaskService.java index e83d1b7f..827eb54d 100644 --- a/src/main/java/clap/server/application/Task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/service/Task/UpdateTaskService.java @@ -1,4 +1,4 @@ -package clap.server.application.Task; +package clap.server.application.service.Task; import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest; import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse; diff --git a/src/main/java/clap/server/exception/code/TaskErrorCode.java b/src/main/java/clap/server/exception/code/TaskErrorCode.java index 7e29befd..189d1d61 100644 --- a/src/main/java/clap/server/exception/code/TaskErrorCode.java +++ b/src/main/java/clap/server/exception/code/TaskErrorCode.java @@ -9,6 +9,7 @@ public enum TaskErrorCode implements BaseErrorCode { TASK_NOT_FOUND(HttpStatus.NOT_FOUND, "TASK_001", "작업을 찾을 수 없습니다."), CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND, "TASK_002", "카테고리를 찾을 수 없습니다."), + TASK_STATUS_MISMATCH(HttpStatus.BAD_REQUEST, "TASK_003", "작업 상태가 일치하지 않습니다."); ; private final HttpStatus httpStatus; From 5d654c14c68ff821a87403b01ea118159bd69a0c Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Fri, 24 Jan 2025 21:30:20 +0900 Subject: [PATCH 4/5] =?UTF-8?q?CLAP-108=20Fix:=20comment=EC=97=90=20?= =?UTF-8?q?=EB=8B=AC=EB=A6=AC=EC=A7=80=20=EC=95=8A=EC=9D=80=20attachment?= =?UTF-8?q?=EB=A7=8C=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../outbound/persistense/AttachmentPersistenceAdapter.java | 4 ++-- .../outbound/persistense/entity/task/CommentEntity.java | 2 +- .../persistense/repository/task/AttachmentRepository.java | 2 +- .../application/port/outbound/task/LoadAttachmentPort.java | 2 +- .../application/service/Task/FindTaskDetailsService.java | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/AttachmentPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/AttachmentPersistenceAdapter.java index 63af74cc..6a08cc30 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/AttachmentPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/AttachmentPersistenceAdapter.java @@ -38,8 +38,8 @@ public void saveAll(List attachments) { } @Override - public List findAllByTaskId(final Long taskId) { - List attachmentEntities = attachmentRepository.findAllByTask_TaskId(taskId); + public List findAllByTaskIdAndCommentIsNull(final Long taskId) { + List attachmentEntities = attachmentRepository.findAllByTask_TaskIdAndCommentIsNull(taskId); return attachmentEntities.stream() .map(attachmentPersistenceMapper::toDomain) .collect(Collectors.toList()); diff --git a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/CommentEntity.java b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/CommentEntity.java index 43e3d39a..6654f4ec 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/entity/task/CommentEntity.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/entity/task/CommentEntity.java @@ -27,7 +27,7 @@ public class CommentEntity extends BaseTimeEntity { @JoinColumn(name = "task_id", nullable = false) private TaskEntity task; - @Column(name = "content", nullable = false) + @Column(name = "content", nullable = false) //nullable false인 이유 private String content; @Column(name = "is_modified", nullable = false) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java index f26a5c6e..fd7db8be 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/AttachmentRepository.java @@ -7,7 +7,7 @@ @Repository public interface AttachmentRepository extends JpaRepository { - List findAllByTask_TaskId(Long taskId); + List findAllByTask_TaskIdAndCommentIsNull(Long taskId); void deleteAllByAttachmentIdIn(List attachmentIds); } \ No newline at end of file diff --git a/src/main/java/clap/server/application/port/outbound/task/LoadAttachmentPort.java b/src/main/java/clap/server/application/port/outbound/task/LoadAttachmentPort.java index bd8d8df3..6796877d 100644 --- a/src/main/java/clap/server/application/port/outbound/task/LoadAttachmentPort.java +++ b/src/main/java/clap/server/application/port/outbound/task/LoadAttachmentPort.java @@ -6,5 +6,5 @@ public interface LoadAttachmentPort { - List findAllByTaskId(Long task); + List findAllByTaskIdAndCommentIsNull(Long task); } diff --git a/src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java b/src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java index 8698b2da..ecd2dbbe 100644 --- a/src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java +++ b/src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java @@ -32,7 +32,7 @@ public List findRequestedTaskDetails(final Long request memberService.findActiveMember(requesterId); Task task = loadTaskPort.findById(taskId) .orElseThrow(()-> new ApplicationException(TaskErrorCode.TASK_NOT_FOUND)); - List attachments = loadAttachmentPort.findAllByTaskId(taskId); //TODO: comment에 달린 이미지 첨부파일은 가져오지 않도록 수정 + List attachments = loadAttachmentPort.findAllByTaskIdAndCommentIsNull(taskId); return TaskMapper.toFindTaskDetailResponses(task, attachments); } } From efd2d6fcc227207e2d59d96e4a783943448b6c86 Mon Sep 17 00:00:00 2001 From: parkjaehak Date: Fri, 24 Jan 2025 21:36:20 +0900 Subject: [PATCH 5/5] =?UTF-8?q?CLAP-108=20Fix:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistense/repository/task/TaskRepository.java | 9 +++------ .../{service => }/Task/CreateTaskService.java | 2 +- .../{service => }/Task/FindTaskDetailsService.java | 2 +- .../{service => }/Task/FindTaskListService.java | 2 +- .../{service => }/Task/UpdateTaskService.java | 2 +- 5 files changed, 7 insertions(+), 10 deletions(-) rename src/main/java/clap/server/application/{service => }/Task/CreateTaskService.java (97%) rename src/main/java/clap/server/application/{service => }/Task/FindTaskDetailsService.java (97%) rename src/main/java/clap/server/application/{service => }/Task/FindTaskListService.java (96%) rename src/main/java/clap/server/application/{service => }/Task/UpdateTaskService.java (98%) diff --git a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskRepository.java b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskRepository.java index 46bd8bd2..c4fdc318 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskRepository.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/repository/task/TaskRepository.java @@ -1,22 +1,19 @@ package clap.server.adapter.outbound.persistense.repository.task; -import clap.server.adapter.inbound.web.dto.task.FindTaskListRequest; + import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; import clap.server.adapter.outbound.persistense.entity.task.constant.TaskStatus; import io.lettuce.core.dynamic.annotation.Param; -import org.springframework.data.domain.Pageable; + import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; -import java.nio.channels.FileChannel; + import java.time.LocalDateTime; import java.util.Collection; -import org.springframework.stereotype.Repository; - -import java.time.LocalDateTime; import java.util.List; diff --git a/src/main/java/clap/server/application/service/Task/CreateTaskService.java b/src/main/java/clap/server/application/Task/CreateTaskService.java similarity index 97% rename from src/main/java/clap/server/application/service/Task/CreateTaskService.java rename to src/main/java/clap/server/application/Task/CreateTaskService.java index cd988ce4..7fb52efa 100644 --- a/src/main/java/clap/server/application/service/Task/CreateTaskService.java +++ b/src/main/java/clap/server/application/Task/CreateTaskService.java @@ -1,4 +1,4 @@ -package clap.server.application.service.Task; +package clap.server.application.Task; import clap.server.adapter.inbound.web.dto.task.CreateTaskRequest; import clap.server.adapter.inbound.web.dto.task.CreateTaskResponse; diff --git a/src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java b/src/main/java/clap/server/application/Task/FindTaskDetailsService.java similarity index 97% rename from src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java rename to src/main/java/clap/server/application/Task/FindTaskDetailsService.java index ecd2dbbe..c48dc7b9 100644 --- a/src/main/java/clap/server/application/service/Task/FindTaskDetailsService.java +++ b/src/main/java/clap/server/application/Task/FindTaskDetailsService.java @@ -1,4 +1,4 @@ -package clap.server.application.service.Task; +package clap.server.application.Task; import clap.server.adapter.inbound.web.dto.task.FindTaskDetailsResponse; import clap.server.adapter.outbound.persistense.entity.task.TaskEntity; diff --git a/src/main/java/clap/server/application/service/Task/FindTaskListService.java b/src/main/java/clap/server/application/Task/FindTaskListService.java similarity index 96% rename from src/main/java/clap/server/application/service/Task/FindTaskListService.java rename to src/main/java/clap/server/application/Task/FindTaskListService.java index 9573d3f3..bb8d9183 100644 --- a/src/main/java/clap/server/application/service/Task/FindTaskListService.java +++ b/src/main/java/clap/server/application/Task/FindTaskListService.java @@ -1,4 +1,4 @@ -package clap.server.application.service.Task; +package clap.server.application.Task; import clap.server.adapter.inbound.web.dto.task.FilterTaskListRequest; import clap.server.adapter.inbound.web.dto.task.FindTaskListResponse; diff --git a/src/main/java/clap/server/application/service/Task/UpdateTaskService.java b/src/main/java/clap/server/application/Task/UpdateTaskService.java similarity index 98% rename from src/main/java/clap/server/application/service/Task/UpdateTaskService.java rename to src/main/java/clap/server/application/Task/UpdateTaskService.java index 827eb54d..e83d1b7f 100644 --- a/src/main/java/clap/server/application/service/Task/UpdateTaskService.java +++ b/src/main/java/clap/server/application/Task/UpdateTaskService.java @@ -1,4 +1,4 @@ -package clap.server.application.service.Task; +package clap.server.application.Task; import clap.server.adapter.inbound.web.dto.task.UpdateTaskRequest; import clap.server.adapter.inbound.web.dto.task.UpdateTaskResponse;