Browse Source

Refactored, created indexes, added TODO notes.

pull/29/head
Halil İbrahim Kalkan 6 years ago
parent
commit
d98181ade5
  1. 15
      src/EventHub.BackgroundServices/Events/EventReminderWorker.cs
  2. 2
      src/EventHub.BackgroundServices/Events/EventTimingChangeNotifier.cs
  3. 2
      src/EventHub.BackgroundServices/Events/NewEventNotifier.cs
  4. 11
      src/EventHub.BackgroundServices/Events/NewEventWorker.cs
  5. 2637
      src/EventHub.EntityFrameworkCore.DbMigrations/Migrations/20210321144318_Added_Indexes.Designer.cs
  6. 31
      src/EventHub.EntityFrameworkCore.DbMigrations/Migrations/20210321144318_Added_Indexes.cs
  7. 6
      src/EventHub.EntityFrameworkCore.DbMigrations/Migrations/EventHubMigrationsDbContextModelSnapshot.cs
  8. 2
      src/EventHub.EntityFrameworkCore/EntityFrameworkCore/EventHubDbContextModelCreatingExtensions.cs

15
src/EventHub.BackgroundServices/Events/EventReminderWorker.cs

@ -7,6 +7,7 @@ using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Linq;
using Volo.Abp.Threading;
using Volo.Abp.Timing;
using Volo.Abp.Uow;
namespace EventHub.Events
@ -25,15 +26,13 @@ namespace EventHub.Events
var eventReminderNotifier = workerContext.ServiceProvider.GetRequiredService<EventReminderNotifier>();
var eventRepository = workerContext.ServiceProvider.GetRequiredService<IRepository<Event, Guid>>();
var asyncExecuter = workerContext.ServiceProvider.GetRequiredService<IAsyncQueryableExecuter>();
var clock = workerContext.ServiceProvider.GetRequiredService<IClock>();
var thirtyMinutesAfter = DateTime.Now.AddMinutes(30);
var oneMinutesAfter = DateTime.Now.AddMinutes(1);
var thirtyMinutesLater = clock.Now.AddMinutes(30);
var queryable = await eventRepository.GetQueryableAsync();
var query = queryable.Where(x =>
x.IsRemindingEmailSent == false &&
x.StartTime <= thirtyMinutesAfter &&
x.StartTime >= oneMinutesAfter
x.StartTime <= thirtyMinutesLater
);
var events = await asyncExecuter.ToListAsync(query);
@ -42,7 +41,11 @@ namespace EventHub.Events
{
try
{
await eventReminderNotifier.NotifyAsync(@event);
if (@event.StartTime >= clock.Now)
{
await eventReminderNotifier.NotifyAsync(@event);
}
@event.IsRemindingEmailSent = true;
await eventRepository.UpdateAsync(@event);
}

2
src/EventHub.BackgroundServices/Events/EventTimingChangeNotifier.cs

@ -40,6 +40,8 @@ namespace EventHub.Events
{
return;
}
//TODO: It will be more performant if we join to users instead of individually query (already done for EventReminderNotifier)
var queryable = await _eventRegistrationRepository.GetQueryableAsync();
var registrations = await _asyncExecuter.ToListAsync(

2
src/EventHub.BackgroundServices/Events/NewEventNotifier.cs

@ -36,6 +36,8 @@ namespace EventHub.Events
public async Task NotifyAsync(Event @event)
{
//TODO: It will be more performant if we join to users instead of individually query (already done for EventReminderNotifier)
var queryable = await _organizationMembershipsRepository.GetQueryableAsync();
var organizationMembers = await _asyncExecuter.ToListAsync(
queryable.Where(x => x.OrganizationId == @event.OrganizationId)

11
src/EventHub.BackgroundServices/Events/NewEventWorker.cs

@ -7,6 +7,7 @@ using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Linq;
using Volo.Abp.Threading;
using Volo.Abp.Timing;
using Volo.Abp.Uow;
namespace EventHub.Events
@ -29,17 +30,23 @@ namespace EventHub.Events
var newEventNotifier = workerContext.ServiceProvider.GetRequiredService<NewEventNotifier>();
var eventRepository = workerContext.ServiceProvider.GetRequiredService<IRepository<Event, Guid>>();
var asyncExecuter = workerContext.ServiceProvider.GetRequiredService<IAsyncQueryableExecuter>();
var clock = workerContext.ServiceProvider.GetRequiredService<IClock>();
var queryable = await eventRepository.GetQueryableAsync();
var newEvents = await asyncExecuter.ToListAsync(
queryable.Where(x => x.IsEmailSentToMembers == false)
);
var fiveMinutesLater = clock.Now.AddMinutes(5);
foreach (var @event in newEvents)
{
try
{
await newEventNotifier.NotifyAsync(@event);
if (@event.StartTime >= fiveMinutesLater)
{
await newEventNotifier.NotifyAsync(@event);
}
@event.IsEmailSentToMembers = true;
await eventRepository.UpdateAsync(@event);
}

2637
src/EventHub.EntityFrameworkCore.DbMigrations/Migrations/20210321144318_Added_Indexes.Designer.cs

File diff suppressed because it is too large

31
src/EventHub.EntityFrameworkCore.DbMigrations/Migrations/20210321144318_Added_Indexes.cs

@ -0,0 +1,31 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace EventHub.Migrations
{
public partial class Added_Indexes : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateIndex(
name: "IX_EhEvents_IsEmailSentToMembers",
table: "EhEvents",
column: "IsEmailSentToMembers");
migrationBuilder.CreateIndex(
name: "IX_EhEvents_IsRemindingEmailSent_StartTime",
table: "EhEvents",
columns: new[] { "IsRemindingEmailSent", "StartTime" });
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_EhEvents_IsEmailSentToMembers",
table: "EhEvents");
migrationBuilder.DropIndex(
name: "IX_EhEvents_IsRemindingEmailSent_StartTime",
table: "EhEvents");
}
}
}

6
src/EventHub.EntityFrameworkCore.DbMigrations/Migrations/EventHubMigrationsDbContextModelSnapshot.cs

@ -18,7 +18,7 @@ namespace EventHub.Migrations
modelBuilder
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
.HasAnnotation("Relational:MaxIdentifierLength", 128)
.HasAnnotation("ProductVersion", "5.0.3")
.HasAnnotation("ProductVersion", "5.0.4")
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
modelBuilder.Entity("EventHub.Countries.Country", b =>
@ -148,10 +148,14 @@ namespace EventHub.Migrations
b.HasIndex("CountryId");
b.HasIndex("IsEmailSentToMembers");
b.HasIndex("StartTime");
b.HasIndex("UrlCode");
b.HasIndex("IsRemindingEmailSent", "StartTime");
b.HasIndex("OrganizationId", "StartTime");
b.ToTable("EhEvents");

2
src/EventHub.EntityFrameworkCore/EntityFrameworkCore/EventHubDbContextModelCreatingExtensions.cs

@ -76,6 +76,8 @@ namespace EventHub.EntityFrameworkCore
b.HasIndex(x => new {x.OrganizationId, x.StartTime});
b.HasIndex(x => x.StartTime);
b.HasIndex(x => x.UrlCode);
b.HasIndex(x => new {x.IsRemindingEmailSent, x.StartTime});
b.HasIndex(x => x.IsEmailSentToMembers);
});
builder.Entity<EventRegistration>(b =>

Loading…
Cancel
Save