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:
@@ -237,20 +237,26 @@ class NotificationBaseRepository(BaseRepository):
|
|||||||
|
|
||||||
# Validate priority if present
|
# Validate priority if present
|
||||||
if "priority" in data and data["priority"]:
|
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"]
|
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}")
|
errors.append(f"Invalid priority. Must be one of: {valid_priorities}")
|
||||||
|
|
||||||
# Validate notification type if present
|
# Validate notification type if present
|
||||||
if "type" in data and data["type"]:
|
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"]
|
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}")
|
errors.append(f"Invalid notification type. Must be one of: {valid_types}")
|
||||||
|
|
||||||
# Validate status if present
|
# Validate status if present
|
||||||
if "status" in data and data["status"]:
|
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"]
|
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}")
|
errors.append(f"Invalid status. Must be one of: {valid_statuses}")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user