"""User repository handling database operations.""" from __future__ import annotations from collections.abc import Sequence from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models.user import User, UserCreate class UserRepository: """Provides CRUD helpers for User model.""" def __init__(self, session: AsyncSession) -> None: self._session = session @property def session(self) -> AsyncSession: return self._session async def list(self) -> Sequence[User]: result = await self._session.scalars(select(User)) return result.all() async def get_by_id(self, user_id: int) -> User | None: return await self._session.get(User, user_id) async def get_by_email(self, email: str) -> User | None: stmt = select(User).where(User.email == email) result = await self._session.scalars(stmt) return result.first() async def create(self, data: UserCreate, hashed_password: str) -> User: user = User( email=data.email, hashed_password=hashed_password, full_name=data.full_name, is_active=data.is_active, ) self._session.add(user) await self._session.flush() return user