[ 작업한 내용 ]
1. 관리자 권한 수정 기능 추가
1-1) user 테이블과 User 엔티티
- 수정날짜 컬럼과 필드가 없어서 DB와 엔티티에 각각 updatedAt추가.
- DB에는 updated_at 컬럼 추가.
- User 엔티티에는 updatedAt 필드 추가.
1-2) messages.properties
- 메시지 추가.
success.user.role_update=권한이 성공적으로 변경되었습니다.
1-3) UserSuccessCode
- 성공 코드 추가.
USER_ROLE_UPDATE(HttpStatus.OK, "USER_205", "success.user.role_update");
1-4) BaseException
- 사용자 권한 수정시 성공 응답으로 사용자의 ID도 응답해주기 위해 메시지와 userId를 파라미터로 받는 생성자 함수를 추가.
public BaseException(ErrorCode errorCode, String message) {
super(errorCode.getCode() + ": " + message);
this.errorCode = errorCode;
}
1-5) UserRoleUpdatedReqDTO, UserRoleUpdatedResDTO
- 사용자 권한 수정을 수행하는 요청과 응답 DTO를 관리하는 파일 생성.
1-6) AdminUserController
- id와 role을 파라미터로 받아 service 계층으로 처리 요청 후 가져온 데이터를 성공 메시지와 함께 응답.
@PatchMapping("/{userId}/role")
public ResponseEntity<?> updateUserRole(
@PathVariable Long userId,
@RequestBody UserAdminDTO.RoleUpdateReqDTO roleUpdateDTO) {
UserAdminDTO.RoleUpdateResDTO responseDTO = userService.updateUserRole(userId, roleUpdateDTO);
String message = messageProvider.getMessage(UserSuccessCode.USER_ROLE_UPDATE.getMessage());
return ResponseEntity
.status(UserSuccessCode.USER_ROLE_UPDATE.getHttpStatus())
.body(ApiResponse.success(
UserSuccessCode.USER_ROLE_UPDATE,
message,
responseDTO));
}
1-7) UserService
- controller 계층으로 전달받은 id로 db에서 사용자를 조회하여 User 객체에 정보 담기.
- 사용자 없으면 사용자를 찾을 수 없다는 예외 처리하기.
- 변경될 권한과 수정날짜를 user 객체에 저장하여 repository계층을 통해 db에 해당 id에 저장하기.
- .builder()를 사용하여 id, username, role, updatedAt을 controller에 반환.
public UserAdminDTO.RoleUpdateResDTO updateUserRole(Long userId, UserAdminDTO.RoleUpdateReqDTO roleUpdateDTO) {
// 사용자 정보 확인 + 예외 처리
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(UserErrorCode.USER_NOT_FOUND, "userId: " + userId));
// 권한 변경 및 저장
user.setRole(roleUpdateDTO.getRole());
user.setUpdatedAt(LocalDateTime.now());
userRepository.save(user);
// 응답 반환
return UserAdminDTO.RoleUpdateResDTO.builder()
.id(user.getId())
.username(user.getUsername())
.role(user.getRole())
.updatedAt(user.getUpdatedAt())
.build();
}
2. 사용자 상태 변경 기능 추가
2-1) messages.properties
- 상태 변경 성공시 메시지.
success.user.status_update=상태가 성공적으로 변경되었습니다.
2-2) UserSuccessCode
- 성공 코드 파일에 상태 변경 성공 코드 추가.
USER_STATUS_UPDATE(HttpStatus.OK, "USER_206", "success.user.status_update");
2-3) 상태 변경 관련 요청, 응답 DTO
@Getter
@Builder
public class UserStatusUpdateReqDTO {
private Long id;
private UserStatus status;
}
@Getter
@Setter
@Builder
public class UserStatusUpdateResDTO {
private Long id;
private String username;
private UserStatus status;
private LocalDateTime updatedAt;
}
2-4) AdminUserController
- id와 status을 파라미터로 받아 service 계층으로 처리 요청 후 가져온 데이터를 성공 메시지와 함께 응답.
@PatchMapping("/{userId}/status")
public ResponseEntity<?> updateUserStatus(
@PathVariable Long userId,
@RequestBody UserStatusUpdateReqDTO statusUpdateDTO) {
UserStatusUpdateResDTO responseDTO = userService.updateUserStatus(userId, statusUpdateDTO);
String message = messageProvider.getMessage(UserSuccessCode.USER_STATUS_UPDATE.getMessage());
return ResponseEntity
.status(UserSuccessCode.USER_STATUS_UPDATE.getHttpStatus())
.body(ApiResponse.success(
UserSuccessCode.USER_STATUS_UPDATE,
message,
responseDTO));
}
2-5) UserService
- controller 계층으로 전달받은 id로 db에서 사용자를 조회하여 User 객체에 정보 담기.
- 사용자 없으면 사용자를 찾을 수 없다는 예외 처리하기.
- 상태와 수정날짜를 user 객체에 각각 저장하고 마지막에 repository계층을 통해 .save() 메서드를 사용하여 db에 해당 id에 user 객체 저장하기. (덮어씌우기)
- .builder()를 사용하여 id, username, status, updatedAt을 controller에 반환.
public UserStatusUpdateResDTO updateUserStatus(Long userId, UserStatusUpdateReqDTO statusUpdateDTO) {
// 사용자 정보 확인 + 예외 처리
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(UserErrorCode.USER_NOT_FOUND, "userId: " + userId));
// 상태 변경 및 저장
user.setStatus(statusUpdateDTO.getStatus());
user.setUpdatedAt(LocalDateTime.now());
userRepository.save(user);
// 응답 반환
return UserStatusUpdateResDTO.builder()
.id(user.getId())
.username(user.getUsername())
.status(user.getStatus())
.updatedAt(user.getUpdatedAt())
.build();
}
'개발 기록 > 도서관 관리 시스템' 카테고리의 다른 글
[Library Management System] 25.08.30 (32일) (0) | 2025.08.31 |
---|---|
[Library Management System] 25.08.29 (31일) (0) | 2025.08.29 |
[Library Management System] 25.08.26 (29일) (0) | 2025.08.26 |
[Library Management System] 25.08.25 (28일) (0) | 2025.08.25 |
[Library Management System] 25.08.24 (27일) (0) | 2025.08.24 |