/** 资源分类 */
@skipFakeData
@moduleName(oss)
@listBy(tableEdit)
@skipComponent(appEditPage-appListPage-appDetailPage)
entity ResourceCategory {
    title String maxlength(40) /** 标题 */
    code String maxlength(20) /** 代码 */
    orderNumber Integer /** 排序 */
}
/** 上传文件 */
@skipFakeData
@addCustomMethod(service-rest-dto-listComponent-clientService-editComponent)
@replaceServiceMethod(save)
@skipRestApi(create)
@moduleName(oss)
@extendAbstractAuditingEntity
@skipWebButton(listEdit)
@replaceListComponentMethod(newEntity)
@listBy(list)
@skipComponent(appEditPage)
@mobileConfig(addToHomeMenu-addToHomeRecommend-addToUserMenu-addToHomeRank-detailWithRecommend)
@filterByTree(category)
@Features(copy-createBySelf)
entity UploadFile {
    /**
     * 完整文件名
     * 不含路径
     */
    @fieldConfig(hideInForm)
    fullName String
    businessTitle String /** 业务标题 */
    businessDesc String /** 业务自定义描述内容 */
    businessStatus String /** 业务状态 */
    @endUsed(selectFile)
    url String required /** Url地址 */
    /**
     * 文件名
     * 不含扩展名
     */
    @fieldConfig(hideInForm)
    name String
    @fieldConfig(hideInForm)
    @displayAs(thumb)
    thumb String /** 缩略图Url地址 */
    @fieldConfig(hideInForm)
    fileSize Long /** 文件大小 */
    @fieldConfig(hideInForm)
    ext String /** 扩展名 */
    @fieldConfig(hideInForm)
    type String /** 文件类型 */
    @fieldConfig(hideInForm)
    path String /** 本地路径 */
    @fieldConfig(hideInForm)
    folder String /** 存储目录 */
    @ownerEntityName
    @fieldConfig(hideInList-hideInForm)
    ownerEntityName String /** 实体名称 */
    @ownerEntityId
    @fieldConfig(hideInList-hideInForm)
    ownerEntityId Long /** 使用实体ID */
    @fieldConfig(hideInForm)
    createAt ZonedDateTime /** 创建时间 */
    @fieldConfig(hideInForm)
    referenceCount Long /** 被引次数 */
}
/** 上传图片 */
@skipFakeData
@addCustomMethod(service-rest-dto-listComponent-clientService-editComponent)
@replaceServiceMethod(save)
@skipRestApi(create)
@moduleName(oss)
@extendAbstractAuditingEntity
@skipWebButton(listEdit)
@replaceListComponentMethod(newEntity)
@listBy(list)
@skipComponent(appEditPage)
@mobileConfig(addToHomeMenu-addToUserMenu-addToHomeRecommend-detailWithRecommend)
@filterByTree(category)
@Features(copy-createBySelf)
entity UploadImage {
    /**
     * 完整文件名
     * 不含路径
     */
    @fieldConfig(hideInForm)
    fullName String
    businessTitle String /** 业务标题 */
    businessDesc String /** 业务自定义描述内容 */
    businessStatus String /** 业务状态 */
    @endUsed(selectFile)
    @displayAs(cover)
    url String required /** Url地址 */
    /**
     * 文件名
     * 不含扩展名
     */
    @fieldConfig(hideInForm)
    name String
    @fieldConfig(hideInForm)
    ext String /** 扩展名 */
    @fieldConfig(hideInForm)
    type String /** 文件类型 */
    @fieldConfig(hideInForm)
    path String /** 本地路径 */
    @fieldConfig(hideInForm)
    folder String /** 本地存储目录 */
    @fieldConfig(hideInForm)
    fileSize Long /** 文件大小 */
    @fieldConfig(hideInForm)
    ownerEntityName String /** 使用实体名称 */
    @fieldConfig(hideInForm)
    ownerEntityId Long /** 使用实体ID */
    @fieldConfig(hideInForm)
    createAt ZonedDateTime /** 创建时间 */
    @fieldConfig(hideInForm)
    smartUrl String /** 小图Url */
    @fieldConfig(hideInForm)
    mediumUrl String /** 中等图Url */
    @fieldConfig(hideInForm)
    referenceCount Long /** 文件被引用次数 */
}


relationship OneToMany {

    /** 下级列表 */
    ResourceCategory{children(title)}
    to
    /** 上级 */
    ResourceCategory{parent(title)}

}

relationship ManyToOne {
    /** 所属分类 */
    UploadImage{category(title)}
    to
    @annotationOnDestination(countByPrimaryKey)
    /** 图片列表 */
    ResourceCategory{images(url)}

    /** 所属分类 */
    UploadFile{category(title)}
    to
    @annotationOnDestination(countByPrimaryKey)
    /** 文件列表 */
    ResourceCategory{files(url)}
}

/**
 * 对象存储配置
 */
@skipFakeData
@moduleName(oss)
@entityPackage(oss)
@addCustomMethod(service)
@skipWebsite
@skipMobile
entity OssConfig {
    provider OssProvider required /** 提供商 */
    platform String required maxlength(40) unique /** 平台 */
    enabled Boolean /** 启用 */
    remark String /** 备注 */
    @endUsed(codeEditor)
    configData String /** 配置数据 */
}

/** OSS提供商 */
enum OssProvider {
    /** 本地 */
    LOCAL,
    /** MINIO */
    MINIO,
    /** 七牛云 */
    QINIU,
    /** 阿里云 */
    ALI,
    /** 腾讯云 */
    TENCENT
}

service all with serviceClass
filter *
dto UploadFile, UploadImage, ResourceCategory, OssConfig with mapstruct
paginate UploadFile, UploadImage, ResourceCategory, OssConfig with pagination
clientRootFolder UploadFile, UploadImage, ResourceCategory, OssConfig with files
//<%_ if (searchEngine === 'elasticsearch') { _%>
search UploadFile, UploadImage, ResourceCategory, OssConfig with elasticsearch
//<%_ } _%>

