-
패스트캠퍼스 챌린지 11일차JAVA/Spring 2021. 11. 11. 11:13
1. Developer Put(수정) 기능 개발
프로토콜은 약속과도 같은 것이다. 안 지켜도 입력된 동작이 수행될 때 문제가 발생하지는 않지만 프로토콜에 맞춰서 코드를 짜주어야 소통 + 협업 시에 훨씬 편리하게 업무를 진행할 수 있다.
데이터 수정 시에는 Put 메서드를 통해 요청을 전송한다. 먼저 DMakerController에 @PutMapping 어노테이션을 붙인 메서드를 하나 만들어준다.
dmaker.controller.DMakerController
@PutMapping("/developer/{memberId}") public DeveloperDetailDto editDeveloper ( @PathVariable String memberId, // 수정 요청 시 수정될 값을 받아야하기 때문에 넣어줌 @Valid @RequestBody EditDeveloper.Request request ){ log.info("PUT /create-developer HTTP/1.1"); return dMakerService.editDeveloper(memberId, request); }
다음으로 editDeveloper를 위한 Dto를 만들어준다.
dmaker.dto.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; } }
다음으로는 DMakerService에 실질적으로 데이터를 수정할 로직이 담긴 editDeveloper 메서드를 만들어준다.
dmaker.service.DMakerService
@Transactional public DeveloperDetailDto editDeveloper(String memberId, EditDeveloper.Request request) { validateDeveloperLevel(request.getDeveloperLevel(), request.getExperienceYears()); // developerRepository로부터 memberId를 통해 developer entity를 받아온다. Developer developer = developerRepository.findByMemberId(memberId).orElseThrow( () -> new DMakerException(NO_DEVELOPER) ); // 받아온 entity에 있는 값들을 request로부터 들어온 값들로 교체해준다. developer.setDeveloperLevel(request.getDeveloperLevel()); developer.setDeveloperSkillType(request.getDeveloperSkillType()); developer.setExperienceYears(request.getExperienceYears()); // developer entity에 값을 담아주는 걸로 끝나면 // entity에 있는 값만 수정이 되고 DB에는 반영이 되지 않는다. // Transactional 키워드를 통해서 entity에 있는 값들을 담아준 다음에 // 데이터 체크를 하고 그 다음에 DB에 커밋을 한다. return DeveloperDetailDto.fromEntity(developer); } // createDeveloper 시에도 비슷한 validation을 진행하기 때문에 중복된 부분을 // 새로운 메서드로 정의해주었다. private void validateDeveloperLevel(DeveloperLevel developerLevel, Integer experienceYears) { if (developerLevel == DeveloperLevel.SENIOR && experienceYears < 10) { //throw new RuntimeException("SENIOR level needs 10 years of experience!"); throw new DMakerException(LEVEL_EXPERIEND_YEARS_NOT_MATCHED); } if(developerLevel == DeveloperLevel.JUNGNIOR && ( experienceYears < 4 || experienceYears > 10 )) { throw new DMakerException(LEVEL_EXPERIEND_YEARS_NOT_MATCHED); } if (developerLevel == DeveloperLevel.JUNIOR && experienceYears > 4) { throw new DMakerException(LEVEL_EXPERIEND_YEARS_NOT_MATCHED); } }
Developer 수정 기능이 완료되었으니 테스트를 진행한다.
아래는 POST를 통해 만들어진 'Soul' ID를 가진 개발자의 DeveloperLevel과 DeveloperSkillType 그리고 ExperienceYears를 PUT 메서드를 통해 성공적으로 수정한 모습이다.
본 포스팅은 패스트 캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
https://bit.ly/3FVdhDa'JAVA > Spring' 카테고리의 다른 글
패스트캠퍼스 챌린지 13일차 (0) 2021.11.13 패스트캠퍼스 챌린지 12일차 (0) 2021.11.12 패스트캠퍼스 챌린지 10일차 (0) 2021.11.10 패스트캠퍼스 챌린지 9일차 (0) 2021.11.09 패스트캠퍼스 챌린지 8일차 (0) 2021.11.08