Files

36 lines
1.0 KiB
Django/Jinja

from sqlmodel import select
from sqlmodel.ext.asyncio.session import AsyncSession
from utils.db.models import User
class UserRepository:
def __init__(self, session: AsyncSession) -> None:
self._session = session
async def get(self, user_id: int) -> User | None:
return await self._session.get(User, user_id)
async def by_tg_id(self, tg_id: int) -> User | None:
stmt = select(User).where(User.tg_id == tg_id)
return (await self._session.exec(stmt)).first()
async def upsert(
self,
tg_id: int,
*,
username: str | None = None,
first_name: str | None = None,
last_name: str | None = None,
) -> User:
user = await self.by_tg_id(tg_id)
if user is None:
user = User(tg_id=tg_id)
user.username = username
user.first_name = first_name
user.last_name = last_name
self._session.add(user)
await self._session.commit()
await self._session.refresh(user)
return user