From 6a60ab2fe05bb8d221df174284199143ef9478aa Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Fri, 26 Jun 2026 18:16:25 +0800 Subject: [PATCH] fix(P2-1): Use shared require_workspace_member function in projects.py --- apps/api/app/api/routes/projects.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/apps/api/app/api/routes/projects.py b/apps/api/app/api/routes/projects.py index 5939c53ee..ac3d13215 100644 --- a/apps/api/app/api/routes/projects.py +++ b/apps/api/app/api/routes/projects.py @@ -1,5 +1,6 @@ from typing import Any +from app.api.routes.permissions import require_workspace_member from app.auth import AuthenticatedUser, get_current_user from app.dependencies import get_project_repository, get_workspace_member_repository from app.schemas.project import ( @@ -7,7 +8,7 @@ from app.schemas.project import ( ListProjectsResponse, ProjectResponse, ) -from fastapi import APIRouter, Depends, HTTPException, status +from fastapi import APIRouter, Depends, HTTPException from packages.application import ( CreateProjectCommand, @@ -20,16 +21,6 @@ from packages.ports.workspace_member_repository import WorkspaceMemberRepository router = APIRouter() -def _require_workspace_member( - workspace_id: str, - authenticated_user: AuthenticatedUser, - workspace_member_repository: WorkspaceMemberRepository, -) -> None: - member = workspace_member_repository.find_by_workspace_and_user(workspace_id, authenticated_user.user.id) - if member is None: - raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Workspace access denied") - - def _to_project_response(item) -> ProjectResponse: return ProjectResponse( id=item.id, @@ -49,8 +40,8 @@ def get_project( 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") - _require_workspace_member(project.workspace_id, authenticated_user, workspace_member_repository) + raise HTTPException(status_code=404, detail="Project not found") + require_workspace_member(project.workspace_id, authenticated_user, workspace_member_repository) return _to_project_response(project) @@ -61,7 +52,7 @@ def list_projects( project_repository: Any = Depends(get_project_repository), workspace_member_repository: WorkspaceMemberRepository = Depends(get_workspace_member_repository), ) -> ListProjectsResponse: - _require_workspace_member(workspace_id, authenticated_user, workspace_member_repository) + require_workspace_member(workspace_id, authenticated_user, workspace_member_repository) use_case = ListProjectsUseCase(project_repository) projects = use_case.execute(workspace_id) return ListProjectsResponse(items=[_to_project_response(item) for item in projects]) @@ -74,7 +65,7 @@ def create_project( project_repository: Any = Depends(get_project_repository), workspace_member_repository: WorkspaceMemberRepository = Depends(get_workspace_member_repository), ) -> ProjectResponse: - _require_workspace_member(request.workspace_id, authenticated_user, workspace_member_repository) + require_workspace_member(request.workspace_id, authenticated_user, workspace_member_repository) use_case = CreateProjectUseCase(project_repository) project = use_case.execute( CreateProjectCommand(