개발자 정보 수정하기
- Controller에 editDeveloper 함수 생성
@PutMapping("/developers/{memberId}")
public DeveloperDetailDto editDeveloper(@PathVariable String memberId, @Valid @RequestBody EditDeveloper.Request request){
log.info("GET /developers HTTP/1.1");
return dMakerService.editDeveloper(memberId, request);
}
- 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)
- DMakerService에 editDeveloper 함수 생성
@Transactional
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);
}
- 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);
}
}
- 테스트
- 먼저 Hey의 memberId를 가진 개발자의 정보 조회
- PutMapping을 사용해 Hey라는 memberId를 가진 개발자의 정보 수정
-> 성공적으로 정보 수정 완료