diff --git a/models/migration.py b/models/migration.py index e91cb4b..2f22c33 100644 --- a/models/migration.py +++ b/models/migration.py @@ -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') diff --git a/models/object.py b/models/object.py index 09b13dd..6ced3d5 100644 --- a/models/object.py +++ b/models/object.py @@ -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(文件直接使用,目录作为子文件的默认策略)""" # ==================== 关系 ==================== diff --git a/models/policy.py b/models/policy.py index dabbd67..9ed8319 100644 --- a/models/policy.py +++ b/models/policy.py @@ -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 \ No newline at end of file diff --git a/models/response.py b/models/response.py index 8a89106..dfa3201 100644 --- a/models/response.py +++ b/models/response.py @@ -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,用于标识请求的唯一性""" diff --git a/routers/controllers/directory.py b/routers/controllers/directory.py index f0e30a7..4fbb3e6 100644 --- a/routers/controllers/directory.py +++ b/routers/controllers/directory.py @@ -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,