e723025889
Bug 1: GET /api/v1/projects → 500 - _to_project_response() 缺少 owner_user_id 和 shared_users 字段 - 补全 ProjectResponse schema 必填字段 Bug 2: GET /api/v1/dashboard/overview → 404 - 新建 dashboard schema + route - 添加 count_by_user / count_by_project_ids / sum_storage_by_project_ids 仓储方法 - 注册 /api/v1/dashboard 路由
70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
from typing import Any
|
|
|
|
from app.auth import AuthenticatedUser, get_current_user
|
|
from app.dependencies import get_project_repository
|
|
from app.schemas.project import (
|
|
CreateProjectRequest,
|
|
ListProjectsResponse,
|
|
ProjectResponse,
|
|
)
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
|
|
from packages.application import (
|
|
CreateProjectCommand,
|
|
CreateProjectUseCase,
|
|
GetProjectUseCase,
|
|
ListProjectsUseCase,
|
|
)
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
def _to_project_response(item) -> ProjectResponse:
|
|
return ProjectResponse(
|
|
id=item.id,
|
|
owner_user_id=item.owner_user_id,
|
|
name=item.name,
|
|
description=item.description,
|
|
shared_users=item.shared_users,
|
|
)
|
|
|
|
|
|
@router.get("/{project_id}", response_model=ProjectResponse)
|
|
def get_project(
|
|
project_id: str,
|
|
authenticated_user: AuthenticatedUser = Depends(get_current_user),
|
|
project_repository: Any = Depends(get_project_repository),
|
|
) -> ProjectResponse:
|
|
use_case = GetProjectUseCase(project_repository)
|
|
project = use_case.execute(project_id)
|
|
if project is None:
|
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Project not found")
|
|
return _to_project_response(project)
|
|
|
|
|
|
@router.get("", response_model=ListProjectsResponse)
|
|
def list_projects(
|
|
authenticated_user: AuthenticatedUser = Depends(get_current_user),
|
|
project_repository: Any = Depends(get_project_repository),
|
|
) -> ListProjectsResponse:
|
|
use_case = ListProjectsUseCase(project_repository)
|
|
projects = use_case.execute(authenticated_user.user.id)
|
|
return ListProjectsResponse(items=[_to_project_response(item) for item in projects])
|
|
|
|
|
|
@router.post("", response_model=ProjectResponse)
|
|
def create_project(
|
|
request: CreateProjectRequest,
|
|
authenticated_user: AuthenticatedUser = Depends(get_current_user),
|
|
project_repository: Any = Depends(get_project_repository),
|
|
) -> ProjectResponse:
|
|
use_case = CreateProjectUseCase(project_repository)
|
|
project = use_case.execute(
|
|
CreateProjectCommand(
|
|
name=request.name,
|
|
description=request.description,
|
|
),
|
|
owner_user_id=authenticated_user.user.id,
|
|
)
|
|
return _to_project_response(project)
|