feat(phase-18): add in-app notification system (T-128, T-129)

This commit is contained in:
2026-02-09 13:52:04 +01:00
parent cda59de426
commit fb7f340038
16 changed files with 7577 additions and 2 deletions

View File

@@ -20,6 +20,7 @@ from app.models.enums import TestState
from app.models.test import Test
from app.models.user import User
from app.services.audit_service import log_action
from app.services.notification_service import notify_test_state_change
# ---------------------------------------------------------------------------
# Valid transition map
@@ -91,6 +92,12 @@ def transition_state(
details=details,
)
# Dispatch in-app notifications for the new state
try:
notify_test_state_change(db, test, target_state.value)
except Exception:
pass # Notifications are best-effort — don't block the workflow
return test
@@ -250,9 +257,17 @@ def check_dual_validation(db: Session, test: Test) -> Test:
if red_status == "rejected" or blue_status == "rejected":
test.state = TestState.rejected
db.commit()
try:
notify_test_state_change(db, test, "rejected")
except Exception:
pass
elif red_status == "approved" and blue_status == "approved":
test.state = TestState.validated
db.commit()
try:
notify_test_state_change(db, test, "validated")
except Exception:
pass
else:
# One side hasn't voted yet — stay in_review, just flush
db.commit()