aigenrec/luminabackend
0
1from fastapi import APIRouter, HTTPException, Depends, status2from services.project_service import project_service3from models.schemas import ProjectCreate, ProjectResponse4from typing import List, Any5from api.deps import get_current_user6 7router = APIRouter()8 9@router.post("/", response_model=ProjectResponse)10async def create_project(11 project_in: ProjectCreate,12 current_user: dict = Depends(get_current_user)13):14 """15 Create a new project.16 """17 try:18 project = await project_service.create_project(user_id=current_user["id"], name=project_in.name)19 return project20 except Exception as e:21 raise HTTPException(status_code=500, detail=str(e))22 23@router.get("/", response_model=List[Any]) 24async def get_projects(25 current_user: dict = Depends(get_current_user)26):27 """28 Get all projects for the current user.29 """30 try:31 projects = await project_service.get_projects(user_id=current_user["id"])32 return projects33 except Exception as e:34 raise HTTPException(status_code=500, detail=str(e))35 36@router.get("/{project_id}", response_model=ProjectResponse)37async def get_project(38 project_id: str,39 current_user: dict = Depends(get_current_user)40):41 """42 Get project details.43 """44 try:45 project = await project_service.get_project(project_id)46 if not project:47 raise HTTPException(status_code=404, detail="Project not found")48 49 # Authorization Check: Ensure project belongs to user50 if project["user_id"] != current_user["id"]:51 raise HTTPException(status_code=403, detail="Not authorized to access this project")52 53 return project54 except HTTPException as he:55 raise he56 except Exception as e:57 raise HTTPException(status_code=500, detail=str(e))58 59@router.delete("/{project_id}", status_code=status.HTTP_204_NO_CONTENT)60async def delete_project(61 project_id: str,62 current_user: dict = Depends(get_current_user)63):64 """65 Delete a project.66 """67 try:68 project = await project_service.get_project(project_id)69 if not project:70 raise HTTPException(status_code=404, detail="Project not found")71 72 if project["user_id"] != current_user["id"]:73 raise HTTPException(status_code=403, detail="Not authorized to delete this project")74 75 success = await project_service.delete_project(project_id)76 if not success:77 raise HTTPException(status_code=500, detail="Failed to delete project")78 79 except HTTPException as he:80 raise he81 except Exception as e:82 raise HTTPException(status_code=500, detail=str(e))