test_task_crm/app/repositories/user_repo.py

44 lines
1.3 KiB
Python

"""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