오늘은 상세보기와 수정과 삭제기능을 구현할 것이다.
먼저 일정의 자세한 정보를 보여주는 GET방식의 API이다.
@GetMapping("/{id}")
public String updateGetCalanderbyId(@PathVariable Long id, Model model) {
Calander calander = findById(id);
model.addAttribute("id", calander.getId());
model.addAttribute("title", calander.getTitle());
model.addAttribute("content", calander.getContent());
model.addAttribute("name", calander.getName());
model.addAttribute("date", calander.getDate());
model.addAttribute("password", calander.getPassword());
return "detail";
}
public Calander findById(Long id) {
String sql = "SELECT * FROM calander WHERE id = ?";
return jdbcTemplate.query(sql, resultSet -> {
if (resultSet.next()){
Calander calander = new Calander();
calander.setId(resultSet.getLong("id"));
calander.setTitle(resultSet.getString("title"));
calander.setContent(resultSet.getString("content"));
calander.setName(resultSet.getString("name"));
calander.setDate(resultSet.getDate("date"));
calander.setPassword(resultSet.getString("password"));
return calander;
} else {
return null;
}
}, id);
}
다음은 수정화면을 보여주는 GET방식의 API를 만들었다. 코드는 비슷하지만 update.html을 리턴하는 점이 다르다.
저기서 내용을 수정하고 올바른 비밀번호를 입력하고 버튼을 누르면 일정을 수정하는 PUT방식의 API가 호출된다.
@PutMapping("/update/{id}")
@ResponseBody
public Long updateCalander(@PathVariable Long id, @RequestBody CalanderRequestDTO requestDTO) {
Calander calander = findById(id);
if(calander.getPassword().equals(requestDTO.getPassword())) { //비밀번호가 일치하고 데이터를 성공적으로 불러오면
if(calander != null) { // sql문이 실행되면서 수정이 완료된다.
String sql = "UPDATE calander SET title = ?, content = ?, name = ?, date = ? where id = ?";
jdbcTemplate.update(sql, requestDTO.getTitle(), requestDTO.getContent(), requestDTO.getName(), requestDTO.getDate(), id);
return id;
} else {
throw new IllegalArgumentException("존재하지 않는 일정입니다.");
}
} else {
throw new IllegalArgumentException("비밀번호가 일치하지 않습니다.");
}
}
PUT api는 정수형 url파라메터와 json타입의 request parameter를 보내고 수정된 일정의 id값을 리턴받는다.
마지막으로 기존의 일정을 삭제하는 DELETE api이다.
@DeleteMapping("/delete/{id}")
public String deleteCalander(@PathVariable Long id, @RequestParam String password) {
Calander calander = findById(id);
if(calander.getPassword().equals(password)) { // put메소드와는 달리 비밀번호만 있으면 되기에 정수, 문자열 타입 두 개의 request파라메터만 받는다.
if(calander != null) {
String sql = "DELETE FROM calander WHERE id = ?";
jdbcTemplate.update(sql, id);
return "redirect:/index.html";
} else {
throw new IllegalArgumentException("존재하지 않는 일정입니다.");
}
} else {
throw new IllegalArgumentException("비밀번호가 일치하지 않습니다.");
}
}
두 종류의 파라메터를 받고 메인 페이지를 리턴한다.
'내일배움캠프' 카테고리의 다른 글
Spring 입문주차 2주차 (0) | 2024.05.21 |
---|---|
Spring 입문주차 1주차 (0) | 2024.05.17 |
Spring 일정관리 앱 프로젝트 1일차 (0) | 2024.05.14 |
정수 내림차순으로 배치하기 (0) | 2024.05.13 |
캠프 성적관리 프로그램 5~7일차(KPT 회고록) (0) | 2024.05.10 |