목적
게시글에 댓글 달기
모델
게시글 모델과 비슷한 구조로 만들어지지만, 보다 단순하고, 부모 댓글 기능을 포함한다.
top parent를 기준으로 우선 정렬하며, 그 다음은 parent를 기준으로 정렬하여 최소한의 댓글 트리 구조를 유지한다.
블라인드 기능의 경우 게시글 모델에서 작성하였으므로 생략한다.
class comment
author: fk, user model
created_at: datetime
parent: fk, self # 대댓글 기능 구현용
top_parent: fk, self # 최상위 부모 댓글
is_active: bool # 삭제여부
is_secret: bool # 비밀댓글 여부
class comment detail
comment: fk, comment
created_at: datetime
content: str
text: str, content가 html 또는 markdown인 경우 텍스트만 보관
class blind
생략
기능
Create
역시 게시글 생성과 비슷하되, 객체 생성시 관련 이용자에거 알림을 보내는 작업을 추가한다.
class create
if not 로그인 => 403 perm err
if not article.is_active or article.blind => 401 err
{{ form validation }}
article.author notification 추가
if parent => parent.author notification 추가
Read
댓글은 보통 단독으로 사용되지 않는다.
최근 댓글 기능을 사용한다면 목록뷰정도는 구현해야한다.
class 댓글목록view
queryset 가져오기
미리보기 생성
if article.secret => 비밀 글의 댓글
if article.for_member => 멤버전용글의 댓글
if comment.is_secret => 비밀댓글
Update
게시글과 마찬가지로 수정 횟수에 제한을 걸 수 있다.
추가로 댓글 수정의 경우 답글이 있는 상태에서는 수정하지 못하게 하는 등의 작업을 추가할 수 있다.
class updateview
if 수정횟수 < commnet fetail count => 수정횟수 소진 알림
if queyset.filter(parent=commnt) => 수정 불가 알림
Delete
삭제의 경우 작성자인지 확인한다.
게시글 작성자가 원치않는 댓글을 관리할 수 있도록 하고 싶은 경우, 게시글 작성자도 삭제할 수 있게하거나, 게시글 작성자는 블라인드를 할 수 있도록 하면 된다.
class deleteview
if comment.author != request.author => 403 perm etr