mirror of
https://github.com/langgenius/dify.git
synced 2026-05-03 08:58:09 +08:00
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:
@ -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)
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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())),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user