[Healing Service - DEW Calendar - 선택한 일기 조회 API]

1. 선택한 일기 조회 기능

"마이페이지 > 일기 리스트 조회"에서 특정 일기 썸네일을 누르면,
해당 일기를 조회 할 수 있다.

일기의 내용은,
작성된 날짜, 일기 제목, 일기 본문, 분석된 사용자의 감정, 힐링 메시지, 힐링 뮤직이다.

클라이언트 측에는 일기장 디자인으로 표현될 예정이다.

2. Trouble Solving

이제 슬슬 Mybatis를 이용한 백엔드 구현에 있어서 짬이 좀 찼나보다.
아무런 트러블 없이 구현이 성공되었다.

3. 구현

3.1 Controller

 /**
     * 선택한 날짜의 일기 조회 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);
    }

컨트롤러 단에서는 사용자 요청과 날짜를 받아서 바로 서비스 단으로 넘긴다.

3.2 Service

3.2.1 Interface

/**
     * 선택한 날짜의 일기 조회 메서드
     * @param request 사용자 요청
     * @param date 선택한 날짜
     * @return 일기장 (날짜,제목,본문,감정,힐링 메시지,힐링 뮤직)
     */
    DiaryResponse getDiary(HttpServletRequest request,LocalDate date);

기획자의 요구사항이 언제 바뀔지 모르니
서비스 단은 언제나 인터페이스를 먼저 설계하고,
세부적인 논리는 구현체에 구현한다.

3.2.2 Implements

/**
     * 선택한 날짜의 일기 조회 메서드
     * @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에 담아 반환한다.

3.3 Mapper

3.3.1 Mapper

 /**
     * 선택한 날짜의 일기 조회
     * @param userNumber 사용자 고유 번호
     * @param date 일기 작성 날짜
     * @return 일기장 (날짜,제목,본문,감정,힐링 메시지,힐링 뮤직)
     */
    DiaryResponse getDiary(@Param("userNumber")Long userNumber, @Param("date") LocalDate date);

사용자 고유 번호와 날짜를 받고 SQL을 이용한 DB연산을 위해 XML코드로 넘긴다.
이때, 해당 메서드의 매게변수가 여러개이니, @Param을 통해 정확한 네이밍을 해준다.

3.3.2 XML

<!-- 해당 날짜의 일기장 반환 -->
    <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에 매칭 시킨다.

4. 결과

일기장에 들어갈 모든 정보들을 반환성공하였다.

profile
내가 있는 그 조직에서 가장 성실하기만 하자

0개의 댓글