DiscussionComment.java
package qwerty.chaekit.domain.group.activity.discussion.comment;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.BatchSize;
import qwerty.chaekit.domain.BaseEntity;
import qwerty.chaekit.domain.group.activity.discussion.Discussion;
import qwerty.chaekit.domain.group.activity.discussion.DiscussionStance;
import qwerty.chaekit.domain.member.user.UserProfile;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Table(name = "discussion_comment")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DiscussionComment extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "author_id")
private UserProfile author;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "discussion_id")
private Discussion discussion;
@Column(nullable = false, length = 5000)
private String content;
@Column(name = "is_edited", nullable = false)
private boolean edited = false;
@Column(name = "is_deleted", nullable = false)
private boolean deleted = false;
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private DiscussionStance stance = DiscussionStance.NEUTRAL;
@Setter
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private DiscussionComment parent = null;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
@BatchSize(size = 50)
private final List<DiscussionComment> replies = new ArrayList<>();
@Builder
public DiscussionComment(Long id, UserProfile author, Discussion discussion, String content, DiscussionStance stance, DiscussionComment parent) {
this.id = id;
this.author = author;
this.discussion = discussion;
this.content = content;
this.stance = stance;
this.parent = parent;
}
public void updateContent(String content) {
this.content = content;
this.edited = true;
}
public void softDelete() {
this.content = "삭제된 댓글입니다.";
this.deleted = true;
}
public void removeReply(DiscussionComment reply) {
replies.remove(reply);
}
public boolean isAuthor(UserProfile user) {
return author.getId().equals(user.getId());
}
public boolean isReply() {
return parent != null;
}
public boolean isRootComment() {
return parent == null;
}
}