- Implement PhysicalFile model to manage physical file references and reference counting. - Create Policy model with associated options and group links for storage policies. - Introduce Redeem and Report models for handling redeem codes and reports. - Add Settings model for site configuration and user settings management. - Develop Share model for sharing objects with unique codes and associated metadata. - Implement SourceLink model for managing download links associated with objects. - Create StoragePack model for managing user storage packages. - Add Tag model for user-defined tags with manual and automatic types. - Implement Task model for managing background tasks with status tracking. - Develop User model with comprehensive user management features including authentication. - Introduce UserAuthn model for managing WebAuthn credentials. - Create WebDAV model for managing WebDAV accounts associated with users.
97 lines
3.7 KiB
Python
97 lines
3.7 KiB
Python
"""
|
|
FastAPI 依赖注入
|
|
|
|
包含 HTTP 端点的通用依赖:
|
|
- SessionDep: 数据库会话依赖
|
|
- TimeFilterRequestDep: 时间筛选查询依赖(用于 count 等统计接口)
|
|
- TableViewRequestDep: 分页排序查询依赖(包含时间筛选 + 分页排序)
|
|
- UserFilterParamsDep: 用户筛选参数依赖(用于管理员用户列表)
|
|
"""
|
|
from datetime import datetime
|
|
from typing import Annotated, Literal, TypeAlias
|
|
from uuid import UUID
|
|
|
|
from fastapi import Depends, Query
|
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
|
|
|
from sqlmodels.database_connection import DatabaseManager
|
|
from sqlmodels.mixin import TimeFilterRequest, TableViewRequest
|
|
from sqlmodels.user import UserFilterParams, UserStatus
|
|
|
|
|
|
# --- 数据库会话依赖 ---
|
|
|
|
SessionDep: TypeAlias = Annotated[AsyncSession, Depends(DatabaseManager.get_session)]
|
|
"""数据库会话依赖,用于路由函数中获取数据库会话"""
|
|
|
|
|
|
# --- 时间筛选依赖 ---
|
|
|
|
async def _get_time_filter_queries(
|
|
created_after_datetime: Annotated[datetime | None, Query()] = None,
|
|
created_before_datetime: Annotated[datetime | None, Query()] = None,
|
|
updated_after_datetime: Annotated[datetime | None, Query()] = None,
|
|
updated_before_datetime: Annotated[datetime | None, Query()] = None,
|
|
) -> TimeFilterRequest:
|
|
"""解析时间筛选查询参数"""
|
|
return TimeFilterRequest(
|
|
created_after_datetime=created_after_datetime,
|
|
created_before_datetime=created_before_datetime,
|
|
updated_after_datetime=updated_after_datetime,
|
|
updated_before_datetime=updated_before_datetime,
|
|
)
|
|
|
|
|
|
TimeFilterRequestDep: TypeAlias = Annotated[TimeFilterRequest, Depends(_get_time_filter_queries)]
|
|
"""获取时间筛选参数的依赖(用于 count 等统计接口)"""
|
|
|
|
|
|
# --- 分页排序依赖 ---
|
|
|
|
async def _get_table_view_queries(
|
|
offset: Annotated[int | None, Query(ge=0)] = 0,
|
|
limit: Annotated[int | None, Query(ge=1, le=100)] = 20,
|
|
desc: bool | None = True,
|
|
order: Literal["created_at", "updated_at"] | None = "created_at",
|
|
created_after_datetime: Annotated[datetime | None, Query()] = None,
|
|
created_before_datetime: Annotated[datetime | None, Query()] = None,
|
|
updated_after_datetime: Annotated[datetime | None, Query()] = None,
|
|
updated_before_datetime: Annotated[datetime | None, Query()] = None,
|
|
) -> TableViewRequest:
|
|
"""解析分页排序和时间筛选查询参数"""
|
|
return TableViewRequest(
|
|
offset=offset,
|
|
limit=limit,
|
|
desc=desc,
|
|
order=order,
|
|
created_after_datetime=created_after_datetime,
|
|
created_before_datetime=created_before_datetime,
|
|
updated_after_datetime=updated_after_datetime,
|
|
updated_before_datetime=updated_before_datetime,
|
|
)
|
|
|
|
|
|
TableViewRequestDep: TypeAlias = Annotated[TableViewRequest, Depends(_get_table_view_queries)]
|
|
"""获取分页排序和时间筛选参数的依赖"""
|
|
|
|
|
|
# --- 用户筛选依赖 ---
|
|
|
|
async def _get_user_filter_params(
|
|
group_id: Annotated[UUID | None, Query(description="按用户组UUID筛选")] = None,
|
|
email: Annotated[str | None, Query(max_length=50, description="按邮箱模糊搜索")] = None,
|
|
nickname: Annotated[str | None, Query(max_length=50, description="按昵称模糊搜索")] = None,
|
|
status: Annotated[UserStatus | None, Query(description="按用户状态筛选")] = None,
|
|
) -> UserFilterParams:
|
|
"""解析用户过滤查询参数"""
|
|
return UserFilterParams(
|
|
group_id=group_id,
|
|
email_contains=email,
|
|
nickname_contains=nickname,
|
|
status=status,
|
|
)
|
|
|
|
|
|
UserFilterParamsDep: TypeAlias = Annotated[UserFilterParams, Depends(_get_user_filter_params)]
|
|
"""获取用户筛选参数的依赖(用于管理员用户列表)"""
|