Skip to content

Commit 466395e

Browse files
authored
Merge branch 'develop' into CLAP-215
2 parents 82d1ba7 + 4daabf7 commit 466395e

File tree

165 files changed

+1063
-916
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+1063
-916
lines changed

src/main/java/clap/server/TaskflowApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.scheduling.annotation.EnableAsync;
56
import org.springframework.scheduling.annotation.EnableScheduling;
67

78
@SpringBootApplication
89
@EnableScheduling
10+
@EnableAsync
911
public class TaskflowApplication {
1012

1113
public static void main(String[] args) {

src/main/java/clap/server/adapter/inbound/web/admin/AddCategoryController.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import clap.server.adapter.inbound.security.SecurityUserDetails;
44
import clap.server.adapter.inbound.web.dto.admin.AddMainCategoryRequest;
55
import clap.server.adapter.inbound.web.dto.admin.AddSubCategoryRequest;
6-
import clap.server.application.port.inbound.admin.AddCategoryUsecase;
6+
import clap.server.application.port.inbound.admin.AddMainCategoryUsecase;
7+
import clap.server.application.port.inbound.admin.AddSubCategoryUsecase;
78
import clap.server.common.annotation.architecture.WebAdapter;
89
import io.swagger.v3.oas.annotations.Operation;
910
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -20,20 +21,21 @@
2021
@RequiredArgsConstructor
2122
@RequestMapping("/api/managements")
2223
public class AddCategoryController {
23-
private final AddCategoryUsecase addCategoryUsecase;
24+
private final AddMainCategoryUsecase addMainCategoryUsecase;
25+
private final AddSubCategoryUsecase addSubCategoryUsecase;
2426

2527
@Operation(summary = "1차 카테고리 추가")
2628
@PostMapping("/main-category")
2729
@Secured("ROLE_ADMIN")
2830
public void addMainCategory(@AuthenticationPrincipal SecurityUserDetails userInfo, @Valid @RequestBody AddMainCategoryRequest addMainCategoryRequest) {
29-
addCategoryUsecase.addMainCategory(userInfo.getUserId(), addMainCategoryRequest.code(), addMainCategoryRequest.name());
31+
addMainCategoryUsecase.addMainCategory(userInfo.getUserId(), addMainCategoryRequest.code(), addMainCategoryRequest.name());
3032
}
3133

3234
@Operation(summary = "2차 카테고리 추가")
3335
@PostMapping("/sub-category")
3436
@Secured("ROLE_ADMIN")
3537
public void addSubCategory(@AuthenticationPrincipal SecurityUserDetails userInfo, @Valid @RequestBody AddSubCategoryRequest addCategoryRequest) {
36-
addCategoryUsecase.addSubCategory(userInfo.getUserId(), addCategoryRequest.mainCategoryId(), addCategoryRequest.code(), addCategoryRequest.name());
38+
addSubCategoryUsecase.addSubCategory(userInfo.getUserId(), addCategoryRequest.mainCategoryId(), addCategoryRequest.code(), addCategoryRequest.name());
3739
}
3840

3941
}

src/main/java/clap/server/adapter/inbound/web/admin/FindCategoryController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import java.util.List;
1818

19-
@Tag(name = "카테고리 조회")
19+
@Tag(name = "02. Task [카테고리]", description = "카테고리 조회 API")
2020
@WebAdapter
2121
@RequiredArgsConstructor
2222
@RequestMapping("/api")

src/main/java/clap/server/adapter/inbound/web/admin/FindLabelAdminController.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import clap.server.adapter.inbound.security.SecurityUserDetails;
44
import clap.server.adapter.inbound.web.dto.common.SliceResponse;
55
import clap.server.adapter.inbound.web.dto.label.FindLabelListResponse;
6+
import clap.server.application.port.inbound.label.FindLabelListAdminUsecase;
67
import clap.server.application.port.inbound.label.FindLabelListUsecase;
78
import clap.server.common.annotation.architecture.WebAdapter;
89
import io.swagger.v3.oas.annotations.Operation;
@@ -22,13 +23,13 @@
2223
@RequestMapping("/api/managements/labels")
2324
public class FindLabelAdminController {
2425

25-
private final FindLabelListUsecase findLabelListUsecase;
26+
private final FindLabelListAdminUsecase findLabelListAdminUsecase;
2627

2728
@Operation(summary = "구분 목록 조회 API")
2829
@Secured({"ROLE_ADMIN"})
2930
@GetMapping
3031
public ResponseEntity<List<FindLabelListResponse>> findLabelList(
3132
@AuthenticationPrincipal SecurityUserDetails userInfo) {
32-
return ResponseEntity.ok(findLabelListUsecase.findLabelListAdmin(userInfo.getUserId()));
33+
return ResponseEntity.ok(findLabelListAdminUsecase.findLabelListAdmin(userInfo.getUserId()));
3334
}
3435
}

src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
import clap.server.adapter.inbound.web.dto.admin.FindMemberRequest;
44
import clap.server.adapter.inbound.web.dto.admin.RetrieveAllMemberResponse;
55
import clap.server.application.mapper.RetrieveAllMemberMapper;
6-
import clap.server.application.port.inbound.management.FindAllMembersUsecase;
7-
import clap.server.application.port.inbound.management.FindMembersWithFilterUsecase;
6+
import clap.server.application.port.inbound.admin.FindAllMembersUsecase;
7+
import clap.server.application.port.inbound.admin.FindMembersWithFilterUsecase;
88
import clap.server.domain.model.member.Member;
9+
import clap.server.exception.ApplicationException;
10+
import clap.server.exception.code.MemberErrorCode;
911
import io.swagger.v3.oas.annotations.Operation;
1012
import io.swagger.v3.oas.annotations.Parameter;
1113
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -32,27 +34,30 @@ public class FindMemberController {
3234
description = "모든 회원 정보를 페이징 처리하여 반환하거나 조건에 맞는 회원 정보를 반환합니다.",
3335
parameters = {
3436
@Parameter(name = "page", description = "조회할 페이지 번호 (0부터 시작, 기본값: 0)", example = "0"),
35-
@Parameter(name = "size", description = "페이지 당 회원 수 (기본값: 20)", example = "20")
37+
@Parameter(name = "pageSize", description = "페이지 당 회원 수 (기본값: 20)", example = "20")
3638
}
3739
)
3840
@GetMapping("/members")
3941
public ResponseEntity<Page<RetrieveAllMemberResponse>> getAllMembers(
4042
@RequestParam(defaultValue = "0") int page,
41-
@RequestParam(defaultValue = "20") int size,
42-
@ModelAttribute FindMemberRequest filterRequest) {
43+
@RequestParam(defaultValue = "20") int pageSize,
44+
@RequestBody FindMemberRequest filterRequest) {
4345

44-
Pageable pageable = PageRequest.of(page, size);
46+
if (filterRequest.name() != null && filterRequest.name().trim().isEmpty()) {
47+
throw ApplicationException.from(MemberErrorCode.NAME_CANNOT_BE_EMPTY);
48+
}
49+
50+
Pageable pageable = PageRequest.of(page, pageSize);
4551
Page<Member> members;
4652

47-
if (filterRequest.getName() != null || filterRequest.getEmail() != null || filterRequest.getNickname() != null ||
48-
filterRequest.getDepartmentId() != null || filterRequest.getRole() != null) {
53+
if (filterRequest.name() != null || filterRequest.email() != null || filterRequest.nickName() != null ||
54+
filterRequest.departmentName() != null || filterRequest.role() != null) {
4955
members = findMembersWithFilterUsecase.findMembersWithFilter(pageable, filterRequest);
5056
} else {
5157
members = findAllMembersUsecase.findAllMembers(pageable);
5258
}
5359

54-
5560
Page<RetrieveAllMemberResponse> response = members.map(retrieveAllMemberMapper::toResponse);
5661
return ResponseEntity.ok(response);
5762
}
58-
}
63+
}

src/main/java/clap/server/adapter/inbound/web/admin/ManagementLabelController.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
package clap.server.adapter.inbound.web.admin;
22

33
import clap.server.adapter.inbound.security.SecurityUserDetails;
4-
import clap.server.adapter.inbound.web.dto.label.AddAndEditLabelRequest;
5-
import clap.server.application.port.inbound.admin.AddLabelUsecase;
4+
import clap.server.adapter.inbound.web.dto.label.CreateLabelRequest;
5+
import clap.server.adapter.inbound.web.dto.label.EditLabelRequest;
6+
import clap.server.application.port.inbound.label.AddLabelUsecase;
67
import clap.server.application.port.inbound.admin.DeleteLabelUsecase;
7-
import clap.server.application.port.inbound.admin.UpdateLabelUsecase;
8+
import clap.server.application.port.inbound.label.UpdateLabelUsecase;
89
import clap.server.common.annotation.architecture.WebAdapter;
910
import io.swagger.v3.oas.annotations.Operation;
1011
import io.swagger.v3.oas.annotations.Parameter;
1112
import io.swagger.v3.oas.annotations.enums.ParameterIn;
1213
import io.swagger.v3.oas.annotations.tags.Tag;
14+
import jakarta.validation.Valid;
1315
import lombok.RequiredArgsConstructor;
1416
import org.springframework.security.access.annotation.Secured;
1517
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@@ -29,7 +31,7 @@ public class ManagementLabelController {
2931
@PostMapping
3032
@Secured({"ROLE_ADMIN"})
3133
public void addLabel(@AuthenticationPrincipal SecurityUserDetails userInfo,
32-
@RequestBody AddAndEditLabelRequest request) {
34+
@Valid @RequestBody CreateLabelRequest request) {
3335
addLabelUsecase.addLabel(userInfo.getUserId(), request);
3436
}
3537

@@ -39,7 +41,7 @@ public void addLabel(@AuthenticationPrincipal SecurityUserDetails userInfo,
3941
@Secured({"ROLE_ADMIN"})
4042
public void updateLabel(@AuthenticationPrincipal SecurityUserDetails userInfo,
4143
@PathVariable Long labelId,
42-
@RequestBody AddAndEditLabelRequest request) {
44+
@Valid @RequestBody EditLabelRequest request) {
4345
updateLabelUsecase.editLabel(userInfo.getUserId(), labelId, request);
4446

4547
}

src/main/java/clap/server/adapter/inbound/web/admin/UpdateCategoryController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import clap.server.common.annotation.architecture.WebAdapter;
77
import io.swagger.v3.oas.annotations.Operation;
88
import io.swagger.v3.oas.annotations.tags.Tag;
9+
import jakarta.validation.Valid;
910
import lombok.RequiredArgsConstructor;
1011
import org.springframework.security.access.annotation.Secured;
1112
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@@ -25,7 +26,7 @@ public class UpdateCategoryController {
2526
@PatchMapping("/categories/{categoryId}")
2627
@Secured("ROLE_ADMIN")
2728
public void updateCategory(@AuthenticationPrincipal SecurityUserDetails userInfo, @PathVariable Long categoryId,
28-
@RequestBody UpdateCategoryRequest updateCategoryRequest) {
29+
@Valid @RequestBody UpdateCategoryRequest updateCategoryRequest) {
2930
updateCategoryUsecase.updateCategory(userInfo.getUserId(), categoryId, updateCategoryRequest.name(), updateCategoryRequest.code());
3031
}
3132
}

src/main/java/clap/server/adapter/inbound/web/comment/CommandCommentController.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package clap.server.adapter.inbound.web.comment;
22

33
import clap.server.adapter.inbound.security.SecurityUserDetails;
4-
import clap.server.adapter.inbound.web.dto.task.PostAndEditCommentRequest;
5-
import clap.server.application.port.inbound.comment.CommandCommentUsecase;
4+
import clap.server.adapter.inbound.web.dto.comment.EditCommentRequest;
5+
import clap.server.application.port.inbound.comment.DeleteCommentUsecase;
6+
import clap.server.application.port.inbound.comment.EditCommentUsecase;
67
import clap.server.common.annotation.architecture.WebAdapter;
78
import io.swagger.v3.oas.annotations.Operation;
89
import io.swagger.v3.oas.annotations.Parameter;
910
import io.swagger.v3.oas.annotations.enums.ParameterIn;
1011
import io.swagger.v3.oas.annotations.tags.Tag;
12+
import jakarta.validation.Valid;
1113
import lombok.RequiredArgsConstructor;
1214
import org.springframework.security.access.annotation.Secured;
1315
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@@ -20,7 +22,8 @@
2022
@RequestMapping("/api/comment")
2123
public class CommandCommentController {
2224

23-
private final CommandCommentUsecase commandCommentUsecase;
25+
private final EditCommentUsecase editCommentUsecase;
26+
private final DeleteCommentUsecase deleteCommentUsecase;
2427

2528
@Operation(summary = "댓글 수정")
2629
@Parameter(name = "commentId", description = "수정할 댓글 고유 ID", required = true, in = ParameterIn.PATH)
@@ -29,8 +32,8 @@ public class CommandCommentController {
2932
public void editComment(
3033
@AuthenticationPrincipal SecurityUserDetails userInfo,
3134
@PathVariable Long commentId,
32-
@RequestBody PostAndEditCommentRequest request) {
33-
commandCommentUsecase.updateComment(userInfo.getUserId(), commentId, request);
35+
@Valid @RequestBody EditCommentRequest request) {
36+
editCommentUsecase.editComment(userInfo.getUserId(), commentId, request);
3437
}
3538

3639
@Operation(summary = "댓글 삭제", description = "첨부파일 댓글일 경우 request body에 삭제할 파일 ID를 리스트로 전달")
@@ -40,7 +43,7 @@ public void editComment(
4043
public void deleteComment(
4144
@AuthenticationPrincipal SecurityUserDetails userInfo,
4245
@PathVariable Long commentId) {
43-
commandCommentUsecase.deleteComment(userInfo.getUserId(), commentId);
46+
deleteCommentUsecase.deleteComment(userInfo.getUserId(), commentId);
4447
}
4548

4649
}
Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,31 @@
11
package clap.server.adapter.inbound.web.comment;
22

33
import clap.server.adapter.inbound.security.SecurityUserDetails;
4-
import clap.server.adapter.inbound.web.dto.task.PostAndEditCommentRequest;
5-
import clap.server.application.port.inbound.comment.PostCommentUsecase;
4+
import clap.server.adapter.inbound.web.dto.comment.CreateCommentRequest;
5+
import clap.server.application.port.inbound.comment.SaveCommentAttachmentUsecase;
6+
import clap.server.application.port.inbound.comment.SaveCommentUsecase;
67
import clap.server.common.annotation.architecture.WebAdapter;
78
import io.swagger.v3.oas.annotations.Operation;
89
import io.swagger.v3.oas.annotations.Parameter;
910
import io.swagger.v3.oas.annotations.enums.ParameterIn;
1011
import io.swagger.v3.oas.annotations.tags.Tag;
12+
import jakarta.validation.Valid;
1113
import jakarta.validation.constraints.NotNull;
1214
import lombok.RequiredArgsConstructor;
1315
import org.springframework.security.access.annotation.Secured;
1416
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1517
import org.springframework.web.bind.annotation.*;
1618
import org.springframework.web.multipart.MultipartFile;
1719

18-
import java.util.List;
19-
2020
@Tag(name = "02. Task [생성/수정]", description = "작업 생성/수정 API")
2121
@WebAdapter
2222
@RestController
2323
@RequiredArgsConstructor
2424
@RequestMapping("/api/comment")
2525
public class PostCommentController {
2626

27-
private final PostCommentUsecase postCommentUsecase;
27+
private final SaveCommentUsecase saveCommentUsecase;
28+
private final SaveCommentAttachmentUsecase saveCommentAttachmentUsecase;
2829

2930
@Operation(summary = "댓글 작성")
3031
@Parameter(name = "taskId", description = "댓글 작성할 작업 고유 ID", required = true, in = ParameterIn.PATH)
@@ -33,8 +34,8 @@ public class PostCommentController {
3334
public void createComment(
3435
@AuthenticationPrincipal SecurityUserDetails userInfo,
3536
@PathVariable Long taskId,
36-
@RequestBody(required = true) PostAndEditCommentRequest request){
37-
postCommentUsecase.save(userInfo.getUserId(), taskId, request);
37+
@Valid @RequestBody CreateCommentRequest request){
38+
saveCommentUsecase.save(userInfo.getUserId(), taskId, request);
3839
}
3940

4041
@Operation(summary = "댓글 작성(첨부 파일)")
@@ -44,8 +45,8 @@ public void createComment(
4445
public void createAttachmentComment(
4546
@AuthenticationPrincipal SecurityUserDetails userInfo,
4647
@PathVariable Long taskId,
47-
@RequestPart(name = "attachment") @NotNull List<MultipartFile> attachments) {
48-
postCommentUsecase.saveCommentAttachment(userInfo.getUserId(), taskId, attachments);
48+
@RequestPart(name = "attachment") @NotNull MultipartFile attachment) {
49+
saveCommentAttachmentUsecase.saveCommentAttachment(userInfo.getUserId(), taskId, attachment);
4950
}
5051

5152
}

src/main/java/clap/server/adapter/inbound/web/dto/admin/FindMemberRequest.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,20 @@
22

33
import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole;
44
import io.swagger.v3.oas.annotations.media.Schema;
5-
import lombok.Data;
65

7-
@Data
8-
public class FindMemberRequest {
9-
@Schema(description = "회원 이름", example = "양시훈")
10-
private String name;
6+
public record FindMemberRequest(
7+
@Schema(description = "회원 이름", example = "양시훈")
8+
String name,
119

12-
@Schema(description = "회원 이메일", example = "sihun123@gmail.com")
13-
private String email;
10+
@Schema(description = "회원 이메일", example = "sihun123@gmail.com")
11+
String email,
1412

15-
@Schema(description = "회원 닉네임", example = "leo.sh")
16-
private String nickname;
13+
@Schema(description = "회원 닉네임", example = "leo.sh")
14+
String nickName,
1715

18-
@Schema(description = "부서 ID", example = "1")
19-
private Long departmentId;
16+
@Schema(description = "부서 이름", example = "1")
17+
String departmentName,
2018

21-
@Schema(description = "회원 역할", example = "ROLE_USER")
22-
private MemberRole role;
23-
}
19+
@Schema(description = "회원 역할", example = "ROLE_USER")
20+
MemberRole role
21+
) {}

0 commit comments

Comments
 (0)