From 2a9fdc31a6a73004e2f9a13cdd81c70fffa08659 Mon Sep 17 00:00:00 2001 From: Borgia Leiva Date: Tue, 3 Feb 2026 11:51:30 +0100 Subject: [PATCH] Refactored routers/projects.py to make way more readable by changing imports --- routers/projects.py | 79 +++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/routers/projects.py b/routers/projects.py index 24244b2..05c27f2 100644 --- a/routers/projects.py +++ b/routers/projects.py @@ -3,17 +3,18 @@ from typing import List, Annotated from database import db_dependency -import schemas.tasks as tasks_schemas -import schemas.projects as projects_schemas -import schemas.users as users_schemas -import schemas.projects_tasks as projects_tasks_schemas +from schemas.tasks import TaskBase, TaskCreate, TaskUpdate +from schemas.projects import ProjectBase, ProjectCreate, ProjectUpdate, ProjectAddUsers, ProjectRemoveUsers +from schemas.users import UserBase +from schemas.projects_users import ProjectUserBase +from schemas.projects_tasks import ProjectTaskBase, ProjectTaskCreate from models import Project from routers.auth import get_user_from_jwt router = APIRouter(prefix="/projects", tags=["projects"]) -@router.get("/", response_model=List[projects_schemas.ProjectBase], tags=["projects", "me"]) +@router.get("/", response_model=List[ProjectBase], tags=["projects", "me"]) def get_projects(db: db_dependency, request: Request): """Get a user's projects""" @@ -21,11 +22,11 @@ def get_projects(db: db_dependency, request: Request): user_id = getattr(user, "id") ## fetching projects for the user - projects = db.query(Project).join(Project.users).filter(getattr(users_schemas.UserBase, "id") == int(user_id)).all() + projects = db.query(Project).join(Project.users).filter(getattr(UserBase, "id") == int(user_id)).all() return projects -@router.get("/{project_id}", response_model=projects_schemas.ProjectBase) +@router.get("/{project_id}", response_model=ProjectBase) def get_project(project_id: int, request:Request, db: db_dependency): """Get a project by ID""" @@ -39,7 +40,7 @@ def get_project(project_id: int, request:Request, db: db_dependency): return db_project -@router.get("/{project_id}/users", response_model=List[users_schemas.UserBase], tags=["users", "projects"]) +@router.get("/{project_id}/users", response_model=List[UserBase], tags=["users", "projects"]) def get_project_users(project_id: int, request:Request, db: db_dependency): """Get users from a specified project""" @@ -53,7 +54,7 @@ def get_project_users(project_id: int, request:Request, db: db_dependency): return db_project.users -@router.get("/{project_id}/tasks/{task_id}", response_model=tasks_schemas.TaskBase, tags=["tasks"]) +@router.get("/{project_id}/tasks/{task_id}", response_model=TaskBase, tags=["tasks"]) def get_project_task(project_id: int, task_id: int, db: db_dependency, request: Request): """Get a specific task from a specified project""" user = get_user_from_jwt(request, db) @@ -64,12 +65,12 @@ def get_project_task(project_id: int, task_id: int, db: db_dependency, request: if user not in db_project.users: raise HTTPException(status_code=403, detail="Not authorized to access this project's tasks") - db_task = db.query(tasks_schemas.TaskBase).filter(getattr(tasks_schemas.TaskBase, "project_id") == project_id, getattr(tasks_schemas.TaskBase, "id") == task_id).first() + db_task = db.query(TaskBase).filter(getattr(TaskBase, "project_id") == project_id, getattr(TaskBase, "id") == task_id).first() if db_task is None: raise HTTPException(status_code=404, detail="Task not found in the specified project") return db_task -@router.get("/{project_id}/users/{user_id}", response_model=users_schemas.UserBase, tags=["users"]) +@router.get("/{project_id}/users/{user_id}", response_model=UserBase, tags=["users"]) def get_project_user(project_id: int, user_id: int, db: db_dependency, request: Request): """Get a specific user from a specified project""" user = get_user_from_jwt(request, db) @@ -80,31 +81,31 @@ def get_project_user(project_id: int, user_id: int, db: db_dependency, request: if user not in db_project.users: raise HTTPException(status_code=403, detail="Not authorized to access this project's users") - db_user = db.query(users_schemas.UserBase).filter(getattr(users_schemas.UserBase, "id") == user_id).first() + db_user = db.query(UserBase).filter(getattr(UserBase, "id") == user_id).first() if db_user is None or db_user not in db_project.users: raise HTTPException(status_code=404, detail="User not found in the specified project") return db_user -@router.get("/{project_id}/tasks", response_model=List[tasks_schemas.TaskBase], tags=["tasks", "projects"]) +@router.get("/{project_id}/tasks", response_model=List[TaskBase], tags=["tasks", "projects"]) def get_project_tasks(project_id: int, request:Request, db: db_dependency): """Get tasks from a specified project""" user = get_user_from_jwt(request, db) - db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first() + db_project = db.query(ProjectBase).filter(getattr(ProjectBase, "id") == project_id).first() if db_project is None: raise HTTPException(status_code=404, detail="Project not found") if user not in db_project.users: raise HTTPException(status_code=403, detail="Not authorized to access this project's tasks") - return db.query(tasks_schemas.TaskBase).filter(getattr(tasks_schemas.TaskBase, "project_id") == project_id).all() + return db.query(TaskBase).filter(getattr(TaskBase, "project_id") == project_id).all() -@router.post("/", response_model=projects_schemas.ProjectCreate) -def create_project(project: projects_schemas.ProjectCreate, request:Request, db: db_dependency): +@router.post("/", response_model=ProjectCreate) +def create_project(project: ProjectCreate, request:Request, db: db_dependency): """Create a new project""" user = get_user_from_jwt(request, db) - db_project = projects_schemas.ProjectCreate( + db_project = ProjectCreate( name=project.name, description=project.description, tasks=[], @@ -120,18 +121,18 @@ def create_project(project: projects_schemas.ProjectCreate, request:Request, db: return db_project -@router.post("/{project_id}/tasks", response_model=projects_tasks_schemas.ProjectTaskCreate, tags=["tasks"]) -def create_project_task(project_id: int, task: tasks_schemas.TaskCreate, db: db_dependency, request: Request): +@router.post("/{project_id}/tasks", response_model=ProjectTaskCreate, tags=["tasks"]) +def create_project_task(project_id: int, task: TaskCreate, db: db_dependency, request: Request): """Create a new task in a specified project""" user = get_user_from_jwt(request, db) - db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first() + db_project = db.query(ProjectBase).filter(getattr(ProjectBase, "id") == project_id).first() if db_project is None: raise HTTPException(status_code=404, detail="Project not found") if user not in db_project.users: raise HTTPException(status_code=403, detail="Not authorized to add tasks to this project") - db_task = projects_tasks_schemas.ProjectTaskCreate( + db_task = ProjectTaskCreate( title=task.title, description=task.description, status=task.status, @@ -143,37 +144,37 @@ def create_project_task(project_id: int, task: tasks_schemas.TaskCreate, db: db_ db.refresh(db_task) return db_task -@router.post("/{project_id}/users", response_model=projects_schemas.ProjectAddUsers, tags=["users"]) -def add_project_user(project_id: int, user_data: projects_schemas.ProjectAddUsers, db: db_dependency, request: Request): +@router.post("/{project_id}/users", response_model=ProjectAddUsers, tags=["users"]) +def add_project_user(project_id: int, user_data: ProjectAddUsers, db: db_dependency, request: Request): """Add users to a specified project using their IDs""" user = get_user_from_jwt(request, db) - db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first() + db_project = db.query(ProjectBase).filter(getattr(ProjectBase, "id") == project_id).first() if db_project is None: raise HTTPException(status_code=404, detail="Project not found") if user not in db_project.users: raise HTTPException(status_code=403, detail="Not authorized to modify this project's users") for user_id in user_data.user_ids: - db_user = db.query(users_schemas.UserBase).filter(getattr(users_schemas.UserBase, "id") == user_id).first() + db_user = db.query(UserBase).filter(getattr(UserBase, "id") == user_id).first() if db_user: db_project.users.append(db_user) db.commit() db.refresh(db_project) return db_project -@router.delete("/{project_id}/users/{user_id}", response_model=projects_schemas.ProjectRemoveUsers, tags=["users"]) +@router.delete("/{project_id}/users/{user_id}", response_model=ProjectRemoveUsers, tags=["users"]) def remove_user_from_project(project_id: int, user_id: int, db: db_dependency, request: Request): """Remove a user from a specified project using their ID""" user = get_user_from_jwt(request, db) - db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first() + db_project = db.query(ProjectBase).filter(getattr(ProjectBase, "id") == project_id).first() if db_project is None: raise HTTPException(status_code=404, detail="Project not found") if user not in db_project.users: raise HTTPException(status_code=403, detail="Not authorized to modify this project's users") - db_user = db.query(users_schemas.UserBase).filter(getattr(users_schemas.UserBase, "id") == user_id).first() + db_user = db.query(UserBase).filter(getattr(UserBase, "id") == user_id).first() if db_user is None or db_user not in db_project.users: raise HTTPException(status_code=404, detail="User not found in the specified project") @@ -182,18 +183,18 @@ def remove_user_from_project(project_id: int, user_id: int, db: db_dependency, r db.refresh(db_project) return db_project -@router.put("/{project_id}/tasks/{task_id}", response_model=tasks_schemas.TaskUpdate, tags=["tasks"]) -def update_project_task(project_id: int, task_id: int, task: tasks_schemas.TaskUpdate, db: db_dependency, request: Request): +@router.put("/{project_id}/tasks/{task_id}", response_model=TaskUpdate, tags=["tasks"]) +def update_project_task(project_id: int, task_id: int, task: TaskUpdate, db: db_dependency, request: Request): """Update a task in a specified project""" user = get_user_from_jwt(request, db) - db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first() + db_project = db.query(ProjectBase).filter(getattr(ProjectBase, "id") == project_id).first() if db_project is None: raise HTTPException(status_code=404, detail="Project not found") if user not in db_project.users: raise HTTPException(status_code=403, detail="Not authorized to access this project's tasks") - db_task = db.query(tasks_schemas.TaskBase).filter(getattr(tasks_schemas.TaskBase, "project_id") == project_id, getattr(tasks_schemas.TaskBase, "id") == task_id).first() + db_task = db.query(TaskBase).filter(getattr(TaskBase, "project_id") == project_id, getattr(TaskBase, "id") == task_id).first() if db_task is None: raise HTTPException(status_code=404, detail="Task not found in the specified project") if task.title is not None: @@ -206,12 +207,12 @@ def update_project_task(project_id: int, task_id: int, task: tasks_schemas.TaskU db.refresh(db_task) return db_task -@router.put("/{project_id}", response_model=projects_schemas.ProjectUpdate) -def update_project(project_id: int, project: projects_schemas.ProjectUpdate, db: db_dependency, request: Request): +@router.put("/{project_id}", response_model=ProjectUpdate) +def update_project(project_id: int, project: ProjectUpdate, db: db_dependency, request: Request): """Update a project by ID""" user = get_user_from_jwt(request, db) - db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first() + db_project = db.query(ProjectBase).filter(getattr(ProjectBase, "id") == project_id).first() if db_project is None: raise HTTPException(status_code=404, detail="Project not found") if user not in db_project.users: @@ -229,7 +230,7 @@ def delete_project(project_id: int, db: db_dependency, request: Request): """Delete a project by ID""" user = get_user_from_jwt(request, db) - db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first() + db_project = db.query(ProjectBase).filter(getattr(ProjectBase, "id") == project_id).first() if db_project is None: raise HTTPException(status_code=404, detail="Project not found") if user not in db_project.users: @@ -244,13 +245,13 @@ def delete_project_task(project_id: int, task_id: int, db: db_dependency, reques """Delete a task from a specified project""" user = get_user_from_jwt(request, db) - db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first() + db_project = db.query(ProjectBase).filter(getattr(ProjectBase, "id") == project_id).first() if db_project is None: raise HTTPException(status_code=404, detail="Project not found") if user not in db_project.users: raise HTTPException(status_code=403, detail="Not authorized to access this project's tasks") - db_task = db.query(tasks_schemas.TaskBase).filter(getattr(tasks_schemas.TaskBase, "project_id") == project_id, getattr(tasks_schemas.TaskBase, "id") == task_id).first() + db_task = db.query(TaskBase).filter(getattr(TaskBase, "project_id") == project_id, getattr(TaskBase, "id") == task_id).first() if db_task is None: raise HTTPException(status_code=404, detail="Task not found in the specified project") db.delete(db_task)