# _*_ coding : UTF-8 _*_
# @Time : 2025/01/19 00:46
# @UpdateTime : 2025/01/19 00:46
# @Author : sonder
# @File : file.py
# @Software : PyCharm
# @Comment : 本程序
from tortoise import fields

from models.common import BaseModel


class File(BaseModel):
    """
    文件表模型。
    """

    name = fields.CharField(
        max_length=255,
        description="文件名",
        source_field="name"  # 映射到数据库字段 name
    )
    """
    文件名。
    - 包括文件扩展名。
    - 最大长度为 255 个字符。
    - 映射到数据库字段 name。
    """

    size = fields.BigIntField(
        description="文件大小（字节）",
        source_field="size"  # 映射到数据库字段 size
    )
    """
    文件大小。
    - 单位：字节。
    - 映射到数据库字段 size。
    """

    file_type = fields.CharField(
        max_length=100,
        description="文件类型",
        source_field="file_type"  # 映射到数据库字段 file_type
    )
    """
    文件类型。
    - 例如：image/png、application/pdf。
    - 最大长度为 100 个字符。
    - 映射到数据库字段 file_type。
    """

    absolute_path = fields.CharField(
        max_length=512,
        description="绝对路径",
        source_field="absolute_path"  # 映射到数据库字段 absolute_path
    )
    """
    绝对路径。
    - 文件在服务器上的绝对路径。
    - 最大长度为 512 个字符。
    - 映射到数据库字段 absolute_path。
    """

    relative_path = fields.CharField(
        max_length=512,
        description="相对路径",
        source_field="relative_path"  # 映射到数据库字段 relative_path
    )
    """
    相对路径。
    - 文件相对于某个根目录的相对路径。
    - 最大长度为 512 个字符。
    - 映射到数据库字段 relative_path。
    """

    uploader = fields.ForeignKeyField(
        "models.User",
        related_name="uploaded_files",
        null=True,  # 允许为空
        description="上传人员",
        source_field="uploader_id"  # 映射到数据库字段 uploader_id
    )
    """
    上传人员。
    - 外键关联到 User 表。
    - 允许为空（例如系统自动上传的文件）。
    - 映射到数据库字段 uploader_id。
    """

    class Meta:
        table = "file"  # 数据库表名
        table_description = "文件表"  # 表描述
        ordering = ["-create_time"]  # 默认按创建时间倒序排序
