인생 디벨로퍼

이력서 수정 (update) 본문

Project/Mini Project - Rodonin (구인구직)

이력서 수정 (update)

뫄뫙뫄 2023. 3. 12. 19:50
728x90

Controller

@GetMapping("resume/{id}/update")
    public String updateForm(@PathVariable int id, Model model, ResumeListRespDto resumeListRespDto) {
        Employee principal = (Employee) session.getAttribute("principal");

        if (principal == null) {
            throw new CustomException("인증이 되지 않았습니다", HttpStatus.UNAUTHORIZED);
        }

        // 개인정보
        model.addAttribute("empInfo",
                employeeRepository.findById(principal.getId()));
        // 마스터 테이블
        List<SchoolMaster> schools = schoolMasterRepository.findAll();
        List<LicenseMaster> licenses = licenseMasterRepository.findAll();
        List<StackMaster> stacks = stackMasterRepository.findAll();
        model.addAttribute("empInfo", employeeRepository.findById(principal.getId()));
        model.addAttribute("schools", schools);
        model.addAttribute("licenses", licenses);
        model.addAttribute("stacks", stacks);
        // 이력서
        Resume resume = resumeRepository.findById(id);
        model.addAttribute("resume", resume);

        List<ResumeCareer> resumeCareers = resumeCareerRepository.findByResumeId(id);
        model.addAttribute("resumeCareers", resumeCareers);

        List<ResumeGraduateRespDto> resumeGraduates = resumeGraduateRepository.findByResumeId(id);
        model.addAttribute("resumeGraduates", resumeGraduates);

        List<ResumeLicenseRespDto> resumeLicense = resumeLicenseRepository.findByResumeId(id);
        model.addAttribute("resumeLicense", resumeLicense);

        List<ResumeStackRespDto> resumeStack = resumeStackRepository.findByResumeId(id);
        model.addAttribute("resumeStack", resumeStack);

        return "resume/update";
    }

resume save 와 마찬가지로, 세션 먼저 체크 후, 필요 정보들을 모델에 담아준다.

\

기존 정보 수정 폼이라, 기존 이력서 id 로 정보를 들고와 모델에 담아 줘야한다.

   @PutMapping("resume/{id}/update")
    public @ResponseBody ResponseEntity<?> update(@PathVariable int id, @RequestBody ResumeUpdateDto resumeUpdateDto) {

        Employee principal = (Employee) session.getAttribute("principal");
        if (principal == null) {
            throw new CustomApiException("인증이 되지 않았습니다", HttpStatus.UNAUTHORIZED);
        }

        resumeService.이력서수정(id, resumeUpdateDto);

        return new ResponseEntity<>(new ResponseDto<>(1, "이력서 수정 완료!", null), HttpStatus.OK);
    }

 


Service

public void 이력서수정(int id, ResumeUpdateDto resumeUpdateDto) {

        Employee principal = (Employee) session.getAttribute("principal");
        if (principal == null) {
            throw new CustomApiException("인증이 되지 않았습니다", HttpStatus.UNAUTHORIZED);
        }

        Resume resume = resumeRepository.findById(id);
        if (resume == null) {
            throw new CustomApiException("없는 이력서를 수정할 수 없습니다");
        }
        if (resume.getEmployeeId() != principal.getId()) {
            throw new CustomApiException("이력서를 수정할 권한이 없습니다", HttpStatus.FORBIDDEN);
        }

        try {

            resumeRepository.updateById(id, resumeUpdateDto);
            resumeGraduateRepository.updateByResumeId(id, resumeUpdateDto.getSchoolId(),
                    resumeUpdateDto.getSchoolGraduate());

            resumeCareerRepository.updateByResumeId(id,
                    resumeUpdateDto.getCareerCompany(),
                    resumeUpdateDto.getCareerStart(),
                    resumeUpdateDto.getCareerEnd());
            resumeLicenseRepository.updateByResumeId(id, resumeUpdateDto.getLicenseId(),
                    resumeUpdateDto.getLicenseIssuer());

            resumeStackRepository.updateByResumeId(id, resumeUpdateDto.getStackId(),
                    resumeUpdateDto.getStackAcquisition());

        } catch (Exception e) {
            throw new CustomApiException("이력서 수정 실패", HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

 

https://steponecoding.tistory.com/11

에서 언급한것과 동일하게, 한꺼번에 dto로 받아온 다음, 서비스 단에서 나눠 insert 했다.

 

@RequestBody 에 관하여...

@RequestBody Spring 프레임워크에서 제공하는 어노테이션. HTTP 요청 body 에 포함된 데이터를 자바 객체로 변환하는 역활을 함. 더보기 HTTP (GET / POST 요청) GET 요청 - URL 뒤에 파라미터를 붙여 데이터를

steponecoding.tistory.com


Repository

 public int updateById(@Param("id") int id, @Param("resumeUpdateDto") ResumeUpdateDto resumeUpdateDto);

.xml

 

기존 정보를 모델에 담아주기 위한 select 쿼리.

마스터 테이블이 없는 경우와, 있는경우 쿼리를 다르게 짜야한다.

 

개별로 만들어준 테이블들은, resumeId 로 where 절을 걸어준다.


 <script>
            function updateById(id) {
                let data = {
                    "resumeTitle": $("#resumeTitle").val(),
                    "resumeSalary": $("#resumeSalary").val(),
                    "cv": $("#CV").val(),
                    "schoolId": $("#schoolId").val(),
                    "schoolGraduate": $("#schoolGraduate").val(),
                    "careerCompany": $("#careerCompany").val(),
                    "careerStart": $("#careerStart").val(),
                    "careerEnd": $("#careerEnd").val(),
                    "licenseId": $("#licenseId").val(),
                    "licenseIssuer": $("#licenseIssuer").val(),
                    "stackId": $("#stackId").val(),
                    "stackAcquisition": $("#stackAcquisition").val()
                };

               $.ajax({
                    type: "put",
                    url: "/resume/"+id+"/update",
                    data: JSON.stringify(data),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json" // default : 응답의 mime 타입으로 유추함
                }).done((res) => { // 20X 일때
                    alert(res.msg);
                    location.href = "/resume/"+id+"/detail";
                }).fail((err) => { // 40X, 50X 일때
                    alert(err.responseJSON.msg);
                });
            }
        </script>
        <script>
            $('.summernote').summernote({
                tabsize: 2,
                height: 400
            });
        </script>

ajax 를 이용한 put 요청.

전체 폼은 save 폼과 같다.

https://steponecoding.tistory.com/12

728x90