기존 방법
기존에는, RoleType을 받아오기 위해서, json으로 감싸기 위해 별도의 Dto를 만들어서 가져오고 있었다.
public class RoleNameDto {
private String roleName;
}
@PatchMapping("/{id}/role")
public ResponseEntity setRole(HttpSession session, @PathVariable("id") Long id, @RequestBody RoleNameDto roleNameDto) {
if (isDefault(session)) {
return new ResponseEntity<>("권한이 없습니다.", HttpStatus.FORBIDDEN);
}
log.debug("변경하는 roleName={}", roleNameDto);
if (roleNameDto.getRoleName().equals("default")) {
if (!adminService.setUserAsDefault(id)) {
return new ResponseEntity<>("권한 변경에 실패했습니다.", HttpStatus.BAD_REQUEST);
}
} else {
if (!adminService.setUserAsAdmin(id)) {
return new ResponseEntity<>("권한 변경에 실패했습니다.", HttpStatus.BAD_REQUEST);
}
}
return new ResponseEntity<>("정상 권한 변경 완료.", HttpStatus.OK);
}
export const setRole = async btn => {
const id = btn.value;
// id가 roleType + id인 select의 선택값을 가지고 온다.
const roleName = document.getElementById("roleType" + id).value;
if (roleName == null) {
return;
}
try {
const data = await fetchTextRequest(`/users/${id}/role`, "PATCH", { roleName });
alert("결과 : " + data);
location.reload();
} catch (error) {
handleError(error);
}
};
개선
굳이 Dto를 받아서 해야 할까 고민하다가, 그냥 Enum의 name 값을 넘기고 받으면 된다는 것을 알게 되어서 개선했다.
@PatchMapping("/{id}/role")
public ResponseEntity setRole(HttpSession session, @PathVariable("id") Long id, @RequestBody RoleType roleType) {
if (isDefault(session)) {
return new ResponseEntity<>("권한이 없습니다.", HttpStatus.FORBIDDEN);
}
log.debug("roleType={}", roleType);
if (roleType == RoleType.DEFAULT) {
if (!adminService.setUserAsDefault(id)) {
return new ResponseEntity<>("권한 변경에 실패했습니다.", HttpStatus.BAD_REQUEST);
}
} else {
if (!adminService.setUserAsAdmin(id)) {
return new ResponseEntity<>("권한 변경에 실패했습니다.", HttpStatus.BAD_REQUEST);
}
}
return new ResponseEntity<>("정상 권한 변경 완료.", HttpStatus.OK);
}
export const setRole = async btn => {
const id = btn.value;
// id가 roleType + id인 select의 선택값을 가지고 온다.
const roleType = document.getElementById("roleType" + id).value;
if (roleType == null) {
return;
}
try {
const data = await fetchTextRequest(`/users/${id}/role`, "PATCH", roleType);
alert("결과 : " + data);
location.reload();
} catch (error) {
handleError(error);
}
};