Spring Projcect/날씨 일기 프로젝트

Chapter 05. 날씨 데이터 CRUD

계란💕 2022. 8. 31. 16:49

5.1 날씨 조회 API 작성

 

  Ex) 조회 - Read

  • repository에 함수 만들기
List<Diary> findAllByDate(LocalDate date);

 

  • service
<hide/>
public List<Diary> readDiary(LocalDate date) {
    return  diaryRepository.findAllByDate(date);
}

 

  • Controller - GetMapping
<hide/>
@GetMapping("/read/diary")
List<Diary> readDiary(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date){
    return diaryService.readDiary(date);
}

 

  Note) 실행 결과 - GET send

 

 

 

  Ex) 날짜 범위를 정해서 여러 개의 일기를 가져오기 - Read

  • Ctrl - readDiaries()
<hide/>
@GetMapping("/read/diaries")
List<Diary> readDiaries(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate startDate,
                        @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate endDate ){
    return diaryService.readDiaries(startDate, endDate);
}

 

  • Service
    • readDiaries()
<hide/>
public List<Diary> readDiaries(LocalDate startDate, LocalDate endDate) {
    return  diaryRepository.findAllByDateBetween(startDate, endDate);
}
  • send: http://localhost:8080/read/diaries?startDate=2022-08-01&endDate=2022-08-31

 

  Note) 실행 결과

    -정해진 기간 안에 쓴 일기 목록이 나온다.

 

 

 

5.2 날씨 일기 작성 및 수정하기

 

  Ex) Update - 수정하기

  • Ctrl - updateDiary()
    • 수정하는 날짜의 일기 중 가장 첫 번째를 수정한다고 가정
<hide/>
@PutMapping("/update/diary")
void updateDiary(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date, @RequestBody String text){
    diaryService.updateDiary(date, text);

 

  • Service - updateDiary()
<hide/>
public void updateDiary(LocalDate date, String text) {
    Diary nowDiary = diaryRepository.getFirstByDate(date);
    nowDiary.setText(text);
    diaryRepository.save(nowDiary);
}

 

  • getFirstByDate()
Diary getFirstByDate(LocalDate date);

 

  Note) 실행 결과

 

    - 위 창에서 send를 누르고 나서 get으로 조회하면 가장 첫 일기가 위 내용대로 수정된 걸 확인 가능

 

 

 

5.3 날씨 일기 삭제  API 작성하기

 

  Ex) 삭제 - Delete

  • Ctrl - delete()
<hide/>
@DeleteMapping("/delete/diary")
void deleteDiary(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date){
    diaryService.deleteDiary(date);
}

 

  • Service - deleteDiary()
<hide/>
public void deleteDiary(LocalDate date) {
    diaryRepository.deleteAllByDate(date);
}

 

  • Repo
    • @Transactional을 추가한다. 어노테이션을 붙이지 않으면 모든 diary가 아니라 하나의 다이어리만 삭제된다.
      • 추가 기능: 테스트 과정에서 데이터베이스의 상태가 변경되지 않기를 바라는 경우에 붙인다.
<hide/>
@Transactional
void deleteAllByDate(LocalDate date);
<hide/>
http://localhost:8080/delete/diary?date=2022-08-01

 

  Note) 실행 결과 - 2022-08-01의 모든 다이어리가 정상으로 삭제된다.

 

 

출처 - 제로베이스 백엔드 스쿨 (김조현 강사님)

https://zero-base.co.kr/

 

제로베이스 - 누구나 취업하는 가장 합리적인 취업 스쿨

코딩 부트 캠프 개발자, 데이터 사이언티스트, 마케터, PM, 디자이너 등 제대로 공부하고 확실하게 취업하세요. 당신의 삶의 전환점이 될 제로베이스 스쿨입니다.

zero-base.co.kr