Column.java
package com.newbit.column.domain;
import com.newbit.user.entity.Mentor;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "`column`")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class Column {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long columnId;
private String title;
@Lob
private String content;
@jakarta.persistence.Column(nullable = false)
@Builder.Default
private boolean isPublic = false;
@jakarta.persistence.Column(nullable = false)
private int price;
private int likeCount;
private String thumbnailUrl;
@CreatedDate
@jakarta.persistence.Column(name = "created_at", nullable = false, updatable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@jakarta.persistence.Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
@jakarta.persistence.Column(name = "deleted_at")
private LocalDateTime deletedAt;
@OneToMany(mappedBy = "column", cascade = CascadeType.ALL)
@Builder.Default
private List<ColumnRequest> requests = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "mentor_id")
private Mentor mentor;
@ManyToOne
@JoinColumn(name = "series_id")
private Series series;
public void markAsDeleted() {
this.deletedAt = LocalDateTime.now();
}
public void approve() {
this.isPublic = true;
}
public void updateSeries(Series series) {
this.series = series;
}
public void updateContent(String title, String content, Integer price, String thumbnailUrl) {
if (title != null) this.title = title;
if (content != null) this.content = content;
if (price != null) this.price = price;
if (thumbnailUrl != null) this.thumbnailUrl = thumbnailUrl;
}
// 좋아요 카운트 증가
public void increaseLikeCount() {
this.likeCount += 1;
}
// 좋아요 카운트 감소
public void decreaseLikeCount() {
this.likeCount = Math.max(0, this.likeCount - 1);
}
}