From 5e63fe5bd759a12646292bcf869dff352be40e03 Mon Sep 17 00:00:00 2001 From: Backend IM Bot Date: Tue, 11 Mar 2025 09:21:09 +0000 Subject: [PATCH] feat: Update endpoint project --- app/api/endpoints/project.py | 85 ++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/app/api/endpoints/project.py b/app/api/endpoints/project.py index e69de29..87368e9 100644 --- a/app/api/endpoints/project.py +++ b/app/api/endpoints/project.py @@ -0,0 +1,85 @@ +from typing import Optional +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.orm import Session +from models import Project +from schemas import ProjectCreate, ProjectUpdate +from dependencies import get_db + +router = APIRouter() + +@router.post("/projects", response_model=Project) +async def create_project( + project: ProjectCreate, + db: Session = Depends(get_db), + current_user: Optional[User] = Depends(get_current_user), +): + """ + Create a new project. + """ + new_project = Project(**project.dict(), owner_id=current_user.id) + db.add(new_project) + db.commit() + db.refresh(new_project) + return new_project + +@router.get("/projects", response_model=List[Project]) +async def get_projects( + db: Session = Depends(get_db), + current_user: Optional[User] = Depends(get_current_user), +): + """ + Get all projects for the current user. + """ + projects = db.query(Project).filter(Project.owner_id == current_user.id).all() + return projects + +@router.get("/projects/{project_id}", response_model=Project) +async def get_project( + project_id: int, + db: Session = Depends(get_db), + current_user: Optional[User] = Depends(get_current_user), +): + """ + Get a specific project by ID. + """ + project = db.query(Project).filter(Project.id == project_id, Project.owner_id == current_user.id).first() + if not project: + raise HTTPException(status_code=404, detail="Project not found") + return project + +@router.put("/projects/{project_id}", response_model=Project) +async def update_project( + project_id: int, + project: ProjectUpdate, + db: Session = Depends(get_db), + current_user: Optional[User] = Depends(get_current_user), +): + """ + Update a project by ID. + """ + db_project = db.query(Project).filter(Project.id == project_id, Project.owner_id == current_user.id).first() + if not db_project: + raise HTTPException(status_code=404, detail="Project not found") + update_data = project.dict(exclude_unset=True) + for key, value in update_data.items(): + setattr(db_project, key, value) + db.add(db_project) + db.commit() + db.refresh(db_project) + return db_project + +@router.delete("/projects/{project_id}", response_model=Project) +async def delete_project( + project_id: int, + db: Session = Depends(get_db), + current_user: Optional[User] = Depends(get_current_user), +): + """ + Delete a project by ID. + """ + project = db.query(Project).filter(Project.id == project_id, Project.owner_id == current_user.id).first() + if not project: + raise HTTPException(status_code=404, detail="Project not found") + db.delete(project) + db.commit() + return project \ No newline at end of file