feat(transcription): add Supabase schema and API endpoints for CIS
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
"""Canvas events router — batch write and query canvas event logs."""
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from typing import List, Optional
|
||||
from datetime import datetime
|
||||
|
||||
from modules.auth.supabase_bearer import SupabaseBearer
|
||||
from modules.transcription.models import CanvasEventCreate, CanvasEventResponse
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
def get_supabase_client():
|
||||
"""Get Supabase service role client."""
|
||||
from modules.database.supabase.utils.client import SupabaseServiceRoleClient
|
||||
return SupabaseServiceRoleClient()
|
||||
|
||||
|
||||
def get_user_id(credentials=Depends(SupabaseBearer())) -> str:
|
||||
"""Extract user_id from Supabase JWT token."""
|
||||
return credentials.get("sub", credentials.get("user_id", ""))
|
||||
|
||||
|
||||
@router.post("/canvas-events")
|
||||
async def batch_write_canvas_events(
|
||||
events: List[CanvasEventCreate],
|
||||
user_id: str = Depends(get_user_id),
|
||||
):
|
||||
"""Batch write canvas events."""
|
||||
supabase = get_supabase_client()
|
||||
|
||||
# Filter events to only this user's
|
||||
user_events = [e for e in events if e.user_id == user_id]
|
||||
|
||||
if not user_events:
|
||||
return {"message": "No events to write", "count": 0}
|
||||
|
||||
event_data = [e.model_dump() for e in user_events]
|
||||
|
||||
result = supabase.supabase.table("canvas_events").insert(event_data).execute()
|
||||
|
||||
return {"message": f"Wrote {len(event_data)} events", "count": len(event_data)}
|
||||
|
||||
|
||||
@router.get("/canvas-events", response_model=List[CanvasEventResponse])
|
||||
async def get_canvas_events(
|
||||
session_id: Optional[str] = Query(None),
|
||||
user_id: str = Depends(get_user_id),
|
||||
limit: int = Query(100, ge=1, le=1000),
|
||||
):
|
||||
"""Get canvas events for a session or user."""
|
||||
supabase = get_supabase_client()
|
||||
|
||||
query = supabase.supabase.table("canvas_events").select("*").eq("user_id", user_id)
|
||||
|
||||
if session_id:
|
||||
query = query.eq("session_id", session_id)
|
||||
|
||||
query = query.order("timestamp", desc=True).limit(limit)
|
||||
|
||||
result = query.execute()
|
||||
|
||||
return result.data
|
||||
Reference in New Issue
Block a user