feat(P19IM1-1,P19IM1-2): 新增通知渠道配置与Outbox派发
这个提交包含在:
@@ -0,0 +1,86 @@
|
||||
const NOTIFICATION_DOMAIN_SCOPES = Object.freeze({
|
||||
workflow: 'workflow',
|
||||
reimbursement: 'reimbursement',
|
||||
leave: 'leave',
|
||||
procurement: 'procurement',
|
||||
asset: 'asset',
|
||||
inventory: 'inventory',
|
||||
});
|
||||
|
||||
const NOTIFICATION_TYPES = Object.freeze({
|
||||
workflowTaskAssigned: 'workflow.task_assigned',
|
||||
reimbursementApproved: 'reimbursement.approved',
|
||||
reimbursementRejected: 'reimbursement.rejected',
|
||||
reimbursementReturned: 'reimbursement.returned',
|
||||
reimbursementPaid: 'reimbursement.paid',
|
||||
leaveApproved: 'leave.approved',
|
||||
leaveRejected: 'leave.rejected',
|
||||
purchaseRequestApproved: 'purchase_request.approved',
|
||||
purchaseRequestRejected: 'purchase_request.rejected',
|
||||
assetAssigned: 'asset.assigned',
|
||||
assetReturned: 'asset.returned',
|
||||
assetTransferred: 'asset.transferred',
|
||||
inventoryCheckCompleted: 'inventory_check.completed',
|
||||
});
|
||||
|
||||
const IM_SUPPORTED_NOTIFICATION_TYPES = Object.freeze([
|
||||
NOTIFICATION_TYPES.workflowTaskAssigned,
|
||||
NOTIFICATION_TYPES.reimbursementApproved,
|
||||
NOTIFICATION_TYPES.reimbursementRejected,
|
||||
NOTIFICATION_TYPES.reimbursementReturned,
|
||||
NOTIFICATION_TYPES.reimbursementPaid,
|
||||
NOTIFICATION_TYPES.leaveApproved,
|
||||
NOTIFICATION_TYPES.leaveRejected,
|
||||
NOTIFICATION_TYPES.purchaseRequestApproved,
|
||||
NOTIFICATION_TYPES.purchaseRequestRejected,
|
||||
NOTIFICATION_TYPES.assetAssigned,
|
||||
NOTIFICATION_TYPES.assetReturned,
|
||||
NOTIFICATION_TYPES.assetTransferred,
|
||||
NOTIFICATION_TYPES.inventoryCheckCompleted,
|
||||
]);
|
||||
|
||||
const NOTIFICATION_TYPE_TO_DOMAIN_SCOPE = Object.freeze({
|
||||
[NOTIFICATION_TYPES.workflowTaskAssigned]: NOTIFICATION_DOMAIN_SCOPES.workflow,
|
||||
[NOTIFICATION_TYPES.reimbursementApproved]: NOTIFICATION_DOMAIN_SCOPES.reimbursement,
|
||||
[NOTIFICATION_TYPES.reimbursementRejected]: NOTIFICATION_DOMAIN_SCOPES.reimbursement,
|
||||
[NOTIFICATION_TYPES.reimbursementReturned]: NOTIFICATION_DOMAIN_SCOPES.reimbursement,
|
||||
[NOTIFICATION_TYPES.reimbursementPaid]: NOTIFICATION_DOMAIN_SCOPES.reimbursement,
|
||||
[NOTIFICATION_TYPES.leaveApproved]: NOTIFICATION_DOMAIN_SCOPES.leave,
|
||||
[NOTIFICATION_TYPES.leaveRejected]: NOTIFICATION_DOMAIN_SCOPES.leave,
|
||||
[NOTIFICATION_TYPES.purchaseRequestApproved]: NOTIFICATION_DOMAIN_SCOPES.procurement,
|
||||
[NOTIFICATION_TYPES.purchaseRequestRejected]: NOTIFICATION_DOMAIN_SCOPES.procurement,
|
||||
[NOTIFICATION_TYPES.assetAssigned]: NOTIFICATION_DOMAIN_SCOPES.asset,
|
||||
[NOTIFICATION_TYPES.assetReturned]: NOTIFICATION_DOMAIN_SCOPES.asset,
|
||||
[NOTIFICATION_TYPES.assetTransferred]: NOTIFICATION_DOMAIN_SCOPES.asset,
|
||||
[NOTIFICATION_TYPES.inventoryCheckCompleted]: NOTIFICATION_DOMAIN_SCOPES.inventory,
|
||||
});
|
||||
|
||||
const TARGET_TYPE_TO_DOMAIN_SCOPE = Object.freeze({
|
||||
workflow_task: NOTIFICATION_DOMAIN_SCOPES.workflow,
|
||||
reimbursement_form: NOTIFICATION_DOMAIN_SCOPES.reimbursement,
|
||||
leave_request: NOTIFICATION_DOMAIN_SCOPES.leave,
|
||||
purchase_request: NOTIFICATION_DOMAIN_SCOPES.procurement,
|
||||
asset_card: NOTIFICATION_DOMAIN_SCOPES.asset,
|
||||
inventory_check: NOTIFICATION_DOMAIN_SCOPES.inventory,
|
||||
});
|
||||
|
||||
function resolveNotificationDomainScope(type, targetType = null) {
|
||||
const normalizedType = type == null ? '' : String(type).trim();
|
||||
if (normalizedType && NOTIFICATION_TYPE_TO_DOMAIN_SCOPE[normalizedType]) {
|
||||
return NOTIFICATION_TYPE_TO_DOMAIN_SCOPE[normalizedType];
|
||||
}
|
||||
|
||||
const normalizedTargetType = targetType == null ? '' : String(targetType).trim();
|
||||
if (normalizedTargetType && TARGET_TYPE_TO_DOMAIN_SCOPE[normalizedTargetType]) {
|
||||
return TARGET_TYPE_TO_DOMAIN_SCOPE[normalizedTargetType];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
NOTIFICATION_TYPES,
|
||||
IM_SUPPORTED_NOTIFICATION_TYPES,
|
||||
NOTIFICATION_DOMAIN_SCOPES,
|
||||
resolveNotificationDomainScope,
|
||||
};
|
||||
在新工单中引用
屏蔽一个用户