ColumnRequest.java

package com.newbit.column.domain;

import com.newbit.column.enums.RequestType;
import jakarta.persistence.*;
import lombok.*;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

@Entity
@Table(name = "column_request")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
@EntityListeners(AuditingEntityListener.class)
public class ColumnRequest {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long columnRequestId;

    @Enumerated(EnumType.STRING)
    private RequestType requestType;

    private Boolean isApproved;

    private String updatedTitle;

    @Lob
    private String updatedContent;

    private Integer updatedPrice;

    private String updatedThumbnailUrl;

    private String rejectedReason;

    private Long adminUserId;

    @ManyToOne
    @JoinColumn(name = "column_id", nullable = false)
    private Column column;

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime updatedAt;

    public void approve(Long adminUserId) {
        this.isApproved = true;
        this.adminUserId = adminUserId;
        this.getColumn().approve();
    }

    public void reject(String reason, Long adminUserId) {
        this.isApproved = false;
        this.rejectedReason = reason;
        this.adminUserId = adminUserId;
    }


    /* 현재 사용하지 않음. 추후 테스트/기타 로직에 활용 가능 */
//    public static ColumnRequest createdColumnRequest(CreateColumnRequestDto dto, Column column) {
//        return ColumnRequest.builder()
//                .requestType(RequestType.CREATE)
//                .isApproved(false)
//                .updatedTitle(dto.getTitle())
//                .updatedContent(dto.getContent())
//                .updatedPrice(dto.getPrice())
//                .updatedThumbnailUrl(dto.getThumbnailUrl())
//                .column(column)
//                .build();
//    }

}