dubswayAgenticV2 / app /dashboard.py
peace2024's picture
dashboard update
c62c5a1
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)}"
)