feat: 重构模型和响应结构,优化用户和对象管理逻辑,添加 Dockerfile

This commit is contained in:
2025-12-18 18:28:41 +08:00
parent 68343c710b
commit 89e837d91c
18 changed files with 493 additions and 270 deletions

View File

@@ -1,27 +1,25 @@
from typing import Annotated
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from middleware.auth import AuthRequired
from middleware.dependencies import SessionDep
from models import Object, ObjectType, User, response
from models import (
DirectoryCreateRequest,
DirectoryResponse,
Object,
ObjectResponse,
ObjectType,
PolicyResponse,
User,
response,
)
directory_router = APIRouter(
prefix="/directory",
tags=["directory"]
)
class DirectoryCreateRequest(BaseModel):
"""创建目录请求"""
path: str
"""目录路径,如 /docs/images"""
policy_id: int | None = None
"""存储策略ID不指定则继承父目录"""
@directory_router.get(
path="/{path:path}",
summary="获取目录内容",
@@ -51,7 +49,7 @@ async def router_directory_get(
policy = await folder.awaitable_attrs.policy
objects = [
response.ObjectModel(
ObjectResponse(
id=str(child.id),
name=child.name,
path=f"/{child.name}", # TODO: 完整路径
@@ -66,16 +64,16 @@ async def router_directory_get(
]
return response.ResponseModel(
data=response.DirectoryModel(
data=DirectoryResponse(
parent=str(folder.parent_id) if folder.parent_id else None,
objects=objects,
policy=response.PolicyModel(
policy=PolicyResponse(
id=str(policy.id),
name=policy.name,
type=policy.type.value,
max_size=policy.max_size,
file_type=[],
)
),
)
)

View File

@@ -30,16 +30,16 @@ user_settings_router = APIRouter(
async def router_user_session(
session: SessionDep,
form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
) -> models.response.TokenModel:
) -> models.TokenResponse:
username = form_data.username
password = form_data.password
result = await service.user.Login(
session,
models.user.LoginRequest(username=username, password=password),
models.LoginRequest(username=username, password=password),
)
if isinstance(result, models.response.TokenModel):
if isinstance(result, models.TokenResponse):
return result
elif result is None:
raise HTTPException(status_code=401, detail="Invalid username or password")
@@ -203,13 +203,13 @@ async def router_user_me(
"""
group = await models.Group.get(session, models.Group.id == user.group_id)
user_group = models.response.GroupModel(
user_group = models.GroupResponse(
id=group.id,
name=group.name,
allowShare=group.share_enabled,
allow_share=group.share_enabled,
)
users = models.response.UserModel(
users = models.UserResponse(
id=user.id,
username=user.username,
nickname=user.nick,
@@ -369,7 +369,7 @@ def router_user_settings() -> models.response.ResponseModel:
Returns:
dict: A dictionary containing the current user settings.
"""
return models.response.ResponseModel(data=models.response.UserSettingModel().model_dump())
return models.response.ResponseModel(data=models.UserSettingResponse().model_dump())
@user_settings_router.post(
path='/avatar',