ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 패스트캠퍼스 챌린지 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 메서드를 통해 성공적으로 수정한 모습이다. 

     

    PUT 메서드로 수정 Request를 전송하여 수정이 완료된 모습이다.

     

     

     

    본 포스팅은 패스트 캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
    https://bit.ly/3FVdhDa

     

    수강료 100% 환급 챌린지 | 패스트캠퍼스

    딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

    fastcampus.co.kr

    '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

    댓글

Designed by Tistory.