"마이페이지 > 일기 리스트 조회"에서 특정 일기 썸네일을 누르면,
해당 일기를 조회 할 수 있다.
일기의 내용은,
작성된 날짜, 일기 제목, 일기 본문, 분석된 사용자의 감정, 힐링 메시지, 힐링 뮤직이다.
클라이언트 측에는 일기장 디자인으로 표현될 예정이다.
이제 슬슬 Mybatis를 이용한 백엔드 구현에 있어서 짬이 좀 찼나보다.
아무런 트러블 없이 구현이 성공되었다.
/**
* 선택한 날짜의 일기 조회 API
* @param request 사용자 요청
* @return 일기장 (날짜,제목,본문,감정,힐링 메시지,힐링 뮤직)
*/
@Operation(summary = " 선택한 날짜의 일기 조회 API ", description = " ")
@PostMapping("/diary/show")
public ResponseEntity<DiaryResponse> showDiary(HttpServletRequest request,
@RequestParam(name = "date")
@DateTimeFormat(pattern = "yyyy-MM-dd")
LocalDate date){
/* 선택한 날짜의 일기 데이터 반환 */
DiaryResponse diaryResponse = dewService.getDiary(request,date);
return ResponseEntity.ok(diaryResponse);
}
컨트롤러 단에서는 사용자 요청과 날짜를 받아서 바로 서비스 단으로 넘긴다.
/**
* 선택한 날짜의 일기 조회 메서드
* @param request 사용자 요청
* @param date 선택한 날짜
* @return 일기장 (날짜,제목,본문,감정,힐링 메시지,힐링 뮤직)
*/
DiaryResponse getDiary(HttpServletRequest request,LocalDate date);
기획자의 요구사항이 언제 바뀔지 모르니
서비스 단은 언제나 인터페이스를 먼저 설계하고,
세부적인 논리는 구현체에 구현한다.
/**
* 선택한 날짜의 일기 조회 메서드
* @param request 사용자 요청
* @param date 선택한 날짜
* @return 일기장 (날짜,제목,본문,감정,힐링 메시지,힐링 뮤직)
*/
@Override
public DiaryResponse getDiary(HttpServletRequest request,LocalDate date) {
/* 사용자 고유번호 조회 */
Long userNumber = jwtService.extractUserNumberFromRequest(request);
/* 해당 날짜의 일기장 반환 */
DiaryResponse diaryResponse = dewMapper.getDiary(userNumber,date);
return diaryResponse;
}
사용자의 요청으로 부터 사용자의 고유 번호를 추출한다.
사용자 고유번호와 날짜를 Mapper의 getDiary 메서드에 전송하여
DB에 관한 연산 결과를 받아 일기장 DTO에 담아 반환한다.
/**
* 선택한 날짜의 일기 조회
* @param userNumber 사용자 고유 번호
* @param date 일기 작성 날짜
* @return 일기장 (날짜,제목,본문,감정,힐링 메시지,힐링 뮤직)
*/
DiaryResponse getDiary(@Param("userNumber")Long userNumber, @Param("date") LocalDate date);
사용자 고유 번호와 날짜를 받고 SQL을 이용한 DB연산을 위해 XML코드로 넘긴다.
이때, 해당 메서드의 매게변수가 여러개이니, @Param을 통해 정확한 네이밍을 해준다.
<!-- 해당 날짜의 일기장 반환 -->
<select id="getDiary" resultType="website.server.Domain.HealingProgram.HealingService.DewRecord.DTO.Response.DiaryResponse">
SELECT
date,
title,
diary,
emotion,
healingMessage,
healingMusic
FROM diary
WHERE userNumber= #{userNumber} AND date = #{date}
</select>
SQL문을 활용한 DB연산 과정이다.
매개변수를 통해 Diary테이블에서 일기장 DTO에 들어갈 칼럼들을 받아오고 resultType의 DiaryResponse DTO에 매칭 시킨다.
일기장에 들어갈 모든 정보들을 반환성공하였다.
