import sentry_sdk from Craft.module.logging import Logger from Craft.model.merge import MergeOutput, MergeInput from Craft.module.ml import Engine from Craft.database.redis.caching import RedisCaching from Craft.database.sqlite.data import SqliteDatabase class MergeController: def __init__(self): self.logger = Logger() self.engine = Engine() self.redis_caching = RedisCaching() self.sqlite_database = SqliteDatabase() async def merge(self, model: MergeInput) -> MergeOutput: try: cached = await self.redis_caching.cache_get(model.first_word, model.second_word) if cached: return MergeOutput(status=1, response=cached) data = await self.engine.generate(model.first_word, model.second_word) await self.redis_caching.cache_set(model.first_word, model.second_word, data) await self.sqlite_database.sets(model.first_word, model.second_word, data.emoji, data.word) return MergeOutput(status=1, response={"emoji": data.emoji, "word": data.word}) except Exception as e: self._log_and_capture_exception(e, "Error in Merge Controller") return MergeOutput(status=-1, error=str(e)) async def increasevalue_backgroundtasks(self, first_word: str, second_word: str) -> None: try: await self.sqlite_database.update(first_word, second_word) except Exception as e: self._log_and_capture_exception(e, "Error in Increase Value BackgroundTasks") raise def _log_and_capture_exception(self, exception: Exception, message: str) -> None: self.logger.error(f"{message}: {exception}") sentry_sdk.capture_exception(exception)