본문 바로가기

내일배움캠프

Spring 일정관리 앱 프로젝트 2일차

오늘은 상세보기와 수정과 삭제기능을 구현할 것이다.

 

먼저 일정의 자세한 정보를 보여주는 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);
    }

일정의 id값을 URL에 담아 정수형 매게변수로 보내고 calander객체의 모든 필드를 model객체에 담아 detail.html을 리턴하는 api이다.
테스트용 페이지코드는 생략한다.

다음은 수정화면을 보여주는 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("비밀번호가 일치하지 않습니다.");
        }
    }

API테스트 할 때는 추가적인 공정을 거쳐야 하는지 에러가 나온다.
수정은 잘 작동한다.

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("비밀번호가 일치하지 않습니다.");
        }
    }

두 종류의 파라메터를 받고 메인 페이지를 리턴한다.