from fastapi import APIRouter, Depends, HTTPException from app.db.supabase import supabase from app.schemas.blog import Blog, BlogCreate from app.dependencies.admin_auth import admin_auth router = APIRouter() @router.get("", response_model=list[Blog]) def list_blogs(): res = supabase.table("blogs").select("*").order("published_date", desc=True).execute() return res.data @router.get("/{blog_id}", response_model=Blog) def get_blog(blog_id: int): res = supabase.table("blogs").select("*").eq("id", blog_id).execute() if not res.data: raise HTTPException(status_code=404, detail="Blog not found") return res.data[0] @router.post("", dependencies=[Depends(admin_auth)], response_model=Blog) def create_blog(blog: BlogCreate): data = blog.model_dump() data['published_date'] = data['published_date'].isoformat() # convert date to string res = supabase.table("blogs").insert(data).execute() if not res.data: raise HTTPException(status_code=400, detail="Failed to create blog") return res.data[0] @router.put("/{blog_id}", dependencies=[Depends(admin_auth)], response_model=Blog) def update_blog(blog_id: int, blog: BlogCreate): data = blog.model_dump() data['published_date'] = data['published_date'].isoformat() res = supabase.table("blogs").update(data).eq("id", blog_id).execute() if not res.data: raise HTTPException(status_code=404, detail="Blog not found or update failed") return res.data[0] @router.delete("/{blog_id}", dependencies=[Depends(admin_auth)]) def delete_blog(blog_id: int): res = supabase.table("blogs").delete().eq("id", blog_id).execute() if not res.data: raise HTTPException(status_code=404, detail="Blog not found or delete failed") return {"detail": "Blog deleted successfully"}