<aside> <img src="https://raw.githubusercontent.com/eirikmadland/notion-icons/master/v5/icon3/ul-github.svg" alt="https://raw.githubusercontent.com/eirikmadland/notion-icons/master/v5/icon3/ul-github.svg" width="40px" /> ์ฐธ์กฐ Github Code

</aside>

DMakerController ์˜ editDeveloper ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

@PutMapping("/developer/{memberId}")
public DeveloperDetailDto editDeveloper(
        @PathVariable String memberId,
        @Valid @RequestBody EditDeveloper.Request request
) {
    log.info("GET /getAllDeveloperDetail HTTP/1.1 ");

    return dmakerService.editDeveloper(memberId, request);
}

EditDeveloper ๊ตฌํ˜„

public class EditDeveloper {

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    @ToString
    public static class Request{
        @NotNull    // ๋นˆ๊ฐ’ ํ—ˆ์šฉ X
        private DeveloperLevel developerLevel;

        @NotNull
        private DeveloperSkillType developerSkillType;

        @NotNull
        @Min(0)     // ์ตœ์†Œ 0
        @Max(20)    // ์ตœ๋Œ€ 20
        private Integer experienceYears;
    }
}

DMakerService ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ CHECK(Update) ๊ตฌํ˜„

// ํŒŒ๋ผ๋ฏธํ„ฐ CHECK(Update)
private void validateEditDeveloperRequest(String memberId, EditDeveloper.Request request) {
    // Business Validation
    DeveloperLevel developerLevel = request.getDeveloperLevel();
    Integer experienceYears = request.getExperienceYears();
    validateDeveloperLevel(developerLevel, experienceYears);
}

private void validateDeveloperLevel(DeveloperLevel developerLevel, Integer experienceYears) {
    if (developerLevel == DeveloperLevel.SENIOR
            && experienceYears < 10) {
        throw new DMakerException(LEVEL_EXPERIENCE_YEARS_NOT_MATCHED);
    } else if (developerLevel == DeveloperLevel.JUNGNIOR
            && (experienceYears < 4 || experienceYears > 10)) {
        throw new DMakerException(LEVEL_EXPERIENCE_YEARS_NOT_MATCHED);
    } else if (developerLevel == DeveloperLevel.JUNIOR
            && experienceYears > 4) {
        throw new DMakerException(LEVEL_EXPERIENCE_YEARS_NOT_MATCHED);
    }
}

DMakerService ์˜ editDeveloper ๊ตฌํ˜„

@Transactional
public DeveloperDetailDto editDeveloper(String memberId, EditDeveloper.Request request) {
    validateEditDeveloperRequest(memberId, request);

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

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

    return DeveloperDetailDto.fromEntity(developer);
}

dev.update.http ๊ตฌํ˜„

PUT <http://localhost:8080/developer/Mini>
Content-Type: application/json;charset=utf-8

{
  "developerLevel":"JUNGNIOR",
  "developerSkillType":"FRONT_END",
  "experienceYears":5
}
### EditDevelopers TEST

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-03-19 แ„‹แ…ฉแ„’แ…ฎ 4.28.14.png

<aside> ๐Ÿ’ก ์ž์„ธํ•œ ์†Œ์Šค์ฝ”๋“œ๋Š” ํ•ด๋‹น COMMIT์„ ํด๋ฆญํ•˜์—ฌ ์ฐธ์กฐ

</aside>