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