44 lines
1.2 KiB
Python
44 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
|
||
|
|
]
|
||
|
|
)
|