개발 기록/도서관 관리 시스템

[Library Management System] 25.08.26 (29일)

dev.jelee 2025. 8. 26. 17:15

[ 작업한 내용 ]

1. domain/user/enums 생성

- UserSearchType.java (USERNAME, EMAIL).

- 타입관리를 용이하게 하기 위해 타입인 USERNAME, EMAIL을 enum으로 관리.


2. message.properties 메시지 추가

- 관리자 요구사항 중 사용자 타입별 검색 조회시 발생하는 성공, 실패 메시지 관리.

success.user.search=사용자 조회가 완료되었습니다.
error.user.search.type=유효하지 않은 검색 타입입니다.

3. UserSuccessCode 상태코드 추가

- 사용자 타입별 검색 조회에 성공했을 때 처리할 상태코드 작성.

USER_SEARCH(HttpStatus.OK, "USER_204", "success.user.search");

4. UserErrorCode 상태코드 추가

- 사용자 타입별 검색 조회에 실패했을 때 처리할 상태코드 작성.

USER_SEARCH_TYPE_FAILED(HttpStatus.BAD_REQUEST, "USER_006", "error.user.search.type");

5. UserService

- 회원 검색은 타입별 조회를 하고 결과는 페이징으로 처리한다.

- controller에서 전달받은 type, keyword, page, size 매개변수를 토대로 비즈니스 로직 처리.

- switch문을 사용하여 type별 조건 실행 (findByUsernameContainingIgnoreCase , findByEmailContainingIgnoreCase )

switch (type) {
  case USERNAME:
    result = userRepository.findByUsernameContainingIgnoreCase(keyword, pageable);
    break;
  case EMAIL:
    result = userRepository.findByEmailContainingIgnoreCase(keyword, pageable);
    break;
  default:
    throw new IllegalArgumentException("Unexpected search type: " + type);
}

6. UserRepository

- username, email 각각 검색하는 메서드 생성 (JPA)

// 관리자 - 회원 username 검색 (+페이징)
Page<User> findByUsernameContainingIgnoreCase(String username, Pageable pageable);

// 관리자 - 회원 email 검색 (+페이징)
Page<User> findByEmailContainingIgnoreCase(String email, Pageable pageable);

7. UserSearchResDTO

- 검색 응답용 DTO 생성.

@Getter
public class UserSearchResDTO {
  private long id;
  private String username;
  private String email;
  private Role role;
  private LocalDateTime joinDate;
  private LocalDateTime lastLoginDate;
  private UserStatus status;

  public UserSearchResDTO(User user) {
    this.id = user.getId();
    this.username = user.getUsername();
    this.email = user.getEmail();
    this.role = user.getRole();
    this.joinDate = user.getJoinDate();
    this.lastLoginDate = user.getLastLoginDate();
    this.status = user.getStatus();
  }
}

commit
postman api test