Browse Source

Extract EventTimeChangingEventData

pull/29/head
Halil İbrahim Kalkan 6 years ago
parent
commit
b0649a1975
  1. 27
      src/EventHub.Application/Events/EventAppService.cs
  2. 24
      src/EventHub.Domain/Events/Event.cs
  3. 1
      src/EventHub.Domain/Events/EventManager.cs
  4. 48
      src/EventHub.Domain/Events/EventTimeChangeLocalEventHandler.cs
  5. 18
      src/EventHub.Domain/Events/EventTimeChangingEventData.cs
  6. 3
      test/EventHub.Application.Tests/Events/EventAppServiceTests.cs

27
src/EventHub.Application/Events/EventAppService.cs

@ -25,7 +25,6 @@ namespace EventHub.Events
private readonly IRepository<AppUser, Guid> _userRepository;
private readonly IRepository<Country, Guid> _countriesRepository;
private readonly IBlobContainer<EventCoverImageContainer> _eventBlobContainer;
private readonly IRepository<EventRegistration, Guid> _eventRegistrationRepository;
public EventAppService(
EventManager eventManager,
@ -34,8 +33,7 @@ namespace EventHub.Events
IRepository<Organization, Guid> organizationRepository,
IRepository<AppUser, Guid> userRepository,
IRepository<Country, Guid> countriesRepository,
IBlobContainer<EventCoverImageContainer> eventBlobContainer,
IRepository<EventRegistration, Guid> eventRegistrationRepository)
IBlobContainer<EventCoverImageContainer> eventBlobContainer)
{
_eventManager = eventManager;
_eventRegistrationManager = eventRegistrationManager;
@ -44,7 +42,6 @@ namespace EventHub.Events
_userRepository = userRepository;
_countriesRepository = countriesRepository;
_eventBlobContainer = eventBlobContainer;
_eventRegistrationRepository = eventRegistrationRepository;
}
[Authorize]
@ -238,9 +235,8 @@ namespace EventHub.Events
}
@event.SetTime(input.StartTime, input.EndTime);
@event.TimingChangeCount = @event.TimingChangeCount + 1;
await UpdateEventRegistrationForTimingChangeAsync(@event);
@event.TimingChangeCount++;
await _eventRepository.UpdateAsync(@event);
}
@ -258,22 +254,5 @@ namespace EventHub.Events
return await _eventBlobContainer.GetAllBytesOrNullAsync(blobName);
}
private async Task UpdateEventRegistrationForTimingChangeAsync(Event @event)
{
var eventRegistrationQueryable = await _eventRegistrationRepository.GetQueryableAsync();
var query = eventRegistrationQueryable.Where(x => x.EventId == @event.Id);
var eventRegistrations = await AsyncExecuter.ToListAsync(query);
foreach (var eventRegistration in eventRegistrations)
{
if (eventRegistration.IsTimingChangeEmailSent)
{
eventRegistration.IsTimingChangeEmailSent = false;
}
}
await _eventRegistrationRepository.UpdateManyAsync(eventRegistrations, true);
}
}
}

24
src/EventHub.Domain/Events/Event.cs

@ -57,7 +57,7 @@ namespace EventHub.Events
UrlCode = Check.NotNullOrWhiteSpace(urlCode, urlCode, EventConsts.UrlCodeLength, EventConsts.UrlCodeLength);
SetTitle(title);
SetDescription(description);
SetTime(startTime, endTime);
SetTimeInternal(startTime, endTime);
}
public Event SetTitle(string title)
@ -75,14 +75,8 @@ namespace EventHub.Events
public Event SetTime(DateTime startTime, DateTime endTime)
{
if (startTime > endTime)
{
throw new BusinessException(EventHubErrorCodes.EventEndTimeCantBeEarlierThanStartTime);
}
StartTime = startTime;
EndTime = endTime;
return this;
AddLocalEvent(new EventTimeChangingEventData(this, StartTime, EndTime));
return SetTimeInternal(startTime, endTime);
}
public Event SetLocation(
@ -108,5 +102,17 @@ namespace EventHub.Events
return this;
}
private Event SetTimeInternal(DateTime startTime, DateTime endTime)
{
if (startTime > endTime)
{
throw new BusinessException(EventHubErrorCodes.EventEndTimeCantBeEarlierThanStartTime);
}
StartTime = startTime;
EndTime = endTime;
return this;
}
}
}

1
src/EventHub.Domain/Events/EventManager.cs

@ -1,4 +1,5 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using EventHub.Events.Registrations;
using EventHub.Organizations;

48
src/EventHub.Domain/Events/EventTimeChangeLocalEventHandler.cs

@ -0,0 +1,48 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using EventHub.Events.Registrations;
using IdentityServer4.Validation;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.EventBus;
using Volo.Abp.Linq;
namespace EventHub.Events
{
public class EventTimeChangeLocalEventHandler : ILocalEventHandler<EventTimeChangingEventData>, ITransientDependency
{
private readonly IRepository<EventRegistration, Guid> _eventRegistrationRepository;
private readonly IAsyncQueryableExecuter _asyncExecuter;
public EventTimeChangeLocalEventHandler(
IRepository<EventRegistration, Guid> eventRegistrationRepository,
IAsyncQueryableExecuter asyncExecuter)
{
_eventRegistrationRepository = eventRegistrationRepository;
_asyncExecuter = asyncExecuter;
}
public async Task HandleEventAsync(EventTimeChangingEventData eventData)
{
await UpdateEventRegistrationForTimingChangeAsync(@eventData.Event);
}
private async Task UpdateEventRegistrationForTimingChangeAsync(Event @event)
{
var eventRegistrationQueryable = await _eventRegistrationRepository.GetQueryableAsync();
var query = eventRegistrationQueryable.Where(x => x.EventId == @event.Id);
var eventRegistrations = await _asyncExecuter.ToListAsync(query);
foreach (var eventRegistration in eventRegistrations)
{
if (eventRegistration.IsTimingChangeEmailSent)
{
eventRegistration.IsTimingChangeEmailSent = false;
}
}
await _eventRegistrationRepository.UpdateManyAsync(eventRegistrations, true);
}
}
}

18
src/EventHub.Domain/Events/EventTimeChangingEventData.cs

@ -0,0 +1,18 @@
using System;
namespace EventHub.Events
{
public class EventTimeChangingEventData
{
public Event Event { get; }
public DateTime OldStartTime { get; }
public DateTime OldEndTime { get; }
public EventTimeChangingEventData(Event @event, DateTime oldStartTime, DateTime oldEndTime)
{
Event = @event;
OldStartTime = oldStartTime;
OldEndTime = oldEndTime;
}
}
}

3
test/EventHub.Application.Tests/Events/EventAppServiceTests.cs

@ -4,6 +4,7 @@ using System.Threading.Tasks;
using EventHub.Events.Registrations;
using Shouldly;
using Volo.Abp;
using Volo.Abp.Authorization;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Timing;
using Xunit;
@ -54,7 +55,7 @@ namespace EventHub.Events
[Fact]
public async Task Should_Not_Create_Event_For_Not_Authorized_Organization()
{
var exception = await Assert.ThrowsAsync<BusinessException>(async () =>
var exception = await Assert.ThrowsAsync<AbpAuthorizationException>(async () =>
{
await _eventAppService.CreateAsync(
new CreateEventDto

Loading…
Cancel
Save