feat: 添加存储策略选项模型及其与策略的关系,更新相关文档
This commit is contained in:
164
models/README.md
164
models/README.md
@@ -188,11 +188,31 @@ models/
|
||||
| `dir_name_rule` | `str?` | 目录命名规则 |
|
||||
| `file_name_rule` | `str?` | 文件命名规则 |
|
||||
| `is_origin_link_enable` | `bool` | 是否开启源链接访问 |
|
||||
| `options` | `str?` | 其他选项(JSON 格式) |
|
||||
|
||||
**关系**:
|
||||
- `options`: 一对一关联 PolicyOptions
|
||||
|
||||
---
|
||||
|
||||
### 7. Object(统一对象)
|
||||
### 7. PolicyOptions(存储策略选项)
|
||||
|
||||
**表名**: `policyoptions`
|
||||
**基类**: `UUIDTableBase`
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | `UUID` | 主键 |
|
||||
| `policy_id` | `UUID` | 关联的策略(外键,唯一) |
|
||||
| `token` | `str?` | 访问令牌 |
|
||||
| `file_type` | `str?` | 允许的文件类型 |
|
||||
| `mimetype` | `str?` | MIME 类型 |
|
||||
| `od_redirect` | `str?` | OneDrive 重定向地址 |
|
||||
| `chunk_size` | `int` | 分片上传大小(字节),默认 50MB |
|
||||
| `s3_path_style` | `bool` | 是否使用 S3 路径风格 |
|
||||
|
||||
---
|
||||
|
||||
### 8. Object(统一对象)
|
||||
|
||||
**表名**: `object`
|
||||
**基类**: `UUIDTableBase`
|
||||
@@ -219,7 +239,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 8. SourceLink(源链接)
|
||||
### 9. SourceLink(源链接)
|
||||
|
||||
**表名**: `sourcelink`
|
||||
**基类**: `TableBase`
|
||||
@@ -233,7 +253,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 9. Share(分享)
|
||||
### 10. Share(分享)
|
||||
|
||||
**表名**: `share`
|
||||
**基类**: `TableBase`
|
||||
@@ -255,7 +275,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 10. Report(举报)
|
||||
### 11. Report(举报)
|
||||
|
||||
**表名**: `report`
|
||||
**基类**: `TableBase`
|
||||
@@ -269,7 +289,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 11. Tag(标签)
|
||||
### 12. Tag(标签)
|
||||
|
||||
**表名**: `tag`
|
||||
**基类**: `TableBase`
|
||||
@@ -288,7 +308,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 12. Task(任务)
|
||||
### 13. Task(任务)
|
||||
|
||||
**表名**: `task`
|
||||
**基类**: `TableBase`
|
||||
@@ -305,7 +325,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 13. Download(离线下载)
|
||||
### 14. Download(离线下载)
|
||||
|
||||
**表名**: `download`
|
||||
**基类**: `UUIDTableBase`
|
||||
@@ -332,7 +352,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 14. Node(节点)
|
||||
### 15. Node(节点)
|
||||
|
||||
**表名**: `node`
|
||||
**基类**: `TableBase`
|
||||
@@ -352,7 +372,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 15. Order(订单)
|
||||
### 16. Order(订单)
|
||||
|
||||
**表名**: `order`
|
||||
**基类**: `TableBase`
|
||||
@@ -372,7 +392,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 16. Redeem(兑换码)
|
||||
### 17. Redeem(兑换码)
|
||||
|
||||
**表名**: `redeem`
|
||||
**基类**: `TableBase`
|
||||
@@ -388,7 +408,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 17. StoragePack(容量包)
|
||||
### 18. StoragePack(容量包)
|
||||
|
||||
**表名**: `storagepack`
|
||||
**基类**: `TableBase`
|
||||
@@ -404,7 +424,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 18. WebDAV(WebDAV 账户)
|
||||
### 19. WebDAV(WebDAV 账户)
|
||||
|
||||
**表名**: `webdav`
|
||||
**基类**: `TableBase`
|
||||
@@ -423,7 +443,7 @@ models/
|
||||
|
||||
---
|
||||
|
||||
### 19. Setting(系统设置)
|
||||
### 20. Setting(系统设置)
|
||||
|
||||
**表名**: `setting`
|
||||
**基类**: `TableBase`
|
||||
@@ -448,52 +468,56 @@ models/
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 一对一关系 │
|
||||
│ 一对一关系 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Group ◄────────────────────────► GroupOptions │
|
||||
│ Group ◄────────────────────────> GroupOptions │
|
||||
│ group_id (unique FK) │
|
||||
│ │
|
||||
│ Policy ◄───────────────────────> PolicyOptions │
|
||||
│ policy_id (unique FK) │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
| 主表 | 从表 | 外键 | 说明 |
|
||||
|------|------|------|------|
|
||||
| Group | GroupOptions | `group_id` (unique) | 每个用户组有且仅有一个选项配置 |
|
||||
| Policy | PolicyOptions | `policy_id` (unique) | 每个存储策略有且仅有一个扩展选项 |
|
||||
|
||||
---
|
||||
|
||||
### 一对多关系
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 一对多关系 │
|
||||
├─────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────► Download │
|
||||
│ │ │
|
||||
│ ├──────► Object ◄──────┬──────► SourceLink │
|
||||
│ │ │ ▲ │ │
|
||||
│ │ │ │ └──────► Share ──────► Report│
|
||||
│ Group ──────► User ───┼─────────┘ │ │
|
||||
┌──────────────────────────────────────────────────────────────────────────────┐
|
||||
│ 一对多关系 │
|
||||
├──────────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────> Download │
|
||||
│ │ │
|
||||
│ ├──────> Object ◄──────┬──────> SourceLink │
|
||||
│ │ │ ↑ │ │
|
||||
│ │ │ │ └──────> Share ──────> Report │
|
||||
│ Group ──────> User ───┼─────────┘ │ │
|
||||
│ │ │ │ (自引用:parent-children) │
|
||||
│ │ ├──────► Order │
|
||||
│ │ │ │
|
||||
│ │ ├──────► StoragePack │
|
||||
│ │ │ │
|
||||
│ │ ├──────► Tag │
|
||||
│ │ │ │
|
||||
│ │ ├──────► Task ──────► Download │
|
||||
│ │ │ ▲ │
|
||||
│ │ ├──────► WebDAV │ │
|
||||
│ │ │ │ │
|
||||
│ │ └──────► UserAuthn │ │
|
||||
│ │ │ │
|
||||
│ └──────► Policy ──────► Object │ │
|
||||
│ │ │
|
||||
│ Node ───────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────────────┘
|
||||
│ │ ├──────> Order │
|
||||
│ │ │ │
|
||||
│ │ ├──────> StoragePack │
|
||||
│ │ │ │
|
||||
│ │ ├──────> Tag │
|
||||
│ │ │ │
|
||||
│ │ ├──────> Task ──────> Download │
|
||||
│ │ │ ↑ │
|
||||
│ │ ├──────> WebDAV │ │
|
||||
│ │ │ │ │
|
||||
│ │ └──────> UserAuthn │ │
|
||||
│ │ │ │
|
||||
│ └──────> Policy ──────> Object │ │
|
||||
│ │ │
|
||||
│ Node ───────────────┘ │
|
||||
│ │
|
||||
└──────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
| 一端 | 多端 | 外键 | 说明 |
|
||||
@@ -523,13 +547,13 @@ models/
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 多对多关系 │
|
||||
│ 多对多关系 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ Group ◄────── GroupPolicyLink ──────► Policy │
|
||||
│ Group ◄────── GroupPolicyLink ──────> Policy │
|
||||
│ │
|
||||
│ - 一个用户组可以使用多个存储策略 │
|
||||
│ - 一个存储策略可以被多个用户组使用 │
|
||||
│ - 一个用户组可以使用多个存储策略 │
|
||||
│ - 一个存储策略可以被多个用户组使用 │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
@@ -545,20 +569,20 @@ models/
|
||||
```
|
||||
┌──────────────┐
|
||||
│ Setting │
|
||||
│ (独立表) │
|
||||
│ (独立表) │
|
||||
└──────────────┘
|
||||
|
||||
┌──────────────┐
|
||||
│ Redeem │
|
||||
│ (独立表) │
|
||||
│ (独立表) │
|
||||
└──────────────┘
|
||||
|
||||
┌──────────────┐ 1:1 ┌──────────────┐
|
||||
│ Group │◄────────────►│ GroupOptions │
|
||||
│ Group │◄────────────>│ GroupOptions │
|
||||
│ │ └──────────────┘
|
||||
│ │
|
||||
│ │──────┐ M:N ┌──────────────────┐
|
||||
│ │ └──────►│ GroupPolicyLink │◄───┐
|
||||
│ │ └──────>│ GroupPolicyLink │◄───┐
|
||||
└──────┬───────┘ └──────────────────┘ │
|
||||
│ │
|
||||
│ 1:N │
|
||||
@@ -566,44 +590,44 @@ models/
|
||||
┌──────────────┐ ┌──────────────┐ │
|
||||
│ User │ │ Policy │◄───────┘
|
||||
│ │ │ │
|
||||
│ │ └──────┬───────┘
|
||||
│ │ │ 1:N
|
||||
│ │ │ │◄────────────>┌───────────────┐
|
||||
│ │ └──────┬───────┘ 1:1 │ PolicyOptions │
|
||||
│ │ │ 1:N └───────────────┘
|
||||
│ │──────────────┐ │
|
||||
└──────┬───────┘ │ │
|
||||
│ │ ▼
|
||||
│ 1:N │ ┌──────────────┐ ┌──────────────┐
|
||||
│ │ │ Object │◄────►│ Object │
|
||||
│ │ │ Object │◄────>│ Object │
|
||||
│ │ │ │ │ (children) │
|
||||
│ │ │ │ └──────────────┘
|
||||
├──────────────────────┼─┤ │
|
||||
│ │ └──────┬───────┘
|
||||
│ │ │
|
||||
│ │ │ 1:N
|
||||
│ │ ├─────────────►┌──────────────┐
|
||||
│ │ │ │ SourceLink │
|
||||
│ │ │ 1:N ┌──────────────┐
|
||||
│ │ ├─────────────>│ SourceLink │
|
||||
│ │ │ └──────────────┘
|
||||
│ │ │
|
||||
│ │ │
|
||||
│ │ │ 1:N
|
||||
│ │ └─────────────►┌──────────────┐
|
||||
│ │ │ Share │
|
||||
│ │ │ │─────► Report
|
||||
│ │ │ 1:N ┌──────────────┐
|
||||
│ │ └─────────────>│ Share │─────> Report
|
||||
│ │ └──────────────┘
|
||||
│ │
|
||||
│ │
|
||||
├──► Download ◄────────┼───────────────────────── Task
|
||||
├──> Download ◄────────┼───────────────────────── Task
|
||||
│ ▲ │
|
||||
│ │ │
|
||||
│ │ │
|
||||
│ └─────────────┼─────────────────────── Node
|
||||
│ │
|
||||
├──► Order │
|
||||
├──> Order │
|
||||
│ │
|
||||
├──► StoragePack │
|
||||
├──> StoragePack │
|
||||
│ │
|
||||
├──► Tag │
|
||||
├──> Tag │
|
||||
│ │
|
||||
├──► WebDAV │
|
||||
├──> WebDAV │
|
||||
│ │
|
||||
└──► UserAuthn │
|
||||
└──> UserAuthn │
|
||||
│
|
||||
│
|
||||
```
|
||||
@@ -667,6 +691,12 @@ class AvatarType(StrEnum):
|
||||
| `GroupOptionsBase` | 用户组选项基础字段 |
|
||||
| `GroupResponse` | 用户组响应 |
|
||||
|
||||
### 存储策略相关
|
||||
|
||||
| DTO | 说明 |
|
||||
|-----|------|
|
||||
| `PolicyOptionsBase` | 存储策略选项基础字段 |
|
||||
|
||||
### 对象相关
|
||||
|
||||
| DTO | 说明 |
|
||||
|
||||
@@ -29,7 +29,7 @@ from .object import (
|
||||
PolicyResponse,
|
||||
)
|
||||
from .order import Order
|
||||
from .policy import Policy, PolicyType
|
||||
from .policy import Policy, PolicyOptions, PolicyOptionsBase, PolicyType
|
||||
from .redeem import Redeem
|
||||
from .report import Report
|
||||
from .setting import Setting, SettingsType, SiteConfigResponse
|
||||
|
||||
@@ -20,10 +20,45 @@ class GroupPolicyLink(SQLModelBase, table=True):
|
||||
policy_id: UUID = Field(foreign_key="policy.id", primary_key=True)
|
||||
"""存储策略UUID"""
|
||||
|
||||
|
||||
class PolicyType(StrEnum):
|
||||
LOCAL = "local"
|
||||
S3 = "s3"
|
||||
|
||||
|
||||
class PolicyOptionsBase(SQLModelBase):
|
||||
"""存储策略选项的基础模型"""
|
||||
|
||||
token: str | None = None
|
||||
"""访问令牌"""
|
||||
|
||||
file_type: str | None = None
|
||||
"""允许的文件类型"""
|
||||
|
||||
mimetype: str | None = None
|
||||
"""MIME类型"""
|
||||
|
||||
od_redirect: str | None = None
|
||||
"""OneDrive重定向地址"""
|
||||
|
||||
chunk_size: int = Field(default=52428800, sa_column_kwargs={"server_default": "52428800"})
|
||||
"""分片上传大小(字节),默认50MB"""
|
||||
|
||||
s3_path_style: bool = Field(default=False, sa_column_kwargs={"server_default": text("false")})
|
||||
"""是否使用S3路径风格"""
|
||||
|
||||
|
||||
class PolicyOptions(PolicyOptionsBase, UUIDTableBase, table=True):
|
||||
"""存储策略选项模型(与Policy一对一关联)"""
|
||||
|
||||
policy_id: UUID = Field(foreign_key="policy.id", unique=True)
|
||||
"""关联的策略UUID"""
|
||||
|
||||
# 反向关系
|
||||
policy: "Policy" = Relationship(back_populates="options")
|
||||
"""关联的策略"""
|
||||
|
||||
|
||||
class Policy(UUIDTableBase, table=True):
|
||||
"""存储策略模型"""
|
||||
|
||||
@@ -50,6 +85,7 @@ class Policy(UUIDTableBase, table=True):
|
||||
|
||||
secret_key: str | None = Field(default=None)
|
||||
"""Secret Key"""
|
||||
|
||||
max_size: int = Field(default=0, sa_column_kwargs={"server_default": "0"})
|
||||
"""允许上传的最大文件尺寸(字节)"""
|
||||
|
||||
@@ -64,11 +100,14 @@ class Policy(UUIDTableBase, table=True):
|
||||
|
||||
is_origin_link_enable: bool = Field(default=False, sa_column_kwargs={"server_default": text("false")})
|
||||
"""是否开启源链接访问"""
|
||||
|
||||
options: str | None = Field(default=None)
|
||||
"""其他选项 (JSON格式)"""
|
||||
# options 示例: {"token":"","file_type":null,"mimetype":"","od_redirect":"http://127.0.0.1:8000/...","chunk_size":52428800,"s3_path_style":false}
|
||||
|
||||
|
||||
# 一对一关系:策略选项
|
||||
options: PolicyOptions | None = Relationship(
|
||||
back_populates="policy",
|
||||
sa_relationship_kwargs={"uselist": False},
|
||||
)
|
||||
"""策略的扩展选项"""
|
||||
|
||||
# 关系
|
||||
objects: list["Object"] = Relationship(back_populates="policy")
|
||||
"""策略下的所有对象"""
|
||||
|
||||
Reference in New Issue
Block a user