1. 힐링 메시지 게시글에 댓글 달기


위 화면은 실제로 내가 구현하고 프론트엔드와 연결한 화면이다.

원리자체는 굉장히 간단해 보인다.
댓글을 작성하면, 저장하고 조회 API를 자동으로 불러오면 되는 것 처럼 보이니...

하지만 SQL 설계부터 살짝...?은 복잡했던 것 같다.
Mapper XML 파일에서 3개의 테이블을 Join해야 했으니 말이다.
(물론 이정도는 엄청 복잡한 것은 아니다만...)

결과적으로 SQL문을 작성하는 것에 있어서 약간의 사고력이 필요한 API였던 것 같다.

2. Trouble Solving

3. 구현

3.1 Controller

 /**
     * 힐링 메시지에 댓글 달기 API
     * @param request 사용자 요청
     * @param commentRequest 댓글 내용
     * @return 댓글 달기 성공 메시지
     */
    @Operation(summary = "힐링 메시지에 댓글 달기 API", description = "")
    @PostMapping("/comment")
    public ResponseEntity<String> postComment(HttpServletRequest request,
                                              @RequestBody CommentRequest commentRequest){

        /* 댓글 달기 */
        healingMessageService.postComment(request,commentRequest);

        return ResponseEntity.ok("댓글 달기 성공");
    }

여기서 매개변수로 받는

@RequestBody CommentRequest commentRequest

는 다음과 같다.

package website.server.Domain.HealingProgram.HealingService.HealingMessageSharing.DTO.Request;

public record CommentRequest(
        Long messageId,
        String comment
) {
}

댓글을 작성하려면,
"어느 게시물에", "어떤 내용" 이렇게 두가지가 필요하기 때문이다.

3.2 Service

3.2.1 Interface

  /**
     * 힐링 메시지에 댓글 달기 메서드
     * @param request 사용자 요청
     * @param commentRequest 댓글 내용
     * @return commentRespnose DTO
     */
    void postComment(HttpServletRequest request, CommentRequest commentRequest);

3.2.2 Implements

 /**
     * 힐링 메시지에 댓글 달기 메서드
     * @param request 사용자 요청
     * @param commentRequest 댓글 내용
     * @return CommentResponse DTO
     */
    @Override
    public void postComment(HttpServletRequest request, CommentRequest commentRequest) {

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

        /* 댓글 게시 */
        healingMessageMapper.postComment(userNumber,commentRequest.messageId(),commentRequest.comment());
    }

DB에 저장하기 위한 다음 값들을 추출한다.

  1. 사용자 고유번호
  2. 메시지 고유번호
  3. 본문내용

3.3 Mapper

3.3.1 Mapper

 /**
     * 힐링 메시지에 댓글 달기
     * @param userNumber 사용자 고유 번호
     * @param comment 댓글 내용
     * @return CommentResponse DTO
     */
    void postComment(@Param("userNumber") Long userNumber,
                                @Param("messageId") Long messageId,
                                @Param("content") String comment);

3.3.2 Xml

   <!-- 힐링 메시지에 댓글 달기 메서드 -->
    <insert id="postComment" parameterType="website.server.Domain.HealingProgram.HealingService.HealingMessageSharing.DTO.Request.CommentRequest">

        INSERT INTO healing_message_comment (messageId, userNumber, content, createdDate)
        VALUES (#{messageId}, #{userNumber}, #{content}, NOW())

    </insert>

이전 인터페이스에서 입력받은 데이터에 현재의 시간을 저장하여 SQL문을 작성한다.

4. 결과

정상적으로 작동한다.

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

0개의 댓글