From f0127ffc9a1e71c4e4aac7b647e3b59f83c6414d Mon Sep 17 00:00:00 2001 From: Harry Date: Wed, 5 Nov 2025 16:49:17 +0800 Subject: [PATCH] feat: enhance trigger metadata structure by adding type field and updating trigger_metadata handling --- api/models/enums.py | 3 +++ api/services/workflow/entities.py | 6 ++++-- api/services/workflow_app_service.py | 20 +++++++++++--------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/api/models/enums.py b/api/models/enums.py index da35a34123..d06d0d5ebc 100644 --- a/api/models/enums.py +++ b/api/models/enums.py @@ -72,3 +72,6 @@ class AppTriggerType(StrEnum): TRIGGER_WEBHOOK = NodeType.TRIGGER_WEBHOOK.value TRIGGER_SCHEDULE = NodeType.TRIGGER_SCHEDULE.value TRIGGER_PLUGIN = NodeType.TRIGGER_PLUGIN.value + + # for backward compatibility + UNKNOWN = "unknown" diff --git a/api/services/workflow/entities.py b/api/services/workflow/entities.py index 0074253740..70ec8d6e2a 100644 --- a/api/services/workflow/entities.py +++ b/api/services/workflow/entities.py @@ -22,7 +22,7 @@ class AsyncTriggerStatus(StrEnum): class TriggerMetadata(BaseModel): """Trigger metadata""" - pass + type: AppTriggerType = Field(default=AppTriggerType.UNKNOWN) class TriggerData(BaseModel): @@ -36,7 +36,7 @@ class TriggerData(BaseModel): files: Sequence[Mapping[str, Any]] = Field(default_factory=list) trigger_type: AppTriggerType trigger_from: WorkflowRunTriggeredFrom - trigger_metadata: TriggerMetadata = Field(default_factory=TriggerMetadata) + trigger_metadata: TriggerMetadata | None = None model_config = ConfigDict(use_enum_values=True) @@ -58,6 +58,8 @@ class ScheduleTriggerData(TriggerData): class PluginTriggerMetadata(TriggerMetadata): """Plugin trigger metadata""" + type: AppTriggerType = AppTriggerType.TRIGGER_PLUGIN + endpoint_id: str plugin_unique_identifier: str provider_id: str diff --git a/api/services/workflow_app_service.py b/api/services/workflow_app_service.py index 71fbc338de..01f0c7a55a 100644 --- a/api/services/workflow_app_service.py +++ b/api/services/workflow_app_service.py @@ -8,9 +8,10 @@ from sqlalchemy.orm import Session from core.workflow.enums import WorkflowExecutionStatus from models import Account, App, EndUser, WorkflowAppLog, WorkflowRun -from models.enums import CreatorUserRole +from models.enums import AppTriggerType, CreatorUserRole from models.trigger import WorkflowTriggerLog from services.plugin.plugin_service import PluginService +from services.workflow.entities import TriggerMetadata # Since the workflow_app_log table has exceeded 100 million records, we use an additional details field to extend it @@ -169,14 +170,15 @@ class WorkflowAppService: metadata: dict[str, Any] | None = self._safe_json_loads(meta_val) if not metadata: return {} - icon = metadata.get("icon_filename") - icon_dark = metadata.get("icon_dark_filename") - return { - "icon": PluginService.get_plugin_icon_url(tenant_id=tenant_id, filename=icon) if icon else None, - "icon_dark": PluginService.get_plugin_icon_url(tenant_id=tenant_id, filename=icon_dark) - if icon_dark - else None, - } + trigger_metadata = TriggerMetadata.model_validate(metadata) + if trigger_metadata.type == AppTriggerType.TRIGGER_PLUGIN: + icon = metadata.get("icon_filename") + icon_dark = metadata.get("icon_dark_filename") + metadata["icon"] = PluginService.get_plugin_icon_url(tenant_id=tenant_id, filename=icon) if icon else None + metadata["icon_dark"] = ( + PluginService.get_plugin_icon_url(tenant_id=tenant_id, filename=icon_dark) if icon_dark else None + ) + return metadata @staticmethod def _safe_json_loads(val):