"""Repository for bots table operations.""" from typing import Dict, Any, Optional from ..models import Bot from .base_repository import BaseRepository, DatabaseOperationError class BotRepository(BaseRepository): """Repository for bots table operations.""" def add(self, bot_data: Dict[str, Any]) -> Bot: """Add a new bot to the database.""" try: with self.get_session() as session: new_bot = Bot(**bot_data) session.add(new_bot) session.commit() session.refresh(new_bot) self.log_info(f"Added new bot: {new_bot.name}") return new_bot except Exception as e: self.log_error(f"Error adding bot: {e}") raise DatabaseOperationError(f"Failed to add bot: {e}") def get_by_id(self, bot_id: int) -> Optional[Bot]: """Get a bot by its ID.""" try: with self.get_session() as session: return session.query(Bot).filter(Bot.id == bot_id).first() except Exception as e: self.log_error(f"Error getting bot by ID {bot_id}: {e}") raise DatabaseOperationError(f"Failed to get bot by ID: {e}") def get_by_name(self, name: str) -> Optional[Bot]: """Get a bot by its name.""" try: with self.get_session() as session: return session.query(Bot).filter(Bot.name == name).first() except Exception as e: self.log_error(f"Error getting bot by name {name}: {e}") raise DatabaseOperationError(f"Failed to get bot by name: {e}") def update(self, bot_id: int, update_data: Dict[str, Any]) -> Optional[Bot]: """Update a bot's information.""" try: with self.get_session() as session: bot = session.query(Bot).filter(Bot.id == bot_id).first() if bot: for key, value in update_data.items(): setattr(bot, key, value) session.commit() session.refresh(bot) self.log_info(f"Updated bot {bot_id}") return bot return None except Exception as e: self.log_error(f"Error updating bot {bot_id}: {e}") raise DatabaseOperationError(f"Failed to update bot: {e}") def delete(self, bot_id: int) -> bool: """Delete a bot by its ID.""" try: with self.get_session() as session: bot = session.query(Bot).filter(Bot.id == bot_id).first() if bot: session.delete(bot) session.commit() self.log_info(f"Deleted bot {bot_id}") return True return False except Exception as e: self.log_error(f"Error deleting bot {bot_id}: {e}") raise DatabaseOperationError(f"Failed to delete bot: {e}")