website-backend / app /api /v1 /events.py
khagu's picture
fix: standardize routing and remove trailing slashes for better compatibility
4a3c2fc
from fastapi import APIRouter, Depends, HTTPException
from app.db.supabase import supabase
from app.schemas.event import Event, EventCreate
from app.dependencies.admin_auth import admin_auth
router = APIRouter()
@router.get("", response_model=list[Event])
def list_events():
res = supabase.table("events").select("*").order("date", desc=True).execute()
return res.data
@router.get("/{event_id}", response_model=Event)
def get_event(event_id: int):
res = supabase.table("events").select("*").eq("id", event_id).execute()
if not res.data:
raise HTTPException(status_code=404, detail="Event not found")
return res.data[0]
@router.post("", dependencies=[Depends(admin_auth)], response_model=Event)
def create_event(event: EventCreate):
data = event.model_dump()
data['date'] = data['date'].isoformat()
res = supabase.table("events").insert(data).execute()
if not res.data:
raise HTTPException(status_code=400, detail="Failed to create event")
return res.data[0]
@router.put("/{event_id}", dependencies=[Depends(admin_auth)], response_model=Event)
def update_event(event_id: int, event: EventCreate):
data = event.model_dump()
data['date'] = data['date'].isoformat()
res = supabase.table("events").update(data).eq("id", event_id).execute()
if not res.data:
raise HTTPException(status_code=404, detail="Event not found or update failed")
return res.data[0]
@router.delete("/{event_id}", dependencies=[Depends(admin_auth)])
def delete_event(event_id: int):
res = supabase.table("events").delete().eq("id", event_id).execute()
if not res.data:
raise HTTPException(status_code=404, detail="Event not found or delete failed")
return {"detail": "Event deleted successfully"}