Fix notification validation to handle enum objects

Root cause: The validation in NotificationBaseRepository._validate_notification_data
was checking enum objects against string lists, causing validation to fail when the
EnhancedNotificationService passed NotificationType/NotificationPriority/NotificationStatus
enum objects instead of their string values.

The validation now properly handles both enum objects (by extracting their .value)
and string values, fixing the "Invalid notification type" error from orchestrator.

Changes:
- Updated priority validation to handle enum objects
- Updated notification type validation to handle enum objects
- Updated status validation to handle enum objects

Fixes the error:
"Invalid notification data: ['Invalid notification type. Must be one of: ['email', 'whatsapp', 'push', 'sms']']"
This commit is contained in:
Claude
2025-11-05 21:57:30 +00:00
parent 3ad093d38b
commit 0bfaa014cb

View File

@@ -237,20 +237,26 @@ class NotificationBaseRepository(BaseRepository):
# Validate priority if present
if "priority" in data and data["priority"]:
from enum import Enum
priority_value = data["priority"].value if isinstance(data["priority"], Enum) else data["priority"]
valid_priorities = ["low", "normal", "high", "urgent"]
if data["priority"] not in valid_priorities:
if priority_value not in valid_priorities:
errors.append(f"Invalid priority. Must be one of: {valid_priorities}")
# Validate notification type if present
if "type" in data and data["type"]:
from enum import Enum
type_value = data["type"].value if isinstance(data["type"], Enum) else data["type"]
valid_types = ["email", "whatsapp", "push", "sms"]
if data["type"] not in valid_types:
if type_value not in valid_types:
errors.append(f"Invalid notification type. Must be one of: {valid_types}")
# Validate status if present
if "status" in data and data["status"]:
from enum import Enum
status_value = data["status"].value if isinstance(data["status"], Enum) else data["status"]
valid_statuses = ["pending", "sent", "delivered", "failed", "cancelled"]
if data["status"] not in valid_statuses:
if status_value not in valid_statuses:
errors.append(f"Invalid status. Must be one of: {valid_statuses}")
return {