feat(mixin): add TableBaseMixin and UUIDTableBaseMixin for async CRUD operations

- Implemented TableBaseMixin providing generic CRUD methods and automatic timestamp management.
- Introduced UUIDTableBaseMixin for models using UUID as primary keys.
- Added ListResponse for standardized paginated responses.
- Created TimeFilterRequest and PaginationRequest for filtering and pagination parameters.
- Enhanced get_with_count method to return both item list and total count.
- Included validation for time filter parameters in TimeFilterRequest.
- Improved documentation and usage examples throughout the code.
This commit is contained in:
2025-12-22 18:29:14 +08:00
parent 47a4756227
commit a5efda9c23
44 changed files with 4306 additions and 497 deletions

View File

@@ -4,7 +4,8 @@ from uuid import UUID
from enum import StrEnum
from sqlmodel import Field, Relationship, text
from .base import SQLModelBase, UUIDTableBase
from .base import SQLModelBase
from .mixin import UUIDTableBaseMixin
if TYPE_CHECKING:
from .object import Object
@@ -29,16 +30,16 @@ class PolicyType(StrEnum):
class PolicyOptionsBase(SQLModelBase):
"""存储策略选项的基础模型"""
token: str | None = None
token: str | None = Field(default=None)
"""访问令牌"""
file_type: str | None = None
file_type: str | None = Field(default=None)
"""允许的文件类型"""
mimetype: str | None = None
mimetype: str | None = Field(default=None, max_length=127)
"""MIME类型"""
od_redirect: str | None = None
od_redirect: str | None = Field(default=None, max_length=255)
"""OneDrive重定向地址"""
chunk_size: int = Field(default=52428800, sa_column_kwargs={"server_default": "52428800"})
@@ -48,7 +49,7 @@ class PolicyOptionsBase(SQLModelBase):
"""是否使用S3路径风格"""
class PolicyOptions(PolicyOptionsBase, UUIDTableBase, table=True):
class PolicyOptions(PolicyOptionsBase, UUIDTableBaseMixin):
"""存储策略选项模型与Policy一对一关联"""
policy_id: UUID = Field(foreign_key="policy.id", unique=True)
@@ -59,7 +60,7 @@ class PolicyOptions(PolicyOptionsBase, UUIDTableBase, table=True):
"""关联的策略"""
class Policy(UUIDTableBase, table=True):
class Policy(SQLModelBase, UUIDTableBaseMixin):
"""存储策略模型"""
name: str = Field(max_length=255, unique=True)