Spaces:
Building
Building
File size: 2,142 Bytes
c62c5a1 6d01d5b 3f8cf16 c62c5a1 6d01d5b c62c5a1 6d01d5b c62c5a1 6d01d5b 3f8cf16 c62c5a1 3f8cf16 6d01d5b 3f8cf16 6d01d5b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
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)}"
)
|