File size: 1,742 Bytes
9215c5e
 
 
 
 
9adf4ea
9215c5e
f65bb7f
9215c5e
 
 
 
 
 
 
 
 
 
 
4a3c2fc
9215c5e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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"}