arbret/backend/repositories/user.py

65 lines
1.8 KiB
Python
Raw Permalink Normal View History

2025-12-25 00:59:57 +01:00
"""User repository for database queries."""
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from models import User
class UserRepository:
"""Repository for user-related database queries."""
def __init__(self, db: AsyncSession):
self.db = db
async def get_by_email(self, email: str) -> User | None:
"""Get a user by email."""
result = await self.db.execute(select(User).where(User.email == email))
return result.scalar_one_or_none()
async def get_by_id(self, user_id: int) -> User | None:
"""Get a user by ID."""
result = await self.db.execute(select(User).where(User.id == user_id))
return result.scalar_one_or_none()
async def get_godfather_email(self, godfather_id: int | None) -> str | None:
"""Get the email of a godfather user by ID."""
if not godfather_id:
return None
result = await self.db.execute(
select(User.email).where(User.id == godfather_id)
)
return result.scalar_one_or_none()
async def create(self, user: User) -> User:
"""
Create a new user record.
Args:
user: User instance to persist
Returns:
Created User record (flushed to get ID)
"""
self.db.add(user)
await self.db.flush()
return user
async def update(self, user: User) -> User:
"""
Update an existing user record.
Args:
user: User instance to update
Returns:
Updated User record (refreshed from database)
"""
await self.db.commit()
await self.db.refresh(user)
return user
async def refresh(self, user: User) -> None:
"""Refresh a user instance from the database."""
await self.db.refresh(user)