사용자가 작성한 일기를 삭제하는 기능이다.
사용자의 고유번호와 일기 작성 날짜를 확인하여,
DB에서 삭제하는 로직을 설계했다.
/**
* 일기 삭제 API
* @param request 사용자 요청
* @param date 일기 작성 날짜
* @return 일기 삭제 성공 메시지
*/
@Operation(summary = " 일기 삭제 ", description = " ")
@DeleteMapping("/diary")
public ResponseEntity<String> deleteDiary(HttpServletRequest request,
@RequestParam(name = "date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
LocalDate date){
/* 일기 삭제 */
dewService.deleteDiary(request,date);
return ResponseEntity.ok("일기 삭제 성공!");
}
나는 항상 컨트롤러에는 별거를 안 넣으려고 한다.
내게 컨트롤러는 그저 시작점이자 가장 간단한 로직만 존재하는 곳으로 인식되기 때문이다.
중요한 수학적 논리는 서비스단이나 Repository 혹은 Mapper 부분에 설계한다.
/**
* 일기 삭제 메서드
* @param request 사용자 요청
* @param date 일기 작성 날짜
*/
void deleteDiary(HttpServletRequest request, LocalDate date);
/**
* 일기 삭제 메서드
* @param request 사용자 요청
* @param date 일기 작성 날짜
*/
@Override
public void deleteDiary(HttpServletRequest request, LocalDate date) {
/* 사용자 고유번호 조회 */
Long userNumber = jwtService.extractUserNumberFromRequest(request);
/* 다이어리 삭제 */
dewMapper.deleteDiary(userNumber,date);
}
단순 삭제 API이다 보니 서비스 단에도 크게 복잡한 논리구조는 없다.
그저 고유번호만 조회하고, 다이어리 삭제를 위해 userNumber와 date를 Mapper 인터페이스에 넘기는 것이 전부이다.
다이어리 삭제는 Mapper 인터페이스에서 담당한다.
mapper코드
/**
* 일기 삭제 메서드
* @param userNumber 사용자 고유 번호
* @param date 일기 작성 날짜
*/
void deleteDiary(@Param("userNumber")Long userNumber, @Param("date") LocalDate date);
사용자의 고유 번호와 일기 작성 날짜를 받아서 xml의 sql문으로 넘긴다.
xml코드
<!-- 일기 삭제 -->
<delete id="deleteDiary">
DELETE FROM diary
WHERE userNumber = #{userNumber} AND date = #{date}
</delete>
usernuber 와 date를 받아서 diary테이블에서 DELETE 메서드를 수행하는 SQL 문이다.
삭제 성공 메시지 반환 성공.
