"""User repository interface for abstracting database operations.""" from abc import ABC, abstractmethod from app.gateway.auth.models import User class UserRepository(ABC): """Abstract interface for user data storage. Implement this interface to support different storage backends (SQLite) """ @abstractmethod async def create_user(self, user: User) -> User: """Create a new user. Args: user: User object to create Returns: Created User with ID assigned Raises: ValueError: If email already exists """ ... @abstractmethod async def get_user_by_id(self, user_id: str) -> User | None: """Get user by ID. Args: user_id: User UUID as string Returns: User if found, None otherwise """ ... @abstractmethod async def get_user_by_email(self, email: str) -> User | None: """Get user by email. Args: email: User email address Returns: User if found, None otherwise """ ... @abstractmethod async def update_user(self, user: User) -> User: """Update an existing user. Args: user: User object with updated fields Returns: Updated User """ ... @abstractmethod async def count_users(self) -> int: """Return total number of registered users.""" ... @abstractmethod async def get_user_by_oauth(self, provider: str, oauth_id: str) -> User | None: """Get user by OAuth provider and ID. Args: provider: OAuth provider name (e.g. 'github', 'google') oauth_id: User ID from the OAuth provider Returns: User if found, None otherwise """ ...