Skip to content

Commit

Permalink
feat: Add Sent list, Read Rate column, and Clone button (#5)
Browse files Browse the repository at this point in the history
  • Loading branch information
artem-dudarev authored Jun 4, 2024
1 parent bb234b2 commit 72ed4b8
Show file tree
Hide file tree
Showing 43 changed files with 594 additions and 277 deletions.
5 changes: 4 additions & 1 deletion VirtoCommerce.PushMessages.sln.DotSettings
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateConstants/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticReadonly/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=15b5b1f1_002D457c_002D4ca6_002Db278_002D5615aedc07d3/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static readonly fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="READONLY_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;&lt;/Policy&gt;</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/UserRules/=236f7aa5_002D7b06_002D43ca_002Dbf2a_002D9b31bfcff09a/@EntryIndexedValue">&lt;Policy&gt;&lt;Descriptor Staticness="Any" AccessRightKinds="Private" Description="Constant fields (private)"&gt;&lt;ElementKinds&gt;&lt;Kind Name="CONSTANT_FIELD" /&gt;&lt;/ElementKinds&gt;&lt;/Descriptor&gt;&lt;Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /&gt;&lt;/Policy&gt;</s:String>
<s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EPredefinedNamingRulesToUserRulesUpgrade/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=npgsql/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=pomelo/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=postgre/@EntryIndexedValue">True</s:Boolean>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace VirtoCommerce.PushMessages.Core.BackgroundJobs;

public interface IPushMessageJobService : IRecurringJobService
public interface IPushMessageJobService
{
void EnqueueAddRecipients(IList<string> messageIds = null);
}

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

6 changes: 6 additions & 0 deletions src/VirtoCommerce.PushMessages.Core/Models/PushMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ public class PushMessage : AuditableEntity, ICloneable

public IList<string> MemberIds { get; set; }

public int RecipientsTotalCount { get; set; }

public int RecipientsReadCount { get; set; }

public int RecipientsReadPercent { get; set; }

public virtual object Clone()
{
return MemberwiseClone();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ public enum PushMessageResponseGroup
{
None = 0,
WithMembers = 1 << 0,
Full = WithMembers,
WithReadRate = 1 << 1,
Default = WithMembers,
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
<PackageReference Include="VirtoCommerce.Platform.Core" Version="3.825.0" />
<PackageReference Include="VirtoCommerce.Platform.Core" Version="3.829.0" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
<PackageReference Include="VirtoCommerce.Platform.Data.MySql" Version="3.825.0" />
<PackageReference Include="VirtoCommerce.Platform.Data.MySql" Version="3.829.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\VirtoCommerce.PushMessages.Data\VirtoCommerce.PushMessages.Data.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
<PackageReference Include="VirtoCommerce.Platform.Data.PostgreSql" Version="3.825.0" />
<PackageReference Include="VirtoCommerce.Platform.Data.PostgreSql" Version="3.829.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\VirtoCommerce.PushMessages.Data\VirtoCommerce.PushMessages.Data.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
<PackageReference Include="VirtoCommerce.Platform.Data.SqlServer" Version="3.825.0" />
<PackageReference Include="VirtoCommerce.Platform.Data.SqlServer" Version="3.829.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\VirtoCommerce.PushMessages.Data\VirtoCommerce.PushMessages.Data.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@
using VirtoCommerce.PushMessages.Core.Services;
using VirtoCommerce.PushMessages.Data.Extensions;
using GeneralSettings = VirtoCommerce.PushMessages.Core.ModuleConstants.Settings.General;
using JobSettings = VirtoCommerce.PushMessages.Core.ModuleConstants.Settings.BackgroundJobs;

namespace VirtoCommerce.PushMessages.Data.BackgroundJobs;

public class PushMessageJobService : RecurringJobService<PushMessageJobService>, IPushMessageJobService
public class PushMessageJobService : IPushMessageJobService
{
private readonly ISettingsManager _settingsManager;
private readonly IPushMessageService _messageService;
Expand All @@ -37,7 +36,6 @@ public PushMessageJobService(
IPushMessageRecipientSearchService recipientSearchService,
IMemberService memberService,
IMemberSearchService memberSearchService)
: base(settingsManager)
{
_settingsManager = settingsManager;
_messageService = messageService;
Expand All @@ -46,22 +44,6 @@ public PushMessageJobService(
_recipientSearchService = recipientSearchService;
_memberService = memberService;
_memberSearchService = memberSearchService;

RecurringJobs.Add(new RecurringJobDescriptor<PushMessageJobService>
{
EnableSetting = JobSettings.SendScheduledMessagesRecurringJobEnable,
CronSetting = JobSettings.SendScheduledMessagesRecurringJobCronExpression,
Method = typeof(PushMessageJobService).GetMethod(nameof(SendScheduledMessagesRecurringJob)),
MethodCall = x => x.SendScheduledMessagesRecurringJob(JobCancellationToken.Null),
});

RecurringJobs.Add(new RecurringJobDescriptor<PushMessageJobService>
{
EnableSetting = JobSettings.TrackNewRecipientsRecurringJobEnable,
CronSetting = JobSettings.TrackNewRecipientsRecurringJobCronExpression,
Method = typeof(PushMessageJobService).GetMethod(nameof(TrackNewRecipientsRecurringJob)),
MethodCall = x => x.TrackNewRecipientsRecurringJob(JobCancellationToken.Null),
});
}

public void EnqueueAddRecipients(IList<string> messageIds = null)
Expand All @@ -83,7 +65,7 @@ public async Task SendScheduledMessagesRecurringJob(IJobCancellationToken cancel
searchCriteria.Statuses = [PushMessageStatus.Scheduled];
searchCriteria.StartDateBefore = DateTime.UtcNow;
searchCriteria.Sort = $"{nameof(PushMessage.StartDate)};{nameof(PushMessage.CreatedDate)}";
searchCriteria.Take = await _settingsManager.GetValueAsync<int>(GeneralSettings.BatchSize);
searchCriteria.Take = await GetBatchSize();

await _messageSearchService.SearchWhileResultIsNotEmpty(searchCriteria, async searchResult =>
{
Expand All @@ -102,7 +84,7 @@ public async Task TrackNewRecipientsRecurringJob(IJobCancellationToken cancellat
searchCriteria.TrackNewRecipients = true;
searchCriteria.CreatedDateBefore = DateTime.UtcNow;
searchCriteria.ResponseGroup = PushMessageResponseGroup.WithMembers.ToString();
searchCriteria.Take = await _settingsManager.GetValueAsync<int>(GeneralSettings.BatchSize);
searchCriteria.Take = await GetBatchSize();

await foreach (var searchResult in _messageSearchService.SearchBatchesNoCloneAsync(searchCriteria))
{
Expand Down Expand Up @@ -145,7 +127,7 @@ private async Task<HashSet<string>> GetExistingRecipientUserIds(string messageId
var searchCriteria = AbstractTypeFactory<PushMessageRecipientSearchCriteria>.TryCreateInstance();
searchCriteria.MessageId = messageId;
searchCriteria.WithHidden = true;
searchCriteria.Take = await _settingsManager.GetValueAsync<int>(GeneralSettings.BatchSize);
searchCriteria.Take = await GetBatchSize();

var userIds = new HashSet<string>();

Expand All @@ -164,7 +146,7 @@ private async Task<IList<PushMessageRecipient>> GetNewRecipients(PushMessage mes

var searchCriteria = AbstractTypeFactory<MembersSearchCriteria>.TryCreateInstance();
searchCriteria.ResponseGroup = MemberResponseGroup.WithSecurityAccounts.ToString();
searchCriteria.Take = await _settingsManager.GetValueAsync<int>(GeneralSettings.BatchSize);
searchCriteria.Take = await GetBatchSize();
var queue = new Queue<Member>();

if (!message.MemberIds.IsNullOrEmpty())
Expand Down Expand Up @@ -235,4 +217,9 @@ private static PushMessageRecipient GetRecipient(PushMessage message, Member mem

return recipient;
}

private Task<int> GetBatchSize()
{
return _settingsManager.GetValueAsync<int>(GeneralSettings.BatchSize);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Hangfire;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using VirtoCommerce.Platform.Hangfire;
using VirtoCommerce.PushMessages.Data.BackgroundJobs;
using JobSettings = VirtoCommerce.PushMessages.Core.ModuleConstants.Settings.BackgroundJobs;

namespace VirtoCommerce.PushMessages.Data.Extensions;

public static class ApplicationBuilderExtensions
{
public static IApplicationBuilder UsePushMessageJobs(this IApplicationBuilder appBuilder)
{
var recurringJobService = appBuilder.ApplicationServices.GetService<IRecurringJobService>();

recurringJobService.WatchJobSetting(
new SettingCronJobBuilder()
.SetEnablerSetting(JobSettings.SendScheduledMessagesRecurringJobEnable)
.SetCronSetting(JobSettings.SendScheduledMessagesRecurringJobCronExpression)
.ToJob<PushMessageJobService>(x => x.SendScheduledMessagesRecurringJob(JobCancellationToken.Null))
.Build());

recurringJobService.WatchJobSetting(
new SettingCronJobBuilder()
.SetEnablerSetting(JobSettings.TrackNewRecipientsRecurringJobEnable)
.SetCronSetting(JobSettings.TrackNewRecipientsRecurringJobCronExpression)
.ToJob<PushMessageJobService>(x => x.TrackNewRecipientsRecurringJob(JobCancellationToken.Null))
.Build());

return appBuilder;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public virtual async Task<IList<PushMessageEntity>> GetMessagesByIdsAsync(IList<

if (messages.Count > 0)
{
var responseGroupEnum = EnumUtility.SafeParseFlags(responseGroup, PushMessageResponseGroup.Full);
var responseGroupEnum = EnumUtility.SafeParseFlags(responseGroup, PushMessageResponseGroup.Default);

if (responseGroupEnum.HasFlag(PushMessageResponseGroup.WithMembers))
{
Expand Down
Loading

0 comments on commit 72ed4b8

Please sign in to comment.