from fastapi import APIRouter, Depends, HTTPException, status from app.db.supabase import supabase from app.schemas.project import Project, ProjectCreate from app.dependencies.admin_auth import admin_auth router = APIRouter() @router.get("", response_model=list[Project]) def list_projects(): res = supabase.table("projects").select("*").order("created_at", desc=True).execute() return res.data @router.get("/{project_id}", response_model=Project) def get_project(project_id: str): res = supabase.table("projects").select("*").eq("id", project_id).execute() if not res.data: raise HTTPException(status_code=404, detail="Project not found") return res.data[0] @router.post("", dependencies=[Depends(admin_auth)], response_model=Project) def create_project(project: ProjectCreate): res = supabase.table("projects").insert(project.model_dump()).execute() if not res.data: raise HTTPException(status_code=400, detail="Failed to create project") return res.data[0] @router.put("/{project_id}", dependencies=[Depends(admin_auth)], response_model=Project) def update_project(project_id: str, project: ProjectCreate): res = supabase.table("projects").update(project.model_dump()).eq("id", project_id).execute() if not res.data: raise HTTPException(status_code=404, detail="Project not found or update failed") return res.data[0] @router.delete("/{project_id}", dependencies=[Depends(admin_auth)]) def delete_project(project_id: str): res = supabase.table("projects").delete().eq("id", project_id).execute() if not res.data: raise HTTPException(status_code=404, detail="Project not found or delete failed") return {"detail": "Project deleted successfully"}