[클론 코딩] 네이버 카페 - 댓글 수정

2024. 6. 10. 01:24Project/Naver Cafe

  네이버 카페는 댓글 수정시 댓글의 '본문'을 수정할 수 있으며, 변경된 닉네임은 적용이 되지 않는다. 또한 작성일 정보가 수정일 정보로 바뀌어 사용자에게 제공된다. 


Comment

package CloneCoding.NaverCafe.domain.comment;

@Entity
@Table(name = "COMMENT")
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class Comment {

    public void update(String body, LocalDateTime updateAt) {
        this.body = body;
        this.updateAt = updateAt;
    }

}

 

  • update() : Comment 객체의 body, updateAt  정보를 파라미터 값으로 수정하는 메서드

CommentController

package CloneCoding.NaverCafe.domain.comment.controller;

@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/cafe/{cafe_url}")
public class CommentController {

    private final CommentService commentService;

    @PutMapping("/comment/{comment_id}")
    public String updateComment(@PathVariable("cafe_url") String cafeUrl,
                                @PathVariable("comment_id") Long commentId,
                                @RequestBody @Valid RequestWriteComment request,
                                @RequestHeader("Authorization") String token) {
        log.info("댓글(답글) 수정 요청");
        return commentService.updateComment(cafeUrl, commentId, request, token);
    }

}

 

  • updateComment() : 카페 url, 댓글 id, 요청 정보, 토큰 정보로 CommentService의 updateComment()를 호출 결과 메시지를 반환

CommentServiceImpl

package CloneCoding.NaverCafe.domain.comment.service;

import static CloneCoding.NaverCafe.message.SystemMessage.UPDATE_COMMENT_COMPLETE;
import static CloneCoding.NaverCafe.message.SystemMessage.WRITE_COMMENT_COMPLETE;

@Service
@RequiredArgsConstructor
public class CommentServiceImpl implements CommentService {

    private final CommentRepository commentRepository;
    private final CafeRepository cafeRepository;
    private final CafeMemberRepository cafeMemberRepository;
    private final NormalRepository normalRepository;
    private final AesUtil aesUtil;

    @Override
    public String updateComment(String cafeUrl, Long commentId, RequestWriteComment request,
                                String token) {

        checkCafeMember(cafeUrl, token);
        Comment comment = commentRepository.findById(commentId)
                .orElseThrow(() -> new NoSuchElementException("댓글 정보를 찾을 수 없습니다."));

        comment.update(request.getBody(), LocalDateTime.now());

        commentRepository.save(comment);

        return UPDATE_COMMENT_COMPLETE.getMessage();
    }

    private CafeMember checkCafeMember(String url, String token) {

        String accountId = aesUtil.aesDecode(token);
        Cafe findCafe = cafeRepository.findByUrl(url);

        return cafeMemberRepository.findByAccountId(findCafe, accountId);
    }

}

 

  • updateComment() : Comment 객체의 body와 createAt 정보를 수정하고 엔티티를 저장, 결과 메시지를 반환

API TEST

DB - 댓글 수정 전

 

API TEST - 댓글 수정

 

DB - 댓글 수정 후

 

  댓글 수정 요청에 대한 API 테스트 결과이다. Comment 엔티티의 body와 updateAt 정보가 잘 수정된 것을 확인할 수 있다.