39 lines
1.7 KiB
Python
39 lines
1.7 KiB
Python
|
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)
|