Refactor code structure for improved readability and maintainability

This commit is contained in:
2025-11-27 20:56:48 +08:00
parent 83276c8b95
commit 1533d9e89c
42 changed files with 5282 additions and 330 deletions

83
PLAN.md Normal file
View File

@@ -0,0 +1,83 @@
- 数据模型初步规划
- 基类
- 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, link]
- 当对象类型为file时
- 源文件名
- 文件大小
- 分块上传会话ID
- 文件MD5, SHA1, SHA256
- 文件元数据
- 音频:歌名、歌手名、专辑、流派...
- 图片: 尺寸、ISO、曝光、拍摄设备、地理位置...
- 其他需要记录的元数据
- 当对象类型为 link 时
- 目标对象ID
- 外键
- 用户ID 用于确保该对象的归属
- 目录ID 用于定位该对象存在哪个目录
- 策略ID 用于定位该对象存储于哪个存储策略
- Policy
- 存储策略名
- 策略类型(如 `本机`, `从机`, `s3`, `OSS`, `COS` 等)
- 服务器地址(本机则为路径)
- 存储桶名称
- 允许上传文件的最大字节数
- 目录命名规则
- 文件命名规则
- 文件后缀白名单/黑名单
- 分片上传大小
- `待研究`
- Tag
- 标签名称
- 标签图标
- 标签颜色
- 外键
- 用户ID 用于确保该标签的归属
- 运行环境与目标
- 数据库类型:主要支持 PostgreSQL 18考虑兼容 SQLite/MySQL/早期版本PostgreSQL
- 驱动版本:做一定的向下兼容,主要支持 Python 3.14
- 异步栈:全量异步 AsyncSession不接受兼容同步
- 业务语义与数据模型
- 时间与时区:统一存储 UTC再根据用户选择的时区计算本地化时间
- 文件/目录命名规则
- 文件名在同一目录下唯一
- 目录名在同一账户下的同一父目录下唯一
- 资源分享
- 用户可以分享单个文件,也可以分享整个目录
- 关系与级联
- 删除文件夹时,同时删除该文件夹内的所有子文件夹及其所有文件
- 删除用户时同时删除该用户的所有文件文件夹分享Tag