language-learning-app/api/app/routers/bff/user_profile.py

43 lines
1.2 KiB
Python

import uuid
from fastapi import APIRouter, Depends
from pydantic import BaseModel
from sqlalchemy.ext.asyncio import AsyncSession
from ...auth import verify_token
from ...outbound.postgres.database import get_db
from ...outbound.postgres.repositories import learnable_language_repository
router = APIRouter(prefix="/user_profile", tags=["bff"])
class LearnableLanguageItem(BaseModel):
id: str
source_language: str
target_language: str
proficiencies: list[str]
class UserProfileResponse(BaseModel):
learnable_languages: list[LearnableLanguageItem]
@router.get("", response_model=UserProfileResponse, status_code=200)
async def get_user_profile(
db: AsyncSession = Depends(get_db),
token_data: dict = Depends(verify_token),
) -> UserProfileResponse:
languages = await learnable_language_repository.list_for_user(
db, user_id=uuid.UUID(token_data["sub"])
)
return UserProfileResponse(
learnable_languages=[
LearnableLanguageItem(
id=lang.id,
source_language=lang.source_language,
target_language=lang.target_language,
proficiencies=lang.proficiencies,
)
for lang in languages
]
)