from typing import List, Optional
from sqlmodel import select
from tasteful.repositories import SQLModelRepository
class UserRepository(SQLModelRepository):
def __init__(self, database_url: str):
super().__init__(database_url=database_url, echo=False)
def get_by_id(self, user_id: int) -> Optional[User]:
"""Get a user by ID."""
with self.get_session() as session:
return session.get(User, user_id)
def get_by_email(self, email: str) -> Optional[User]:
"""Get a user by email address."""
with self.get_session() as session:
statement = select(User).where(User.email == email)
return session.exec(statement).first()
def get_all(self, skip: int = 0, limit: int = 100) -> List[User]:
"""Get all users with pagination."""
with self.get_session() as session:
statement = select(User).offset(skip).limit(limit)
return list(session.exec(statement).all())
def create(self, user_data: dict) -> User:
"""Create a new user."""
with self.get_session() as session:
user = User(**user_data)
session.add(user)
session.commit()
session.refresh(user)
return user
def update(self, user_id: int, user_data: dict) -> Optional[User]:
"""Update an existing user."""
with self.get_session() as session:
user = session.get(User, user_id)
if not user:
return None
for key, value in user_data.items():
setattr(user, key, value)
session.add(user)
session.commit()
session.refresh(user)
return user
def delete(self, user_id: int) -> bool:
"""Delete a user by ID."""
with self.get_session() as session:
user = session.get(User, user_id)
if not user:
return False
session.delete(user)
session.commit()
return True