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
- java
- 마이바티스
- CSS
- react
- Spring Boot
- 웹앱
- 코딩
- 구글 oauth
- 스프링부트
- 자바스크립트
- mybatis
- javaspring
- HTML
- Javascript
- 웹
- 처음만나는자바스크립트
- 기초 코딩
- 자바스크립트기초문법
- 자바스크립트기초
- 리액트세팅
- 구글캘린더api
- 리액트프로젝트세팅
- 자바스크립트 기초
- 리액트초기세팅
- 기초코딩
- spring
- js
- 전자정부 서버세팅
- springboot
- 자바
Archives
- Today
- Total
인생 디벨로퍼
이력서 리스트 만들기 (select, ajax 를 이용한 delete) 본문
728x90
https://steponecoding.tistory.com/8
이력서 리스트 만들기 쿼리 / 절대 간단하지 않은 join
개인정보 페이지에서, 이력서 리스트를 만들어주려한다. employee_id 로 resume 조회한다. resume 테이블에서, resume_title, resume_salary 를 선택 -> 컬럼 resume_id 를 이용하여, 각각의 resume_career, resume_graduate,
steponecoding.tistory.com
앞의 글을 읽고와야 이해할수 있다.
일단, 만들어온 쿼리를 이용해, 이력서 리스트를 만들어보자.
Controller
@GetMapping("/employee/detail")
public String detail(Model model) {
Employee principal = (Employee) session.getAttribute("principal");
if (principal == null) {
throw new CustomException("인증이 되지 않았습니다", HttpStatus.UNAUTHORIZED);
}
model.addAttribute("empInfo", employeeRepository.findById(principal.getId()));
List<EmployeeCareer> empCareers = employeeCareerrRepository.findById(principal.getId());
model.addAttribute("empCareer", empCareers);
List<GraduateRespDto> empGraduates = employeeGraduateRepository.findById(principal.getId());
model.addAttribute("empGraduates", empGraduates);
List<LicenseRespDto> empLicense = employeeLicenseRepository.findById(principal.getId());
model.addAttribute("empLicense", empLicense);
List<StackRespDto> empStack = employeeStackRepository.findById(principal.getId());
model.addAttribute("empStack", empStack);
List<ResumeListRespDto> resumes = resumeRepository.findByEmpId(principal.getId());
model.addAttribute("resumes", resumes);
return "employee/detail";
}
Repository
public List<ResumeListRespDto> findByEmpId(int employeeId);
.xml
<select id="findByEmpId" resultType="shop.mtcoding.rodongin.dto.resume.ResumeResp$ResumeListRespDto">
SELECT re.ID, re.EMPLOYEE_ID, re.RESUME_TITLE, re.RESUME_SALARY,
MAX(rc.CAREER_COMPANY) AS CAREER_COMPANY,
MAX((SELECT SCHOOL_NAME FROM SCHOOL_MASTER sm WHERE sm.ID = rg.SCHOOL_ID)) AS SCHOOL_NAME,
MAX((SELECT LICENSE_NAME FROM LICENSE_MASTER lm WHERE lm.ID = rl.LICENSE_ID)) AS LICENSE_NAME, MAX(rl.LICENSE_ISSUER),
MAX((SELECT STACK_NAME FROM STACK_MASTER stm WHERE stm.ID = rst.STACK_ID)) AS STACK_NAME,
MAX(rst.STACK_ACQUISITION)
FROM RESUME re
LEFT OUTER JOIN RESUME_CAREER rc ON re.ID = rc.RESUME_ID
LEFT OUTER JOIN RESUME_GRADUATE rg ON re.ID = rg.RESUME_ID
LEFT OUTER JOIN RESUME_LICENSE rl ON re.ID = rl.RESUME_ID
LEFT OUTER JOIN RESUME_STACK rst ON re.ID = rst.RESUME_ID
WHERE re.employee_id = #{emplopyeeId}
GROUP BY re.ID, re.EMPLOYEE_ID, re.RESUME_TITLE
</select>
AJAX 를 이용한 delete
만들어준 이력서 리스트에, 삭제 버튼을 추가.
onClick 를 사용해, 삭제 버튼을 클릭시 메소드가 실행되게 한다.
<script>
function deleteByResumeId(resumeId) {
$.ajax({
type: "delete",
url: "/resume/" + resumeId,
dataType: "json",
})
done((res) => { // 20X일 때
alert(res.msg);
$("resume-${resume.id}").remove();
})
.fail((err) => { // 40X, 50X일 때
alert(err.responseJSON.msg);
})
}
</script>
.remove() 를 사용해, 해당 요소를 html 문서에서 삭제.
이때 매개변수는 resume id 로 한다
이제 컨트롤러 단에서 delete 를 수행하면 된다.
Controller
@DeleteMapping("/resume/{id}")
public @ResponseBody ResponseEntity<?> delete(@PathVariable("id") int id) {
Employee principal = (Employee) session.getAttribute("principal");
if (principal == null) {
throw new CustomApiException("인증이 되지 않았습니다", HttpStatus.UNAUTHORIZED);
}
resumeService.delete(id, principal.getId());
return new ResponseEntity<>(new ResponseDto<>(1, "이력서 삭제 성공", null), HttpStatus.OK);
}
Service
@Transactional
public void delete(int resumeId, Integer principalId) {
Resume ResumePS = resumeRepository.findById(resumeId);
if (ResumePS == null) {
throw new CustomApiException("이력서가 존재하지 않습니다");
}
if (ResumePS.getEmployeeId() != principalId) {
throw new CustomApiException("이력서를 삭제할 권한이 없습니다", HttpStatus.FORBIDDEN);
}
try {
resumeRepository.deleteById(resumeId);
} catch (Exception e) {
throw new CustomApiException("이력서 삭제 실패", HttpStatus.INTERNAL_SERVER_ERROR);
}
}
Repository
public int deleteById(int id);
.xml
<delete id="deleteById">
DELETE FROM resume WHERE id = #{id}
</delete>
매개변수를 resume_id 로 하여, 비동기 삭제 완료.
728x90
'Project > Mini Project - Rodonin (구인구직)' 카테고리의 다른 글
@RequestBody 에 관하여... (0) | 2023.03.10 |
---|---|
이력서 상세보기 / 네버엔딩 select (0) | 2023.03.08 |
이력서 리스트 만들기 쿼리 / 절대 간단하지 않은 join (0) | 2023.03.07 |
개인정보 뿌리기 (select, inner join) / 가장 간단한 inner join (0) | 2023.03.06 |
개인정보 detail 필수값 뿌리기 (select) (0) | 2023.03.06 |