100 lines
4.1 KiB
Markdown
100 lines
4.1 KiB
Markdown
- 数据模型初步规划
|
||
- 基类
|
||
- ID:UUIDv7
|
||
- 创建时间
|
||
- 更新时间
|
||
- User
|
||
- 用户名 唯一
|
||
- 昵称
|
||
- Argon2化的密码
|
||
- 用户当前的状态 `正常/手动封禁/系统封禁` 用 StrEnum 存储
|
||
- 已用存储空间
|
||
- 用户积分
|
||
- 默认用户组
|
||
- Optional[两步验证密钥]
|
||
- Optional[WebAuthn 凭证]
|
||
- Optional[头像地址] -> None为昵称首字/图片/Gavatar头像
|
||
- Optional[当前用户组过期时间] -> 用户组过期后回退默认用户组
|
||
- 用户的个人设置 计划中 考虑 BaseModel 进行嵌套
|
||
- Group `与 User 的关系:一个用户组可以有多个用户,但一个用户只能在一个用户组中`
|
||
- 组名 唯一
|
||
- list[[允许的存储策略, 该策略下最大允许使用的容量, 该策略下允许上传文件的白名单/黑名单]]
|
||
- 默认存储策略
|
||
- bool[分享内容]
|
||
- bool[是否管理员组]
|
||
- 速度限制
|
||
- bool[打包下载]
|
||
- bool[创建压缩/解压缩任务]
|
||
- bool[WebDAV]
|
||
- bool[WebDAV 反代]
|
||
- bool[离线下载]
|
||
- Object `计划:把 file 和 folder 合并为一个 Object 表,通过对象类型区分`
|
||
- 对象名
|
||
- 区分大小写
|
||
- 禁止名称为特殊字段 (如 `/`, `\`, `:`, `*`, `?`, `<`, `>`, `:`, `"`)
|
||
- 对象类型[file, folder, link]
|
||
- 当对象类型为file时
|
||
- 源文件名
|
||
- 文件大小
|
||
- 分块上传会话ID
|
||
- 文件MD5, SHA1, SHA256
|
||
- 文件元数据
|
||
- 音频:歌名、歌手名、专辑、流派...
|
||
- 图片: 尺寸、ISO、曝光、拍摄设备、地理位置...
|
||
- 其他需要记录的元数据
|
||
- 当对象类型为 folder 时
|
||
- 当前文件夹的视图(网格/列表/画廊)
|
||
- 排序规则(按名称/大小/上传时间/修改时间)
|
||
- 排序方式(升序/降序)
|
||
- 当对象类型为 link 时
|
||
- 目标对象ID
|
||
- 外键
|
||
- 用户ID 用于确保该对象的归属
|
||
- 目录ID 用于定位该对象存在哪个目录
|
||
- 策略ID 用于定位该对象存储于哪个存储策略
|
||
- Policy
|
||
- 存储策略名
|
||
- 策略类型(如 `本机`, `从机`, `s3`, `OSS`, `COS` 等)
|
||
- 服务器地址(本机则为路径)
|
||
- 存储桶名称
|
||
- 允许上传文件的最大字节数
|
||
- 目录命名规则
|
||
- 文件命名规则
|
||
- 文件后缀白名单/黑名单
|
||
- 分片上传大小
|
||
- `待研究`
|
||
- Tag
|
||
- 标签名称
|
||
- 标签图标
|
||
- 标签颜色
|
||
- 外键
|
||
- 用户ID 用于确保该标签的归属
|
||
|
||
- 运行环境与目标
|
||
- 数据库类型:主要支持 PostgreSQL 18,考虑兼容 SQLite/MySQL/早期版本PostgreSQL
|
||
- 驱动版本:做一定的向下兼容,主要支持 Python 3.13+
|
||
- 异步栈:全量异步 AsyncSession,不接受兼容同步
|
||
- 业务语义与数据模型
|
||
- 时间与时区:统一存储 UTC,再根据用户选择的时区计算本地化时间
|
||
- 文件/目录命名规则
|
||
- 文件名在同一目录下唯一
|
||
- 目录名在同一账户下的同一父目录下唯一
|
||
- 资源分享
|
||
- 用户可以分享单个文件,也可以分享整个目录
|
||
- 关系与级联
|
||
- 删除文件夹时,同时删除该文件夹内的所有子文件夹及其所有文件
|
||
- 删除用户时,同时删除该用户的所有文件,文件夹,分享,Tag
|
||
- 文件预览与编辑
|
||
- 预览应用 Literal['嵌入网页式应用', 'WOPI协议式应用']
|
||
- 是否启用
|
||
- WOPI协议式应用 `https://{server_host}/hosting/discovery`
|
||
- 嵌入网页式应用
|
||
- 图标
|
||
- 名称
|
||
- 支持的文件类型列表
|
||
- 预览URL模板 支持魔法变量
|
||
- 最大文件大小
|
||
- 平台 支持列表 ['all', 'mobile', 'desktop']
|
||
- 是否在新窗口打开
|
||
|