chore(): added async decision persistence

This commit is contained in:
ITQ
2026-02-24 17:55:14 +03:00
parent 740fd2d7bd
commit cda60bb057
8 changed files with 515 additions and 108 deletions
+37 -1
View File
@@ -1,7 +1,11 @@
import logging
from apps.events.services import cleanup_expired_pending_events
from apps.events.services import (
cleanup_expired_pending_events,
decision_create,
)
from config.celery import app
from config.errors import ConflictError
logger = logging.getLogger("lotty")
@@ -14,3 +18,35 @@ def cleanup_expired_pending_events_task(self):
extra={"deleted": deleted},
)
return deleted
@app.task(bind=True, name="events.persist_decision")
def persist_decision_task(
self,
*,
decision_id: str,
flag_key: str,
subject_id: str,
experiment_id: str | None = None,
variant_id: str | None = None,
value: str,
reason: str,
):
try:
decision_create(
decision_id=decision_id,
flag_key=flag_key,
subject_id=subject_id,
experiment_id=experiment_id,
variant_id=variant_id,
value=value,
reason=reason,
)
except ConflictError:
logger.info(
"decision_persist_skipped_conflict",
extra={"decision_id": decision_id},
)
return {"status": "conflict", "decision_id": decision_id}
return {"status": "created", "decision_id": decision_id}