fix(): project refactoring and minor fixes

This commit is contained in:
ITQ
2026-02-24 07:56:17 +03:00
parent 41ba6e6714
commit c5ea0b7d5d
7 changed files with 90 additions and 37 deletions
+20 -16
View File
@@ -22,6 +22,7 @@ from apps.events.selectors import (
pending_event_exists,
pending_events_for_decision,
)
from config.errors import ConflictError
PENDING_TTL_DAYS = 7
@@ -124,23 +125,22 @@ def _process_exposure_event(
) -> None:
decision_id = event_data["decision_id"]
subject_id = event_data["subject_id"]
timestamp = parse_datetime(event_data["timestamp"]) or timezone.now()
timestamp = parse_datetime(event_data["timestamp"])
if timestamp is None:
raise ValidationError(
"Field 'timestamp' must be a valid ISO 8601 datetime."
)
decision = decision_get(decision_id)
experiment_id = None
variant_id = None
if decision:
experiment_id = decision.experiment_id
variant_id = decision.variant_id
with suppress(IntegrityError):
Exposure.objects.create(
decision_id=decision_id,
experiment_id=experiment_id,
variant_id=variant_id,
subject_id=subject_id,
timestamp=timestamp,
)
with suppress(ConflictError):
Exposure.objects.create(
decision_id=decision_id,
experiment_id=decision.experiment_id,
variant_id=decision.variant_id,
subject_id=subject_id,
timestamp=timestamp,
)
Event.objects.create(
event_id=event_data["event_id"],
@@ -158,7 +158,7 @@ def _process_exposure_event(
def _promote_pending_events(decision_id: str) -> None:
pending = pending_events_for_decision(decision_id)
for pe in pending:
with suppress(IntegrityError):
with suppress(ConflictError):
Event.objects.create(
event_id=pe.event_id,
event_type=pe.event_type,
@@ -178,7 +178,11 @@ def _process_conversion_event(
) -> None:
decision_id = event_data["decision_id"]
subject_id = event_data["subject_id"]
timestamp = parse_datetime(event_data["timestamp"]) or timezone.now()
timestamp = parse_datetime(event_data["timestamp"])
if timestamp is None:
raise ValidationError(
"Field 'timestamp' must be a valid ISO 8601 datetime."
)
properties = event_data.get("properties", {})
if not event_type_obj.requires_exposure or exposure_exists(decision_id):