From 91434a0a3253730e18913440f4988104a0ecc50e Mon Sep 17 00:00:00 2001 From: Sihun23 Date: Sun, 2 Feb 2025 18:06:05 +0900 Subject: [PATCH 1/2] =?UTF-8?q?CLAP-217=20fix:=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=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/FindMemberController.java | 19 ++++++++++++------- .../web/dto/admin/FindMemberRequest.java | 6 +++--- .../dto/admin/RetrieveAllMemberResponse.java | 4 ++-- .../persistense/MemberPersistenceAdapter.java | 8 ++++---- .../mapper/RetrieveAllMemberMapper.java | 2 +- .../exception/code/MemberErrorCode.java | 4 +++- 6 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java b/src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java index 28a18ec7..fa347251 100644 --- a/src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java +++ b/src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java @@ -6,6 +6,8 @@ import clap.server.application.port.inbound.management.FindAllMembersUsecase; import clap.server.application.port.inbound.management.FindMembersWithFilterUsecase; import clap.server.domain.model.member.Member; +import clap.server.exception.ApplicationException; +import clap.server.exception.code.MemberErrorCode; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -32,27 +34,30 @@ public class FindMemberController { description = "모든 회원 정보를 페이징 처리하여 반환하거나 조건에 맞는 회원 정보를 반환합니다.", parameters = { @Parameter(name = "page", description = "조회할 페이지 번호 (0부터 시작, 기본값: 0)", example = "0"), - @Parameter(name = "size", description = "페이지 당 회원 수 (기본값: 20)", example = "20") + @Parameter(name = "pageSize", description = "페이지 당 회원 수 (기본값: 20)", example = "20") } ) @GetMapping("/members") public ResponseEntity> getAllMembers( @RequestParam(defaultValue = "0") int page, - @RequestParam(defaultValue = "20") int size, + @RequestParam(defaultValue = "20") int pageSize, @ModelAttribute FindMemberRequest filterRequest) { - Pageable pageable = PageRequest.of(page, size); + if (filterRequest.getName() != null && filterRequest.getName().trim().isEmpty()) { + throw ApplicationException.from(MemberErrorCode.NAME_CANNOT_BE_EMPTY); + } + + Pageable pageable = PageRequest.of(page, pageSize); Page members; - if (filterRequest.getName() != null || filterRequest.getEmail() != null || filterRequest.getNickname() != null || - filterRequest.getDepartmentId() != null || filterRequest.getRole() != null) { + if (filterRequest.getName() != null || filterRequest.getEmail() != null || filterRequest.getNickName() != null || + filterRequest.getDepartmentName() != null || filterRequest.getRole() != null) { members = findMembersWithFilterUsecase.findMembersWithFilter(pageable, filterRequest); } else { members = findAllMembersUsecase.findAllMembers(pageable); } - Page response = members.map(retrieveAllMemberMapper::toResponse); return ResponseEntity.ok(response); } -} \ No newline at end of file +} diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindMemberRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindMemberRequest.java index f94708ac..8f98cbef 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindMemberRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindMemberRequest.java @@ -13,10 +13,10 @@ public class FindMemberRequest { private String email; @Schema(description = "회원 닉네임", example = "leo.sh") - private String nickname; + private String nickName; - @Schema(description = "부서 ID", example = "1") - private Long departmentId; + @Schema(description = "부서 이름", example = "1") + private String departmentName; @Schema(description = "회원 역할", example = "ROLE_USER") private MemberRole role; diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/admin/RetrieveAllMemberResponse.java b/src/main/java/clap/server/adapter/inbound/web/dto/admin/RetrieveAllMemberResponse.java index 33c1e08f..3f488886 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/admin/RetrieveAllMemberResponse.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/admin/RetrieveAllMemberResponse.java @@ -16,8 +16,8 @@ public record RetrieveAllMemberResponse( @Schema(description = "승인 권한 여부", example = "true") Boolean isReviewer, - @Schema(description = "부서 ID", example = "1") - Long departmentId, + @Schema(description = "부서 이름", example = "개발팀") + String departmentName, @Schema(description = "회원 역할", example = "ROLE_USER") MemberRole role, diff --git a/src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java index a71a91bf..36255b99 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java @@ -126,11 +126,11 @@ private BooleanBuilder createMemberFilter(FindMemberRequest filterRequest) { if (filterRequest.getEmail() != null) { whereClause.and(memberEntity.email.containsIgnoreCase(filterRequest.getEmail())); } - if (filterRequest.getNickname() != null) { - whereClause.and(memberEntity.nickname.containsIgnoreCase(filterRequest.getNickname())); + if (filterRequest.getNickName() != null) { + whereClause.and(memberEntity.nickname.containsIgnoreCase(filterRequest.getNickName())); } - if (filterRequest.getDepartmentId() != null) { - whereClause.and(memberEntity.department.departmentId.eq(filterRequest.getDepartmentId())); + if (filterRequest.getDepartmentName() != null) { + whereClause.and(memberEntity.department.name.containsIgnoreCase(filterRequest.getDepartmentName())); } if (filterRequest.getRole() != null) { whereClause.and(memberEntity.role.eq(filterRequest.getRole())); diff --git a/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java b/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java index f48de77b..3d50fc71 100644 --- a/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java +++ b/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java @@ -20,7 +20,7 @@ public RetrieveAllMemberResponse toResponse(Member member) { member.getMemberInfo().getEmail(), member.getMemberInfo().getNickname(), member.getMemberInfo().isReviewer(), - member.getMemberInfo().getDepartment().getDepartmentId(), + member.getMemberInfo().getDepartment().getName(), member.getMemberInfo().getRole(), member.getMemberInfo().getDepartmentRole() ); diff --git a/src/main/java/clap/server/exception/code/MemberErrorCode.java b/src/main/java/clap/server/exception/code/MemberErrorCode.java index 72bc2e65..3cc8bd8d 100644 --- a/src/main/java/clap/server/exception/code/MemberErrorCode.java +++ b/src/main/java/clap/server/exception/code/MemberErrorCode.java @@ -14,7 +14,9 @@ public enum MemberErrorCode implements BaseErrorCode { PASSWORD_VERIFY_FAILED(HttpStatus.BAD_REQUEST, "MEMBER_006", "비밀번호 검증에 실패하였습니다"), INVALID_CSV_FORMAT(HttpStatus.BAD_REQUEST, "MEMBER_007", "CSV 파일 형식이 잘못되었습니다."), CSV_PARSING_ERROR(HttpStatus.BAD_REQUEST, "MEMBER_008", "CSV 데이터 파싱 중 오류가 발생했습니다."), - MEMBER_REGISTRATION_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "MEMBER_009", "회원 등록 중 오류가 발생했습니다.") + MEMBER_REGISTRATION_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "MEMBER_009", "회원 등록 중 오류가 발생했습니다."), + NAME_CANNOT_BE_EMPTY(HttpStatus.BAD_REQUEST, "MEMBER_010", "이름은 공백일 수 없습니다.") + ; private final HttpStatus httpStatus; From 96edee700c1c1ee208522042234ba583398edbc1 Mon Sep 17 00:00:00 2001 From: Sihun23 Date: Sun, 2 Feb 2025 18:22:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?CLAP-217=20fix:findMemberRequest=20dto=20re?= =?UTF-8?q?cord=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/admin/FindMemberController.java | 8 +++--- .../web/dto/admin/FindMemberRequest.java | 26 +++++++++---------- .../persistense/MemberPersistenceAdapter.java | 20 +++++++------- 3 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java b/src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java index fa347251..0c487daa 100644 --- a/src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java +++ b/src/main/java/clap/server/adapter/inbound/web/admin/FindMemberController.java @@ -41,17 +41,17 @@ public class FindMemberController { public ResponseEntity> getAllMembers( @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "20") int pageSize, - @ModelAttribute FindMemberRequest filterRequest) { + @RequestBody FindMemberRequest filterRequest) { - if (filterRequest.getName() != null && filterRequest.getName().trim().isEmpty()) { + if (filterRequest.name() != null && filterRequest.name().trim().isEmpty()) { throw ApplicationException.from(MemberErrorCode.NAME_CANNOT_BE_EMPTY); } Pageable pageable = PageRequest.of(page, pageSize); Page members; - if (filterRequest.getName() != null || filterRequest.getEmail() != null || filterRequest.getNickName() != null || - filterRequest.getDepartmentName() != null || filterRequest.getRole() != null) { + if (filterRequest.name() != null || filterRequest.email() != null || filterRequest.nickName() != null || + filterRequest.departmentName() != null || filterRequest.role() != null) { members = findMembersWithFilterUsecase.findMembersWithFilter(pageable, filterRequest); } else { members = findAllMembersUsecase.findAllMembers(pageable); diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindMemberRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindMemberRequest.java index 8f98cbef..c7e6f906 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindMemberRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/admin/FindMemberRequest.java @@ -2,22 +2,20 @@ import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -@Data -public class FindMemberRequest { - @Schema(description = "회원 이름", example = "양시훈") - private String name; +public record FindMemberRequest( + @Schema(description = "회원 이름", example = "양시훈") + String name, - @Schema(description = "회원 이메일", example = "sihun123@gmail.com") - private String email; + @Schema(description = "회원 이메일", example = "sihun123@gmail.com") + String email, - @Schema(description = "회원 닉네임", example = "leo.sh") - private String nickName; + @Schema(description = "회원 닉네임", example = "leo.sh") + String nickName, - @Schema(description = "부서 이름", example = "1") - private String departmentName; + @Schema(description = "부서 이름", example = "1") + String departmentName, - @Schema(description = "회원 역할", example = "ROLE_USER") - private MemberRole role; -} + @Schema(description = "회원 역할", example = "ROLE_USER") + MemberRole role +) {} diff --git a/src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java b/src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java index 36255b99..38718363 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/MemberPersistenceAdapter.java @@ -120,20 +120,20 @@ private BooleanBuilder createMemberFilter(FindMemberRequest filterRequest) { BooleanBuilder whereClause = new BooleanBuilder(); whereClause.and(memberEntity.status.ne(MemberStatus.DELETED)); - if (filterRequest.getName() != null) { - whereClause.and(memberEntity.name.containsIgnoreCase(filterRequest.getName())); + if (filterRequest.name() != null) { + whereClause.and(memberEntity.name.containsIgnoreCase(filterRequest.name())); } - if (filterRequest.getEmail() != null) { - whereClause.and(memberEntity.email.containsIgnoreCase(filterRequest.getEmail())); + if (filterRequest.email() != null) { + whereClause.and(memberEntity.email.containsIgnoreCase(filterRequest.email())); } - if (filterRequest.getNickName() != null) { - whereClause.and(memberEntity.nickname.containsIgnoreCase(filterRequest.getNickName())); + if (filterRequest.nickName() != null) { + whereClause.and(memberEntity.nickname.containsIgnoreCase(filterRequest.nickName())); } - if (filterRequest.getDepartmentName() != null) { - whereClause.and(memberEntity.department.name.containsIgnoreCase(filterRequest.getDepartmentName())); + if (filterRequest.departmentName() != null) { + whereClause.and(memberEntity.department.name.containsIgnoreCase(filterRequest.departmentName())); } - if (filterRequest.getRole() != null) { - whereClause.and(memberEntity.role.eq(filterRequest.getRole())); + if (filterRequest.role() != null) { + whereClause.and(memberEntity.role.eq(filterRequest.role())); } return whereClause;