from fastapi import APIRouter, HTTPException 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 router = APIRouter() # Create async DB session async_session = sessionmaker(engine, expire_on_commit=False, class_=AsyncSession) @router.get("/dashboard/{user_id}") async def get_user_dashboard(user_id: int): try: async with async_session() as session: query = ( select(VideoUpload) .where(VideoUpload.user_id == 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 == 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)}" )