LandingPageAsset.java 3.2 KB
// landingpage/entity/LandingPageAsset.java
package com.aigeo.landingpage.entity;

import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.LocalDateTime;
import com.aigeo.common.enums.AssetType;

/**
 * 落地页资源实体类
 * 对应数据库表:ai_landing_page_assets
 * 
 * 存储落地页相关的资源文件信息,包括:
 * - 关联的项目和资源类型
 * - 上传文件的关联信息
 * - 相关数据的JSON存储
 * 
 * @author AIGEO Team
 * @since 1.0.0
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "ai_landing_page_assets", indexes = {
    @Index(name = "idx_landing_assets_project", columnList = "project_id"),
    @Index(name = "idx_landing_assets_type", columnList = "asset_type"),
    @Index(name = "idx_landing_assets_file", columnList = "uploaded_file_id")
})
public class LandingPageAsset {
    /**
     * 主键ID
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false, updatable = false)
    private Integer id;

    /**
     * 关联的落地页项目ID
     */
    @NotNull(message = "项目ID不能为空")
    @Column(name = "project_id", nullable = false)
    private Integer projectId;

    /**
     * 资源类型(如:image, video, document等)
     */
    @Enumerated(EnumType.STRING)
    @Column(name = "asset_type", nullable = false, length = 20)
    private AssetType assetType;

    /**
     * 关联的上传文件ID
     */
    @NotNull(message = "上传文件ID不能为空")
    @Column(name = "uploaded_file_id", nullable = false)
    private Integer uploadedFileId;

    /**
     * 相关数据(JSON格式存储额外信息)
     */
    @Column(name = "related_data", columnDefinition = "JSON")
    private String relatedData;

    /**
     * 创建时间
     */
    @CreationTimestamp
    @Column(name = "created_at", updatable = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createdAt;

    /**
     * 更新时间
     */
    @UpdateTimestamp
    @Column(name = "updated_at")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updatedAt;

    /**
     * 检查是否为图片资源
     */
    public boolean isImage() {
        return AssetType.IMAGE.equals(assetType);
    }

    /**
     * 检查是否为视频资源
     */
    public boolean isVideo() {
        return AssetType.VIDEO.equals(assetType);
    }

    /**
     * 检查是否为文档资源
     */
    public boolean isDocument() {
        return AssetType.DOCUMENT.equals(assetType);
    }

    /**
     * 检查是否有相关数据
     */
    public boolean hasRelatedData() {
        return relatedData != null && !relatedData.trim().isEmpty();
    }

    /**
     * 获取资源的描述信息
     */
    public String getAssetDescription() {
        return String.format("%s资源 (文件ID: %d)", assetType.toString(), uploadedFileId);
    }
}