Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/app/services/workflow/trigger_registry.py
2026-05-12 19:13:27 +03:30

167 lines
6.6 KiB
Python
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
ثبت و مدیریت Trigger Handlers
"""
from abc import ABC, abstractmethod
from typing import Any, Dict, Optional
import logging
logger = logging.getLogger(__name__)
class TriggerHandler(ABC):
"""Base class برای trigger handlers"""
@abstractmethod
def execute(self, context: Dict[str, Any], config: Dict[str, Any]) -> Dict[str, Any]:
"""
اجرای trigger و برگرداندن داده‌های trigger
Args:
context: context اجرای workflow
config: تنظیمات trigger
Returns:
Dict[str, Any]: داده‌های trigger
"""
pass
class TriggerRegistry:
"""ثبت trigger handlers"""
def __init__(self):
self._handlers: Dict[str, TriggerHandler] = {}
self._register_default_triggers()
def register(self, trigger_type: str, handler: TriggerHandler):
"""ثبت یک trigger handler"""
self._handlers[trigger_type] = handler
logger.info(f"Registered trigger handler: {trigger_type}")
def get_handler(self, trigger_type: str) -> Optional[TriggerHandler]:
"""دریافت trigger handler"""
return self._handlers.get(trigger_type)
def list_triggers(self) -> Dict[str, Dict[str, Any]]:
"""لیست تمام triggerهای موجود"""
result = {}
for trigger_type, handler in self._handlers.items():
if hasattr(handler, "get_metadata"):
result[trigger_type] = handler.get_metadata()
else:
result[trigger_type] = {"name": trigger_type}
return result
def get_all_metadata(self) -> list:
"""لیست metadata تمام triggerها به فرمت لیست برای API"""
result = []
for trigger_type, metadata in self.list_triggers().items():
item = dict(metadata)
item["key"] = trigger_type
result.append(item)
return result
def _register_default_triggers(self):
"""ثبت triggerهای پیش‌فرض"""
from app.services.workflow.triggers import (
DocumentCreatedTrigger,
InvoiceCreatedTrigger,
ReceiptPaymentCreatedTrigger,
ReceiptPaymentUpdatedTrigger,
CheckDueDateTrigger,
InventoryLowTrigger,
PersonCreatedTrigger,
ScheduledTrigger,
WebhookTrigger,
)
from app.services.workflow.triggers.document_triggers import (
DocumentUpdatedTrigger,
InvoiceUpdatedTrigger,
)
from app.services.workflow.triggers.person_triggers import PersonUpdatedTrigger
from app.services.workflow.triggers.crm_triggers import (
LeadCreatedTrigger,
LeadStageChangedTrigger,
LeadConvertedTrigger,
LeadAssignedTrigger,
DealCreatedTrigger,
DealStageChangedTrigger,
DealClosedTrigger,
DealAssignedTrigger,
ActivityCreatedTrigger,
)
# Document triggers
self.register("document.created", DocumentCreatedTrigger())
self.register("document.updated", DocumentUpdatedTrigger())
self.register("invoice.created", InvoiceCreatedTrigger())
self.register("invoice.sales.created", InvoiceCreatedTrigger())
self.register("invoice.purchase.created", InvoiceCreatedTrigger())
self.register("invoice.updated", InvoiceUpdatedTrigger())
self.register("invoice.sales.updated", InvoiceUpdatedTrigger())
self.register("invoice.purchase.updated", InvoiceUpdatedTrigger())
# Financial triggers
self.register("receipt_payment.created", ReceiptPaymentCreatedTrigger())
self.register("receipt_payment.updated", ReceiptPaymentUpdatedTrigger())
self.register("check.due_date", CheckDueDateTrigger())
# Inventory triggers
self.register("inventory.low", InventoryLowTrigger())
# Person triggers
self.register("person.created", PersonCreatedTrigger())
self.register("person.updated", PersonUpdatedTrigger())
# Scheduled triggers
self.register("scheduled", ScheduledTrigger())
# Webhook triggers
self.register("webhook", WebhookTrigger())
# CRM triggers
self.register("crm.lead.created", LeadCreatedTrigger())
self.register("crm.lead.stage_changed", LeadStageChangedTrigger())
self.register("crm.lead.converted", LeadConvertedTrigger())
self.register("crm.lead.assigned", LeadAssignedTrigger())
self.register("crm.deal.created", DealCreatedTrigger())
self.register("crm.deal.stage_changed", DealStageChangedTrigger())
self.register("crm.deal.closed", DealClosedTrigger())
self.register("crm.deal.assigned", DealAssignedTrigger())
self.register("crm.activity.created", ActivityCreatedTrigger())
from app.services.workflow.triggers.crm_chat_triggers import (
ChatConversationStartedTrigger,
ChatMessageReceivedTrigger,
ChatMessageSentTrigger,
ChatConversationAssignedTrigger,
ChatConversationResolvedTrigger,
ChatConversationReopenedTrigger,
)
self.register("crm.chat.conversation.started", ChatConversationStartedTrigger())
self.register("crm.chat.message.received", ChatMessageReceivedTrigger())
self.register("crm.chat.message.sent", ChatMessageSentTrigger())
self.register("crm.chat.conversation.assigned", ChatConversationAssignedTrigger())
self.register("crm.chat.conversation.resolved", ChatConversationResolvedTrigger())
self.register("crm.chat.conversation.reopened", ChatConversationReopenedTrigger())
from app.services.workflow.triggers.distribution_triggers import DistributionVisitCompletedTrigger
self.register("distribution.visit.completed", DistributionVisitCompletedTrigger())
from app.services.workflow.triggers.basalam_triggers import (
BasalamWebhookReceivedTrigger,
BasalamOrderCreatedTrigger,
BasalamOrderUpdatedTrigger,
BasalamOrderPaidTrigger,
BasalamChatMessageReceivedTrigger,
)
self.register("basalam.webhook.received", BasalamWebhookReceivedTrigger())
self.register("basalam.order.created", BasalamOrderCreatedTrigger())
self.register("basalam.order.updated", BasalamOrderUpdatedTrigger())
self.register("basalam.order.paid", BasalamOrderPaidTrigger())
self.register("basalam.chat.message.received", BasalamChatMessageReceivedTrigger())