Skip to content

Commit

Permalink
feat(notifications): 通知数据应交由具体实现者来处理数据
Browse files Browse the repository at this point in the history
  • Loading branch information
colinin committed Oct 10, 2024
1 parent 137ffd8 commit f4f96f0
Show file tree
Hide file tree
Showing 19 changed files with 116 additions and 156 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ public override void ConfigureServices(ServiceConfigurationContext context)
Configure<AbpNotificationsPublishOptions>(options =>
{
options.PublishProviders.Add<EmailingNotificationPublishProvider>();
options.NotificationDataMappings
.MappingDefault(EmailingNotificationPublishProvider.ProviderName, data => data);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ public override void ConfigureServices(ServiceConfigurationContext context)
Configure<AbpNotificationsPublishOptions>(options =>
{
options.PublishProviders.Add<SignalRNotificationPublishProvider>();
options.NotificationDataMappings
.MappingDefault(SignalRNotificationPublishProvider.ProviderName,
data => data.ToSignalRData());
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,6 @@ public override void ConfigureServices(ServiceConfigurationContext context)
Configure<AbpNotificationsPublishOptions>(options =>
{
options.PublishProviders.Add<SmsNotificationPublishProvider>();
var smsOptions = preSmsActions.Configure();
options.NotificationDataMappings
.MappingDefault(
SmsNotificationPublishProvider.ProviderName,
data => NotificationData.ToStandardData(smsOptions.TemplateParamsPrefix, data));
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,6 @@

自定义的发送方法可以通过实现 ##ISmsNotificationSender## 接口或重写 ##SmsNotificationSender## 即可

内置了通知数据 NotificationDataMappings 方法
可通过 NotificationDataMappings.MappingAll(SmsNotificationPublishProvider.ProviderName, Func<NotificationData, NotificationData> func) 来自定义规则


## 配置使用

* 此配置项将在下一个短信相关大版本移除
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,6 @@ public override void ConfigureServices(ServiceConfigurationContext context)
Configure<AbpNotificationsPublishOptions>(options =>
{
options.PublishProviders.Add<WeChatMiniProgramNotificationPublishProvider>();
var wechatOptions = preActions.Configure();
options.NotificationDataMappings
.MappingDefault(WeChatMiniProgramNotificationPublishProvider.ProviderName,
data => NotificationData.ToStandardData(wechatOptions.DefaultMsgPrefix, data));
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@
/// </summary>
public class AbpNotificationsWeChatMiniProgramOptions
{
/// <summary>
/// 默认消息头部标记
/// </summary>
public string DefaultMsgPrefix { get; set; } = "[wmp]";
/// <summary>
/// 默认小程序模板
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@

#### 注意

内置了通知数据 NotificationDataMappings 方法
可通过 NotificationDataMappings.MappingAll(WeChatMiniProgramNotificationPublishProvider.ProviderName, Func<NotificationData, NotificationData> func) 来自定义规则

## 配置使用

* 此配置项将在下一个微信相关大版本移除,合并到 LINGYUN.Abp.WeChat.MiniProgram.AbpWeChatMiniProgramOptions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ public class AbpNotificationsPublishOptions
/// </summary>
public ITypeList<INotificationPublishProvider> PublishProviders { get; }
/// <summary>
/// 可以自定义某个通知的格式
/// </summary>
public NotificationDataMappingDictionary NotificationDataMappings { get; }
/// <summary>
/// 过期时间
/// 默认60天
/// </summary>
Expand All @@ -29,7 +25,6 @@ public class AbpNotificationsPublishOptions
public AbpNotificationsPublishOptions()
{
PublishProviders = new TypeList<INotificationPublishProvider>();
NotificationDataMappings = new NotificationDataMappingDictionary();

ExpirationTime = TimeSpan.FromDays(60);
DateTimeFormat = DefaultDateTimeFormat;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,6 @@ public override async Task ExecuteAsync(NotificationPublishJobArgs args)
var notification = await store.GetNotificationOrNullAsync(args.TenantId, args.NotificationId);
notification.Data = NotificationDataSerializer.Serialize(notification.Data);

var notifacationDataMapping = Options.NotificationDataMappings
.GetMapItemOrDefault(notification.Name, publishProvider.Name);
if (notifacationDataMapping != null)
{
notification.Data = notifacationDataMapping.MappingFunc(notification.Data);
}
await publishProvider.PublishAsync(notification, args.UserIdentifiers);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -413,12 +413,15 @@ protected async Task PublishToSubscriberAsync(
try
{
Logger.LogDebug($"Sending notification with provider {provider.Name}");
var notifacationDataMapping = Options.NotificationDataMappings
.GetMapItemOrDefault(provider.Name, notificationInfo.Name);
if (notifacationDataMapping != null)
{
notificationInfo.Data = notifacationDataMapping.MappingFunc(notificationInfo.Data);
}

// 2024-10-10: 框架层面应该取消通知数据转换,而是交给提供商来实现
//var notifacationDataMapping = Options.NotificationDataMappings
// .GetMapItemOrDefault(provider.Name, notificationInfo.Name);
//if (notifacationDataMapping != null)
//{
// notificationInfo.Data = notifacationDataMapping.MappingFunc(notificationInfo.Data);
//}

// 发布
await provider.PublishAsync(notificationInfo, subscriptionUsers);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"launchBrowser": false,
"applicationUrl": "http://0.0.0.0:30001",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
"ASPNETCORE_ENVIRONMENT": "Production"
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,14 @@
"Configuration": "127.0.0.1,defaultDatabase=15",
"InstanceName": "LINGYUN.Abp.Application"
},
"Features": {
"Validation": {
"Redis": {
"Configuration": "127.0.0.1,defaultDatabase=13",
"InstanceName": "LINGYUN.Abp.Application"
}
}
},
"AuthServer": {
"UseOpenIddict": true,
"Authority": "http://127.0.0.1:30001/",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
using LINGYUN.Abp.Notifications;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Threading.Tasks;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.DependencyInjection;

namespace LY.MicroService.RealtimeMessage.BackgroundJobs;

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Threading.Tasks;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.DependencyInjection;

namespace LY.MicroService.RealtimeMessage.BackgroundJobs;

public class NotificationPublishJob : AsyncBackgroundJob<NotificationPublishJobArgs>, ITransientDependency
{
protected AbpNotificationsPublishOptions Options { get; }
Expand All @@ -33,15 +33,9 @@ public override async Task ExecuteAsync(NotificationPublishJobArgs args)
var store = scope.ServiceProvider.GetRequiredService<INotificationStore>();
var notification = await store.GetNotificationOrNullAsync(args.TenantId, args.NotificationId);
notification.Data = NotificationDataSerializer.Serialize(notification.Data);

var notifacationDataMapping = Options.NotificationDataMappings
.GetMapItemOrDefault(notification.Name, publishProvider.Name);
if (notifacationDataMapping != null)
{
notification.Data = notifacationDataMapping.MappingFunc(notification.Data);
}

await publishProvider.PublishAsync(notification, args.UserIdentifiers);
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -418,16 +418,6 @@ protected async Task PublishToSubscriberAsync(
try
{
Logger.LogDebug($"Sending notification with provider {provider.Name}");

if (notificationInfo.Type != NotificationType.ServiceCallback)
{
var notifacationDataMapping = Options.NotificationDataMappings
.GetMapItemOrDefault(provider.Name, notificationInfo.Name);
if (notifacationDataMapping != null)
{
notificationInfo.Data = notifacationDataMapping.MappingFunc(notificationInfo.Data);
}
}
// 发布
await provider.PublishAsync(notificationInfo, subscriptionUsers);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class AbpNotificationsSmsTestsModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
// 改变默认数据前缀方法
// �ı�Ĭ������ǰ׺����
PreConfigure<AbpNotificationsSmsOptions>(options =>
{
options.TemplateParamsPrefix = "[sms-override]";
Expand All @@ -20,22 +20,9 @@ public override void PreConfigureServices(ServiceConfigurationContext context)

public override void ConfigureServices(ServiceConfigurationContext context)
{
// 自定义数据处理方法
// �Զ������ݴ�������
Configure<AbpNotificationOptions>(options =>
{
// 这条通知返回标准化的通知
options.NotificationDataMappings
.Mapping(
SmsNotificationPublishProvider.ProviderName,
NotificationsTestsNames.Test2,
data => NotificationData.ToStandardData(data));
// 这条通知不做任何处理
options.NotificationDataMappings
.Mapping(
SmsNotificationPublishProvider.ProviderName,
NotificationsTestsNames.Test3,
data => data);
});
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,53 +30,53 @@ private void InitNotificationData(NotificationData data)
[Fact]
public void Mapping_Sms_Notification_Data_Test()
{
var mappingSmsItem = NotificationOptions
.NotificationDataMappings
.GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test1);
// var mappingSmsItem = NotificationOptions
// .NotificationDataMappings
// .GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test1);

mappingSmsItem.ShouldNotBeNull();
// mappingSmsItem.ShouldNotBeNull();

var mappingSmsData = mappingSmsItem.MappingFunc(_notificationData);
mappingSmsData.TryGetData("phoneNumber").ShouldNotBeNull();
mappingSmsData.TryGetData("phoneNumber").ToString().ShouldBe("13800138000");
// var mappingSmsData = mappingSmsItem.MappingFunc(_notificationData);
// mappingSmsData.TryGetData("phoneNumber").ShouldNotBeNull();
// mappingSmsData.TryGetData("phoneNumber").ToString().ShouldBe("13800138000");

mappingSmsData.TryGetData("template").ShouldNotBeNull();
mappingSmsData.TryGetData("template").ToString().ShouldBe("SM_202011250901");
// mappingSmsData.TryGetData("template").ShouldNotBeNull();
// mappingSmsData.TryGetData("template").ToString().ShouldBe("SM_202011250901");

// 按照预定义规则,这条数据被丢弃
mappingSmsData.TryGetData("otherDataKey").ShouldBeNull();
// // 按照预定义规则,这条数据被丢弃
// mappingSmsData.TryGetData("otherDataKey").ShouldBeNull();
}

[Fact]
public void Mapping_Standard_Notification_Data_Test()
{
var mappingStandardItem = NotificationOptions
.NotificationDataMappings
.GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test2);
// var mappingStandardItem = NotificationOptions
// .NotificationDataMappings
// .GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test2);

var mappingStandardData = mappingStandardItem.MappingFunc(_notificationData);
// var mappingStandardData = mappingStandardItem.MappingFunc(_notificationData);

// 按照自定义规则,其他数据被丢弃
mappingStandardData.TryGetData("phoneNumber").ShouldBeNull();
mappingStandardData.TryGetData("template").ShouldBeNull();
mappingStandardData.TryGetData("otherDataKey").ShouldBeNull();
mappingStandardData.ExtraProperties.Count.ShouldBe(6);
// // 按照自定义规则,其他数据被丢弃
// mappingStandardData.TryGetData("phoneNumber").ShouldBeNull();
// mappingStandardData.TryGetData("template").ShouldBeNull();
// mappingStandardData.TryGetData("otherDataKey").ShouldBeNull();
// mappingStandardData.ExtraProperties.Count.ShouldBe(6);
}

[Fact]
public void Mapping_Origin_Notification_Data_Test()
{
var mappingOriginItem = NotificationOptions
.NotificationDataMappings
.GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test3);
// var mappingOriginItem = NotificationOptions
// .NotificationDataMappings
// .GetMapItemOrDefault(SmsNotificationPublishProvider.ProviderName, NotificationsTestsNames.Test3);

var mappingOriginData = mappingOriginItem.MappingFunc(_notificationData);
// var mappingOriginData = mappingOriginItem.MappingFunc(_notificationData);

// 按照自定义规则,所有数据被保留
mappingOriginData.TryGetData(NotificationSmsOptions.TemplateParamsPrefix + "phoneNumber").ShouldNotBeNull();
mappingOriginData.TryGetData(NotificationSmsOptions.TemplateParamsPrefix + "template").ShouldNotBeNull();
mappingOriginData.TryGetData("otherDataKey").ShouldNotBeNull();
mappingOriginData.ExtraProperties.Count.ShouldBe(9);
// // 按照自定义规则,所有数据被保留
// mappingOriginData.TryGetData(NotificationSmsOptions.TemplateParamsPrefix + "phoneNumber").ShouldNotBeNull();
// mappingOriginData.TryGetData(NotificationSmsOptions.TemplateParamsPrefix + "template").ShouldNotBeNull();
// mappingOriginData.TryGetData("otherDataKey").ShouldNotBeNull();
// mappingOriginData.ExtraProperties.Count.ShouldBe(9);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,9 @@ public override void PreConfigureServices(ServiceConfigurationContext context)

public override void ConfigureServices(ServiceConfigurationContext context)
{
// 自定义数据处理方法
// �Զ������ݴ�������
Configure<AbpNotificationsPublishOptions>(options =>
{
// 这条通知返回标准化的通知
options.NotificationDataMappings
.Mapping(
WeChatMiniProgramNotificationPublishProvider.ProviderName,
NotificationsTestsNames.Test2,
data => NotificationData.ToStandardData(data));
// 这条通知不做任何处理
options.NotificationDataMappings
.Mapping(
WeChatMiniProgramNotificationPublishProvider.ProviderName,
NotificationsTestsNames.Test3,
data => data);
});
}
}
Expand Down
Loading

0 comments on commit f4f96f0

Please sign in to comment.