fix(trigger): enhance error handling and refactor end user creation in trigger workflows

- Improved error handling in `TriggerSubscriptionListApi` to return a 404 response for ValueErrors.
- Refactored end user creation logic in `service_api/wraps.py` to use `get_or_create_end_user` for better clarity and consistency.
- Introduced a new method `create_end_user_batch` for batch creation of end users, optimizing database interactions.
- Updated various trigger-related services to utilize the new end user handling, ensuring proper user context during trigger dispatching.
This commit is contained in:
Harry
2025-10-17 21:00:43 +08:00
parent 8a5174d078
commit 80f2c1be67
17 changed files with 429 additions and 323 deletions

View File

@ -4,7 +4,7 @@ from typing import Union
from sqlalchemy import select
from sqlalchemy.orm import Session
from controllers.service_api.wraps import create_or_update_end_user_for_user_id
from controllers.service_api.wraps import get_or_create_end_user
from core.app.app_config.common.parameters_mapping import get_parameters_from_feature_dict
from core.app.apps.advanced_chat.app_generator import AdvancedChatAppGenerator
from core.app.apps.agent_chat.app_generator import AgentChatAppGenerator
@ -64,7 +64,7 @@ class PluginAppBackwardsInvocation(BaseBackwardsInvocation):
"""
app = cls._get_app(app_id, tenant_id)
if not user_id:
user = create_or_update_end_user_for_user_id(app)
user = get_or_create_end_user(app)
else:
user = cls._get_user(user_id)

View File

@ -247,6 +247,7 @@ class TriggerInvokeEventResponse(BaseModel):
class PluginTriggerDispatchResponse(BaseModel):
user_id: str
events: list[str]
raw_http_response: str
@ -260,9 +261,11 @@ class TriggerValidateProviderCredentialsResponse(BaseModel):
class TriggerDispatchResponse:
user_id: str
events: list[str]
response: Response
def __init__(self, events: list[str], response: Response):
def __init__(self, user_id: str, events: list[str], response: Response):
self.user_id = user_id
self.events = events
self.response = response

View File

@ -156,7 +156,6 @@ class PluginTriggerManager(BasePluginClient):
def dispatch_event(
self,
tenant_id: str,
user_id: str,
provider: str,
subscription: Mapping[str, Any],
request: Request,
@ -173,7 +172,6 @@ class PluginTriggerManager(BasePluginClient):
path=f"plugin/{tenant_id}/dispatch/trigger/dispatch_event",
type_=PluginTriggerDispatchResponse,
data={
"user_id": user_id,
"data": {
"provider": provider_id.provider_name,
"subscription": subscription,
@ -191,6 +189,7 @@ class PluginTriggerManager(BasePluginClient):
for resp in response:
return TriggerDispatchResponse(
user_id=resp.user_id or "",
events=resp.events,
response=deserialize_response(binascii.unhexlify(resp.raw_http_response.encode())),
)