Files
disknext/PLAN.md

100 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
- 数据模型初步规划
- 基类
- IDUUIDv7
- 创建时间
- 更新时间
- 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']
- 是否在新窗口打开