feat: 更新存储策略相关逻辑,使用 UUID 替代 int 类型,优化响应模型

This commit is contained in:
2025-12-19 17:32:26 +08:00
parent 28401d6053
commit 11b67bde6d
5 changed files with 25 additions and 19 deletions

View File

@@ -148,7 +148,6 @@ async def init_default_group() -> None:
if not await Group.get(session, Group.name == "管理员"):
admin_group = Group(
name="管理员",
policies="1",
max_storage=1 * 1024 * 1024 * 1024, # 1GB
share_enabled=True,
web_dav_enabled=True,
@@ -194,7 +193,6 @@ async def init_default_group() -> None:
if not await Group.get(session, Group.name == "游客"):
guest_group = Group(
name="游客",
policies="[]",
share_enabled=False,
web_dav_enabled=False,
)
@@ -210,6 +208,7 @@ async def init_default_user() -> None:
from .user import User
from .group import Group
from .object import Object, ObjectType
from .policy import Policy
from .database import get_session
log.info('初始化管理员用户...')
@@ -224,6 +223,12 @@ async def init_default_user() -> None:
if not admin_group:
raise RuntimeError("管理员用户组不存在,无法创建管理员用户")
# 获取默认存储策略
default_policy = await Policy.get(session, Policy.name == "本地存储")
if not default_policy:
raise RuntimeError("默认存储策略不存在,无法创建管理员用户")
default_policy_id = default_policy.id # 在后续 save 前保存 UUID
# 生成管理员密码
admin_password = Password.generate(8)
hashed_admin_password = Password.hash(admin_password)
@@ -245,7 +250,7 @@ async def init_default_user() -> None:
type=ObjectType.FOLDER,
owner_id=admin_user_id,
parent_id=None,
policy_id=1, # 默认本地存储策略
policy_id=default_policy_id,
).save(session)
log.info(f'初始管理员账号: admin')

View File

@@ -47,8 +47,8 @@ class DirectoryCreateRequest(SQLModelBase):
name: str
"""目录名称"""
policy_id: int | None = None
"""存储策略ID不指定则继承父目录"""
policy_id: UUID | None = None
"""存储策略UUID不指定则继承父目录"""
class ObjectMoveRequest(SQLModelBase):
@@ -93,8 +93,8 @@ class ObjectResponse(ObjectBase):
class PolicyResponse(SQLModelBase):
"""存储策略响应 DTO"""
id: str
"""策略ID"""
id: UUID
"""策略UUID"""
name: str
"""策略名称"""
@@ -189,8 +189,8 @@ class Object(ObjectBase, UUIDTableBase, table=True):
owner_id: UUID = Field(foreign_key="user.id", index=True)
"""所有者用户UUID"""
policy_id: int = Field(foreign_key="policy.id", index=True)
"""存储策略ID文件直接使用目录作为子文件的默认策略"""
policy_id: UUID = Field(foreign_key="policy.id", index=True)
"""存储策略UUID文件直接使用目录作为子文件的默认策略"""
# ==================== 关系 ====================

View File

@@ -1,8 +1,9 @@
from typing import TYPE_CHECKING
from typing import Optional, TYPE_CHECKING
from sqlmodel import Field, Relationship, text
from .base import TableBase
from enum import StrEnum
from sqlmodel import Field, Relationship, text
from .base import UUIDTableBase
if TYPE_CHECKING:
from .object import Object
@@ -11,7 +12,7 @@ class PolicyType(StrEnum):
LOCAL = "local"
S3 = "s3"
class Policy(TableBase, table=True):
class Policy(UUIDTableBase, table=True):
"""存储策略模型"""
name: str = Field(max_length=255, unique=True)
@@ -62,7 +63,7 @@ class Policy(TableBase, table=True):
@staticmethod
async def create(
policy: Optional["Policy"] = None,
policy: 'Policy | None' = None,
**kwargs
):
pass

View File

@@ -3,24 +3,24 @@
"""
from typing import Any
from uuid import uuid4
import uuid
from sqlmodel import Field
from .base import SQLModelBase
# [TODO] 未来把这拆了,直接按需返回状态码
class ResponseModel(SQLModelBase):
"""通用响应模型"""
code: int = Field(default=0, ge=0, lt=60000)
"""系统内部状态码0表示成功其他表示失败"""
data: dict[str, Any] | list[Any] | str | int | float | None = None
data: Any = None
"""响应数据"""
msg: str | None = None
"""响应消息,可以是错误消息或信息提示"""
instance_id: str = Field(default_factory=lambda: str(uuid4()))
instance_id: uuid.UUID = Field(default_factory=uuid.uuid4)
"""实例ID用于标识请求的唯一性"""

View File

@@ -75,7 +75,7 @@ async def router_directory_get(
]
policy_response = PolicyResponse(
id=str(policy.id),
id=policy.id,
name=policy.name,
type=policy.type.value,
max_size=policy.max_size,