RoleType을 Enum으로 그대로 가지고 오기

기존 방법

기존에는, 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);
    }
};

댓글

개발자  김철준

백엔드 개발자 김철준의 블로그입니다.

주요 프로젝트