Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,7 @@ async def withdraw_instance(
action_code='approval_instance_withdrawn',
business_name=instance.business_name,
instance_id=instance.id,
scenario_code=instance.scenario_code,
reason=reason,
)
try:
Expand Down Expand Up @@ -502,6 +503,7 @@ async def _send_menu_access_approval_messages(
business_name=menu_name,
button_action_code='request_menu_access',
receiver_user_ids=approver_user_ids,
scenario_code='menu_access_request',
)

@classmethod
Expand Down Expand Up @@ -624,6 +626,7 @@ async def revoke_menu_grant(
action_code='menu_grant_revoked',
business_name=instance.business_name,
instance_id=instance.id,
scenario_code=instance.scenario_code,
reason=reason,
)
return {'revoked_keys': [row.menu_key for row in rows], 'instance_id': instance_id}
Expand Down Expand Up @@ -702,6 +705,7 @@ async def decide_task(
action_code='approval_task_rejected',
business_name=instance.business_name,
instance_id=instance.id,
scenario_code=instance.scenario_code,
reason=comment,
)
try:
Expand Down Expand Up @@ -807,6 +811,7 @@ async def _advance_after_node_approved(
action_code='approval_instance_approved',
business_name=instance.business_name or '',
instance_id=instance.id,
scenario_code=instance.scenario_code,
)
return

Expand Down Expand Up @@ -841,6 +846,7 @@ async def _advance_after_node_approved(
action_code='approval_instance_approved',
business_name=instance.business_name or '',
instance_id=instance.id,
scenario_code=instance.scenario_code,
)
return

Expand Down Expand Up @@ -890,6 +896,7 @@ async def _advance_after_node_approved(
action_code='approval_exception_approver_empty',
business_name=instance.business_name,
instance_id=instance.id,
scenario_code=instance.scenario_code,
)
return

Expand Down Expand Up @@ -920,6 +927,7 @@ async def _advance_after_node_approved(
action_code='approval_task_pending',
business_name=instance.business_name,
instance_id=instance.id,
scenario_code=instance.scenario_code,
task_id=task.id,
)

Expand All @@ -931,6 +939,7 @@ async def _send_approval_notify(
action_code: str,
business_name: str,
instance_id: int,
scenario_code: str | None = None,
reason: str | None = None,
task_id: int | None = None,
) -> None:
Expand All @@ -942,6 +951,7 @@ async def _send_approval_notify(
action_code=action_code,
business_name=business_name,
instance_id=instance_id,
scenario_code=scenario_code,
reason=reason,
task_id=task_id,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ async def cancel_exception_api(
action_code="approval_exception_cancelled",
business_name=instance.business_name,
instance_id=instance.id,
scenario_code=instance.scenario_code,
reason=reason.strip(),
)
return {"exception_id": exception_id, "instance_id": instance.id, "status": "cancelled"}
Expand Down Expand Up @@ -254,6 +255,7 @@ async def assign_flow(
sender=instance.applicant_user_id,
business_name=instance.business_name,
instance_id=instance.id,
scenario_code=instance.scenario_code,
tasks=created_tasks,
)

Expand Down Expand Up @@ -285,6 +287,7 @@ async def assign_approvers(
sender=instance.applicant_user_id,
business_name=instance.business_name,
instance_id=instance.id,
scenario_code=instance.scenario_code,
tasks=created_tasks,
)

Expand Down Expand Up @@ -485,6 +488,7 @@ async def _advance_from_skipped_node(self, *, instance, current_node_order: int,
action_code="approval_task_pending",
business_name=instance.business_name or "",
instance_id=instance.id,
scenario_code=instance.scenario_code,
task_id=task.id,
)

Expand Down Expand Up @@ -562,6 +566,7 @@ async def _notify_created_tasks(
sender: int,
business_name: str,
instance_id: int,
scenario_code: str | None = None,
tasks: list[ApprovalTask],
) -> None:
for task in tasks:
Expand All @@ -571,6 +576,7 @@ async def _notify_created_tasks(
action_code="approval_task_pending",
business_name=business_name or "",
instance_id=instance_id,
scenario_code=scenario_code,
task_id=task.id,
)

Expand Down Expand Up @@ -755,6 +761,7 @@ async def _notify_user(
action_code: str,
business_name: str,
instance_id: int,
scenario_code: str | None = None,
reason: str | None = None,
task_id: int | None = None,
) -> None:
Expand All @@ -766,6 +773,7 @@ async def _notify_user(
action_code=action_code,
business_name=business_name,
instance_id=instance_id,
scenario_code=scenario_code,
reason=reason,
task_id=task_id,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ async def notify_user(
action_code: str,
business_name: str,
instance_id: int,
scenario_code: str | None = None,
reason: str | None = None,
task_id: int | None = None,
) -> None:
Expand All @@ -28,6 +29,7 @@ async def notify_user(
action_code=action_code,
business_name=business_name,
instance_id=instance_id,
scenario_code=scenario_code,
reason=reason,
task_id=task_id,
)
Expand All @@ -40,6 +42,7 @@ async def notify_users(
action_code: str,
business_name: str,
instance_id: int,
scenario_code: str | None = None,
reason: str | None = None,
task_id: int | None = None,
) -> None:
Expand All @@ -53,6 +56,11 @@ async def notify_users(
metadata = {}
if task_id is not None:
metadata = {"data": {"approval_task_id": str(task_id)}}
if scenario_code:
data = dict(metadata.get("data") or {})
data.setdefault("scenario_code", scenario_code)
metadata["data"] = data
metadata["scenario_code"] = scenario_code
actor_user_name = None
try:
from bisheng.user.domain.models.user import UserDao
Expand All @@ -75,6 +83,7 @@ async def notify_users(
business_id=instance_id,
actor_user_id=sender,
actor_user_name=actor_user_name,
scenario_code=scenario_code,
reason=reason,
metadata=metadata,
),
Expand All @@ -95,6 +104,7 @@ async def notify_admins(
action_code: str,
business_name: str,
instance_id: int,
scenario_code: str | None = None,
) -> None:
admin_ids = await ApprovalNotificationService._get_admin_recipient_ids(
tenant_id=tenant_id,
Expand All @@ -106,6 +116,7 @@ async def notify_admins(
action_code=action_code,
business_name=business_name,
instance_id=instance_id,
scenario_code=scenario_code,
)

@staticmethod
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1104,6 +1104,7 @@ async def _send_channel_approval_notification(
business_name=channel.name,
button_action_code="request_channel",
receiver_user_ids=approver_user_ids,
scenario_code="channel_subscribe_request",
)

async def _send_subscribe_approval_notification(
Expand Down Expand Up @@ -1147,6 +1148,7 @@ async def _send_subscribe_approval_notification(
business_name=channel.name,
button_action_code="request_channel",
receiver_user_ids=receiver_user_ids,
scenario_code="channel_subscribe_request",
)

async def update_channel(self, channel_id: str, req: UpdateChannelRequest, login_user: UserPayload):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3561,6 +3561,7 @@ async def _send_space_approval_notification(
business_name=space.name,
button_action_code="request_knowledge_space",
receiver_user_ids=approver_user_ids,
scenario_code="knowledge_space_subscribe_request",
)

async def _send_subscription_notification(self, space: Knowledge):
Expand All @@ -3579,6 +3580,7 @@ async def _send_subscription_notification(self, space: Knowledge):
business_name=space.name,
button_action_code="request_knowledge_space",
receiver_user_ids=member_ids,
scenario_code="knowledge_space_subscribe_request",
)

async def unsubscribe_space(self, space_id: int) -> bool:
Expand Down
11 changes: 10 additions & 1 deletion src/backend/bisheng/message/domain/services/message_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,7 @@ def build_generic_approval_content(
business_name: str,
button_action_code: str,
approval_message_id: Optional[int] = None,
scenario_code: Optional[str] = None,
) -> List[Dict[str, Any]]:
"""
Build the generic message content structure for a business approval request.
Expand All @@ -437,7 +438,13 @@ def build_generic_approval_content(
"content": f"--{business_name}",
"metadata": {
"business_type": business_type,
"data": {business_type: business_id},
"scenario_code": scenario_code,
"data": {
business_type: business_id,
"business_id": business_id,
"business_name": business_name,
**({"scenario_code": scenario_code} if scenario_code else {}),
},
},
},
{
Expand All @@ -461,6 +468,7 @@ async def send_generic_approval(
business_name: str,
button_action_code: str,
receiver_user_ids: List[int],
scenario_code: Optional[str] = None,
) -> InboxMessage:
"""
Send a generic approval notification to specific receivers.
Expand All @@ -474,6 +482,7 @@ async def send_generic_approval(
business_id=business_id,
business_name=business_name,
button_action_code=button_action_code,
scenario_code=scenario_code,
)

# Create the message with action_code stored on model for reliable routing
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ def build_notify_content(
business_id: str | int | None = None,
actor_user_id: int | None = None,
actor_user_name: str | None = None,
scenario_code: str | None = None,
reason: str | None = None,
navigable: bool = True,
metadata: dict[str, Any] | None = None,
Expand All @@ -41,12 +42,16 @@ def build_notify_content(
content.append({"type": "system_text", "content": action_code})

target_metadata = dict(metadata or {})
if scenario_code:
target_metadata.setdefault("scenario_code", scenario_code)
if business_type and business_id is not None:
target_metadata.setdefault("business_type", business_type)
data = dict(target_metadata.get("data") or {})
data.setdefault(business_type, str(business_id))
data.setdefault("business_id", str(business_id))
data.setdefault("business_name", target_name)
if scenario_code:
data.setdefault("scenario_code", scenario_code)
target_metadata["data"] = data

if navigable and business_type and business_id is not None:
Expand Down
Loading
Loading