Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 자바스크립트기초
- springboot
- 리액트세팅
- mybatis
- 전자정부 서버세팅
- 리액트초기세팅
- 웹
- Spring Boot
- js
- 자바스크립트
- 구글 oauth
- 기초코딩
- 자바
- spring
- 자바스크립트기초문법
- 자바스크립트 기초
- java
- 리액트프로젝트세팅
- CSS
- 기초 코딩
- 구글캘린더api
- 코딩
- 웹앱
- 스프링부트
- 처음만나는자바스크립트
- javaspring
- react
- HTML
- 마이바티스
- Javascript
Archives
- Today
- Total
인생 디벨로퍼
이력서 수정 (update) 본문
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 폼과 같다.
728x90
'Project > Mini Project - Rodonin (구인구직)' 카테고리의 다른 글
json 응답 처리 (RESTful API) (0) | 2023.03.21 |
---|---|
썸네일 등록하기 (1) | 2023.03.12 |
이력서 등록 (ajax 를 사용한 insert) (0) | 2023.03.12 |
@RequestBody 에 관하여... (0) | 2023.03.10 |
이력서 상세보기 / 네버엔딩 select (0) | 2023.03.08 |