| from __future__ import annotations | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from app.db.models import User | |
| from app.schemas.user import UserCreate, UserRead | |
| async def get_or_create_user(session: AsyncSession, telegram_id: int) -> UserRead: | |
| """Return UserRead by telegram_id, creating a row with defaults if absent.""" | |
| user = await session.get(User, telegram_id) | |
| if user is None: | |
| payload = UserCreate(telegram_id=telegram_id) | |
| user = User( | |
| id=payload.telegram_id, | |
| level=payload.level, | |
| voice_name=payload.voice_name, | |
| topic=payload.topic, | |
| speech_rate=payload.speech_rate, | |
| ) | |
| session.add(user) | |
| await session.commit() | |
| await session.refresh(user) | |
| return UserRead.model_validate(user) | |