Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<Page<RetrieveAllMemberResponse>> getAllMembers(
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size,
@ModelAttribute FindMemberRequest filterRequest) {
@RequestParam(defaultValue = "20") int pageSize,
@RequestBody FindMemberRequest filterRequest) {

Pageable pageable = PageRequest.of(page, size);
if (filterRequest.name() != null && filterRequest.name().trim().isEmpty()) {
throw ApplicationException.from(MemberErrorCode.NAME_CANNOT_BE_EMPTY);
}

Pageable pageable = PageRequest.of(page, pageSize);
Page<Member> members;

if (filterRequest.getName() != null || filterRequest.getEmail() != null || filterRequest.getNickname() != null ||
filterRequest.getDepartmentId() != 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);
}


Page<RetrieveAllMemberResponse> response = members.map(retrieveAllMemberMapper::toResponse);
return ResponseEntity.ok(response);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "부서 ID", example = "1")
private Long departmentId;
@Schema(description = "부서 이름", example = "1")
String departmentName,

@Schema(description = "회원 역할", example = "ROLE_USER")
private MemberRole role;
}
@Schema(description = "회원 역할", example = "ROLE_USER")
MemberRole role
) {}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.getDepartmentId() != null) {
whereClause.and(memberEntity.department.departmentId.eq(filterRequest.getDepartmentId()));
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down