
위 화면은 실제로 내가 구현하고 프론트엔드와 연결한 화면이다.
원리자체는 굉장히 간단해 보인다.
댓글을 작성하면, 저장하고 조회 API를 자동으로 불러오면 되는 것 처럼 보이니...
하지만 SQL 설계부터 살짝...?은 복잡했던 것 같다.
Mapper XML 파일에서 3개의 테이블을 Join해야 했으니 말이다.
(물론 이정도는 엄청 복잡한 것은 아니다만...)
결과적으로 SQL문을 작성하는 것에 있어서 약간의 사고력이 필요한 API였던 것 같다.
/**
* 힐링 메시지에 댓글 달기 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
) {
}
댓글을 작성하려면,
"어느 게시물에", "어떤 내용" 이렇게 두가지가 필요하기 때문이다.
/**
* 힐링 메시지에 댓글 달기 메서드
* @param request 사용자 요청
* @param commentRequest 댓글 내용
* @return commentRespnose DTO
*/
void postComment(HttpServletRequest request, CommentRequest commentRequest);
/**
* 힐링 메시지에 댓글 달기 메서드
* @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에 저장하기 위한 다음 값들을 추출한다.
/**
* 힐링 메시지에 댓글 달기
* @param userNumber 사용자 고유 번호
* @param comment 댓글 내용
* @return CommentResponse DTO
*/
void postComment(@Param("userNumber") Long userNumber,
@Param("messageId") Long messageId,
@Param("content") String comment);
<!-- 힐링 메시지에 댓글 달기 메서드 -->
<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문을 작성한다.
정상적으로 작동한다.
