Spaces:
Paused
Paused
| 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) | |
| 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)}" | |
| ) | |