From ccb3a7f26e790f23dd23b4dbe916c22d48d03ef1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 22 Jul 2021 11:59:56 +0300 Subject: [PATCH] Refactored --- .../Events/EventAppService.cs | 1 + .../EventHubErrorCodes.cs | 4 +- .../Data/EventHubDataSeedContributor.cs | 1 + src/EventHub.Domain/Events/Event.cs | 56 +++++++++++++++---- .../EventTimeChangeLocalEventHandler.cs | 30 ---------- .../Events/EventTimeChangingEventData.cs | 18 ------ src/EventHub.Domain/Events/Track.cs | 27 +++++++++ .../Events/EventTests.cs | 2 +- 8 files changed, 78 insertions(+), 61 deletions(-) delete mode 100644 src/EventHub.Domain/Events/EventTimeChangeLocalEventHandler.cs delete mode 100644 src/EventHub.Domain/Events/EventTimeChangingEventData.cs diff --git a/src/EventHub.Application/Events/EventAppService.cs b/src/EventHub.Application/Events/EventAppService.cs index 78e5194..e98c016 100644 --- a/src/EventHub.Application/Events/EventAppService.cs +++ b/src/EventHub.Application/Events/EventAppService.cs @@ -267,6 +267,7 @@ namespace EventHub.Events var @event = await _eventRepository.GetAsync(id); @event.AddSession( input.TrackId, + GuidGenerator.Create(), input.Title, input.StartTime, input.EndTime, diff --git a/src/EventHub.Domain.Shared/EventHubErrorCodes.cs b/src/EventHub.Domain.Shared/EventHubErrorCodes.cs index c92a112..8268063 100644 --- a/src/EventHub.Domain.Shared/EventHubErrorCodes.cs +++ b/src/EventHub.Domain.Shared/EventHubErrorCodes.cs @@ -4,7 +4,7 @@ { public const string OrganizationNameAlreadyExists = "EventHub:OrganizationNameAlreadyExists"; public const string NotAuthorizedToCreateEventInThisOrganization = "EventHub:NotAuthorizedToCreateEventInThisOrganization"; - public const string EventEndTimeCantBeEarlierThanStartTime = "EventHub:EventEndTimeCantBeEarlierThanStartTime"; + public const string EndTimeCantBeEarlierThanStartTime = "EventHub:EndTimeCantBeEarlierThanStartTime"; public const string SessionEndTimeCantBeEarlierThanStartTime = "EventHub:SessionEndTimeCantBeEarlierThanStartTime"; public const string CantRegisterOrUnregisterForAPastEvent = "EventHub:CantRegisterOrUnregisterForAPastEvent"; public const string NotAuthorizedToUpdateOrganizationProfile = "EventHub:NotAuthorizedToUpdateOrganizationProfile"; @@ -12,5 +12,7 @@ public const string CapacityCantBeLowerThanRegisteredUserCount = "EventHub:CapacityCantBeLowerThanRegisteredUserCount"; public const string NotAuthorizedToUpdateEvent = "EventHub:NotAuthorizedToUpdateEvent"; public const string CantChangeEventTiming = "EventHub:CantChangeEventTiming"; + public const string SessionTimeShouldBeInTheEventTime = "EventHub:SessionTimeShouldBeInTheEventTime"; + public const string SessionTimeConflictsWithAnExistingSession = "EventHub:SessionTimeConflictsWithAnExistingSession"; } } diff --git a/src/EventHub.Domain/Data/EventHubDataSeedContributor.cs b/src/EventHub.Domain/Data/EventHubDataSeedContributor.cs index 29e9daf..b58a6e5 100644 --- a/src/EventHub.Domain/Data/EventHubDataSeedContributor.cs +++ b/src/EventHub.Domain/Data/EventHubDataSeedContributor.cs @@ -32,6 +32,7 @@ namespace EventHub.Data var countries = new List { + //TODO: Use IGuidGenerator new Country(Guid.NewGuid(), "Afghanistan"), new Country(Guid.NewGuid(), "Albania"), new Country(Guid.NewGuid(), "Algeria"), diff --git a/src/EventHub.Domain/Events/Event.cs b/src/EventHub.Domain/Events/Event.cs index 87eeca4..9cc860c 100644 --- a/src/EventHub.Domain/Events/Event.cs +++ b/src/EventHub.Domain/Events/Event.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Linq; using Volo.Abp; +using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities.Auditing; namespace EventHub.Events @@ -45,9 +47,8 @@ namespace EventHub.Events public bool IsTimingChangeEmailSent { get; set; } public bool IsDraft { get; set; } - public ICollection Tracks { get; private set; } - + private Event() { @@ -92,16 +93,24 @@ namespace EventHub.Events { return this; } - - if (TimingChangeCount >= EventConsts.MaxTimingChangeCountForUser) + + if (!IsDraft) { - throw new BusinessException(EventHubErrorCodes.CantChangeEventTiming) - .WithData("MaxTimingChangeLimit", EventConsts.MaxTimingChangeCountForUser); + if (TimingChangeCount >= EventConsts.MaxTimingChangeCountForUser) + { + throw new BusinessException(EventHubErrorCodes.CantChangeEventTiming) + .WithData("MaxTimingChangeLimit", EventConsts.MaxTimingChangeCountForUser); + } } SetTimeInternal(startTime, endTime); - TimingChangeCount++; - AddLocalEvent(new EventTimeChangingEventData(this, StartTime, EndTime)); + + if (!IsDraft) + { + TimingChangeCount++; + IsTimingChangeEmailSent = false; + } + return this; } @@ -109,7 +118,7 @@ namespace EventHub.Events { if (startTime > endTime) { - throw new BusinessException(EventHubErrorCodes.EventEndTimeCantBeEarlierThanStartTime); + throw new BusinessException(EventHubErrorCodes.EndTimeCantBeEarlierThanStartTime); } StartTime = startTime; @@ -117,9 +126,34 @@ namespace EventHub.Events return this; } - public void AddSession(Guid trackId, string title, DateTime startTime, DateTime endTime, string description, string language) + public Event AddSession( + Guid trackId, + Guid sessionId, + string title, + DateTime startTime, + DateTime endTime, + string description, + string language) + { + if (startTime > endTime) + { + throw new BusinessException(EventHubErrorCodes.EndTimeCantBeEarlierThanStartTime); + } + + if (startTime < this.StartTime || this.EndTime < endTime) + { + throw new BusinessException(EventHubErrorCodes.SessionTimeShouldBeInTheEventTime); + } + + var track = GetTrack(trackId); + track.AddSession(sessionId, title, startTime, endTime, description, language); + return this; + } + + private Track GetTrack(Guid trackId) { - throw new NotImplementedException(); + return Tracks.FirstOrDefault(t => t.Id == trackId) ?? + throw new EntityNotFoundException(typeof(Track), trackId); } } } diff --git a/src/EventHub.Domain/Events/EventTimeChangeLocalEventHandler.cs b/src/EventHub.Domain/Events/EventTimeChangeLocalEventHandler.cs deleted file mode 100644 index 492a64d..0000000 --- a/src/EventHub.Domain/Events/EventTimeChangeLocalEventHandler.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Domain.Repositories; -using Volo.Abp.EventBus; - -namespace EventHub.Events -{ - public class EventTimeChangeLocalEventHandler : ILocalEventHandler, ITransientDependency - { - private readonly IRepository _eventRepository; - - public EventTimeChangeLocalEventHandler(IRepository eventRepository) - { - _eventRepository = eventRepository; - } - - public async Task HandleEventAsync(EventTimeChangingEventData eventData) - { - await UpdateEventForTimingChangeAsync(eventData.Event); - } - - private async Task UpdateEventForTimingChangeAsync(Event @event) - { - @event.IsTimingChangeEmailSent = false; - - await _eventRepository.UpdateAsync(@event, true); - } - } -} \ No newline at end of file diff --git a/src/EventHub.Domain/Events/EventTimeChangingEventData.cs b/src/EventHub.Domain/Events/EventTimeChangingEventData.cs deleted file mode 100644 index cf57a1a..0000000 --- a/src/EventHub.Domain/Events/EventTimeChangingEventData.cs +++ /dev/null @@ -1,18 +0,0 @@ -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; - } - } -} \ No newline at end of file diff --git a/src/EventHub.Domain/Events/Track.cs b/src/EventHub.Domain/Events/Track.cs index 908308f..96970ae 100644 --- a/src/EventHub.Domain/Events/Track.cs +++ b/src/EventHub.Domain/Events/Track.cs @@ -35,5 +35,32 @@ namespace EventHub.Events Name = Check.NotNullOrWhiteSpace(name, nameof(name), TrackConsts.MaxNameLength); return this; } + + internal Track AddSession( + Guid sessionId, + string title, + DateTime startTime, + DateTime endTime, + string description, + string language) + { + if (startTime > endTime) + { + throw new BusinessException(EventHubErrorCodes.EndTimeCantBeEarlierThanStartTime); + } + + foreach (var session in Sessions) + { + if (startTime.IsBetween(session.StartTime, session.EndTime) || + endTime.IsBetween(session.StartTime, session.EndTime)) + { + throw new BusinessException(EventHubErrorCodes.SessionTimeConflictsWithAnExistingSession); + } + } + + Sessions.Add(new Session(sessionId, Id, title, startTime, endTime, description)); + + return this; + } } } \ No newline at end of file diff --git a/test/EventHub.Domain.Tests/Events/EventTests.cs b/test/EventHub.Domain.Tests/Events/EventTests.cs index 18a23a4..1812363 100644 --- a/test/EventHub.Domain.Tests/Events/EventTests.cs +++ b/test/EventHub.Domain.Tests/Events/EventTests.cs @@ -23,7 +23,7 @@ namespace EventHub.Events ); }); - exception.Code.ShouldBe(EventHubErrorCodes.EventEndTimeCantBeEarlierThanStartTime); + exception.Code.ShouldBe(EventHubErrorCodes.EndTimeCantBeEarlierThanStartTime); } } }