개발자 정보 수정

김태은·2022년 4월 30일
0

개발자 정보 수정하기

  1. Controller에 editDeveloper 함수 생성
@PutMapping("/developers/{memberId}")
    public DeveloperDetailDto editDeveloper(@PathVariable String memberId, @Valid @RequestBody EditDeveloper.Request request){
        // GET /developers HTTP/1.1
        log.info("GET /developers HTTP/1.1");

        return dMakerService.editDeveloper(memberId, request);
    }
  1. EditDeveloper 클래스 생성

public class EditDeveloper {

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    @ToString
    public static class Request{
        @NotNull
        private DeveloperLevel developerLevel;
        @NotNull
        private DeveloperSkillType developerSkillType;
        @NotNull
        @Min(0)
        @Max(20)
        private Integer experienceYears;

    }


}
  • 수정할 값 Request 변수에 추가
    -> 개발자레벨, 스킬타입, 연차를 수정 가능하도록 함
  • 데이터 validation 적용(NotNull, Min, Max)
  1. DMakerService에 editDeveloper 함수 생성
 @Transactional // 변경되는 사항들을 commit이 되도록 하기 위해 필요
    public DeveloperDetailDto editDeveloper(String memberId, EditDeveloper.Request request) {
        validateEditDeveloperRequest(request, memberId);

        Developer developer =  developerRepository.findByMemberId(memberId)
                .orElseThrow(()->new DMakerException(NO_DEVELOPER));

        developer.setDeveloperLevel(request.getDeveloperLevel());
        developer.setDeveloperSkillType(request.getDeveloperSkillType());
        developer.setExperienceYears(request.getExperienceYears());

        return DeveloperDetailDto.fromEntity(developer);

    }
    
  1. business validation 적용

  • validateCreateDeveloperRequest와 동일한 부분은 따로 메서드를 만들어줌
  • 중복되는 코드 선택 -> Refactor -> Extract Method 선택
  • validateDeveloperLevel 메소드를 따로 만들어줌
 private void validateEditDeveloperRequest(EditDeveloper.Request request, String memberId) {
        validateDeveloperLevel(
                request.getDeveloperLevel(),
                request.getExperienceYears()
        );


    }
    
 private void validateDeveloperLevel(DeveloperLevel developerLevel, Integer experienceYears) {
        if(developerLevel == DeveloperLevel.SENIOR && experienceYears < 10){
            throw new DMakerException(LEVEL_EXPERIENCE_YEAR_NOT_MATCHED);
        }

        if(developerLevel == DeveloperLevel.JUNIOR && experienceYears > 4  ){
            throw new DMakerException(LEVEL_EXPERIENCE_YEAR_NOT_MATCHED);
        }
    }
  1. 테스트

  • 먼저 Hey의 memberId를 가진 개발자의 정보 조회

  • PutMapping을 사용해 Hey라는 memberId를 가진 개발자의 정보 수정
    -> 성공적으로 정보 수정 완료

0개의 댓글