[좋아요 누른 힐링 메시지 리스트 조회 API]

1. 좋아요 누른 힐링 메시지 리스트 조회 API

마이페이지에서 사용자가 지금까지 좋아요를 누른 힐링 메시지를 리스트 형식으로 조회하는 API이다.

게시글의 모든 내용을 보여주지 않고,
리스트 형식의 반환이다 보니, 썸네일 형식의 리스트로 반환한다.

2. Trouble Solving

XML에서 SQL 구현과정에서 조금 복잡했지만,
한번에 성공했다.

DB 구조는 다음과 같다.

다음은 Xml의 SQL 코드이다.

 <!-- 내가 좋아요 누른 힐링 메시지 리스트 조회 -->
    <select id="getMyLikeMessageList" resultType="website.server.Domain.HealingProgram.HealingService.HealingMessageSharing.DTO.Response.HealingMessageThumbNailResponse">

        SELECT
            hm.messageId,
            hm.title,
            m.nickname,
            hm.createdDate
        FROM
            healing_message hm
        JOIN
            member m
        ON
            hm.userNumber = m.userNumber
        JOIN
            healing_message_like hml
        ON
            hm.messageId = hml.messageId
        WHERE
            WHERE
            hml.userNumber =#{userNumber}

    </select>

3. 구현

3.1 Controller

 /**
     * 좋아요 누른 힐링 메시지 리스트 조회 API
     * @param request 사용자 요청
     * @return 좋아요 누른 힐링 메시지 리스트 반환
     */
    @Operation(summary = " 좋아요 누른 힐링 메시지 리스트 조회 API ", description = "")
    @GetMapping("/like/list")
    public ResponseEntity<List<HealingMessageThumbNailResponse>> getMyLikeMessageList(HttpServletRequest request){

        /* 좋아요 누른 힐링 메시지 리스트 반환 */
        return ResponseEntity.ok(healingMessageService.getMyLikeMessageList(request));
    }

JOIN 과 ON을 사용해서 userNumber로 각 테이블의 연관관계를 표현한 후 ,매개 변수로 받은 userNumber로 조건을 걸어 출력하였다.

3.2 Service

3.2.1 Interface

 /**
     * 좋아요 누른 힐링 메시지 리스트 조회
     * @param request 사용자 요청
     * @return 내가 좋아요 누른 힐링 메시지 리스트
     */
    List<HealingMessageThumbNailResponse> getMyLikeMessageList(HttpServletRequest request);
  1. 코드의 유연성
  2. 역할의 분리
  3. 기획 변경에 대비

3.2.2 Implements

/**
     * 좋아요 누른 힐링 메시지 리스트 조회 메서드
     * @param request 사용자 요청
     * @return 좋아요 누른 힐링 메시지 리스트 조회
     */
    @Override
    public List<HealingMessageThumbNailResponse> getMyLikeMessageList(HttpServletRequest request) {

        /* 사용자 고유 번호 조회 */
        Long userNumber = jwtService.extractUserNumberFromRequest(request);

        /* 좋아요 누른 힐링 메시지 리스트 반환 */
        return healingMessageMapper.getMyLikeMessageList(userNumber);
    }

3.3 Mapper

3.3.1 Mapper

/**
     *  좋아요 누른 힐링 메시지 리스트 조회
     * @param userNumber 사용자 고유 번호
     * @return  좋아요 누른 힐링 메시지 리스트
     */
    List<HealingMessageThumbNailResponse> getMyLikeMessageList(Long userNumber);

3.3.2 Xml

 <!-- 내가 좋아요 누른 힐링 메시지 리스트 조회 -->
    <select id="getMyLikeMessageList" resultType="website.server.Domain.HealingProgram.HealingService.HealingMessageSharing.DTO.Response.HealingMessageThumbNailResponse">

        SELECT
            hm.messageId,
            hm.title,
            m.nickname,
            hm.createdDate
        FROM
            healing_message hm
        JOIN
            member m
        ON
            hm.userNumber = m.userNumber
        JOIN
            healing_message_like hml
        ON
            hm.messageId = hml.messageId
        WHERE
           WHERE
            hml.userNumber =#{userNumber}

    </select>

healing message like 테이블에서 좋아요를 누른 사용자(현재 사용자)로 해당 테이블의 데이터를 가져온다.

그리고 healingmessage 테이블과 연관된 member 테이블을 사용해 ,
필요한 4가지의 정보를 모두 가져와서 DTO에 매핑한다.

4. 결과

다음은,
그냥 힐링 메시지 리스트 조회 결과이다.

반면,
내가 좋아요 누른 힐링 메시지 리스트 조회

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

0개의 댓글