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)}"
        )