from fastapi import APIRouter, HTTPException, Depends from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.future import select from sqlalchemy.orm import sessionmaker from sqlalchemy import desc from app.database import engine from app.models import VideoUpload, User from app.auth import get_current_user router = APIRouter() # Create async DB session async_session = sessionmaker(engine, expire_on_commit=False, class_=AsyncSession) @router.get("/dashboard") async def get_user_dashboard(current_user: User = Depends(get_current_user)): try: async with async_session() as session: query = ( select(VideoUpload) .where(VideoUpload.user_id == current_user.id) .order_by(desc(VideoUpload.created_at)) ) result = await session.execute(query) uploads = result.scalars().all() # Get user details user_query = select(User).where(User.id == current_user.id) user_result = await session.execute(user_query) user = user_result.scalars().first() if not user: raise HTTPException(status_code=404, detail="User not found") # Convert SQLAlchemy objects to dicts for response return { "user": { "id": user.id, "email": user.email, "mobile": user.mobile, "name": user.name, "dob": user.dob, "preparing_for": user.preparing_for, }, "uploads": [ { "id": upload.id, "video_url": upload.video_url, "pdf_url": upload.pdf_url, "status": upload.status, "created_at": upload.created_at, } for upload in uploads ], } except Exception as e: raise HTTPException( status_code=500, detail=f"Error fetching dashboard data: {str(e)}" )