Source code for command_line_assistant.daemon.database.repository.chat

"""Module to hold the chat repository."""

from sqlalchemy import asc, select

from command_line_assistant.daemon.database.manager import DatabaseManager
from command_line_assistant.daemon.database.models.chat import ChatModel
from command_line_assistant.daemon.database.repository.base import BaseRepository


[docs] class ChatRepository(BaseRepository): """Class that implements the chat repository methods.""" def __init__(self, manager: DatabaseManager, model: type[ChatModel] = ChatModel): """Default constructor for chat repository. Arguments: manager (DatabaseManager): The database manager instance. model (ChatModel): The SQLAlchemy model to use in the repository. """ super().__init__(manager=manager, model=model)
[docs] def select_latest_chat(self, user_id: str) -> ChatModel: """Select the latest chat for a given user Arguments: user_id (str): The user's identifier Returns: ChatModel: The chat entry """ statement = ( select(self._model) .where(self._model.user_id == user_id) .filter(self._model.deleted_at.is_(None)) .order_by(asc(self._model.created_at)) ) with self._manager.session() as session: return session.execute(statement=statement).scalars().first() # type: ignore