Browse Source

Refactored

pull/79/head
Halil İbrahim Kalkan 5 years ago
parent
commit
ccb3a7f26e
  1. 1
      src/EventHub.Application/Events/EventAppService.cs
  2. 4
      src/EventHub.Domain.Shared/EventHubErrorCodes.cs
  3. 1
      src/EventHub.Domain/Data/EventHubDataSeedContributor.cs
  4. 56
      src/EventHub.Domain/Events/Event.cs
  5. 30
      src/EventHub.Domain/Events/EventTimeChangeLocalEventHandler.cs
  6. 18
      src/EventHub.Domain/Events/EventTimeChangingEventData.cs
  7. 27
      src/EventHub.Domain/Events/Track.cs
  8. 2
      test/EventHub.Domain.Tests/Events/EventTests.cs

1
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,

4
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";
}
}

1
src/EventHub.Domain/Data/EventHubDataSeedContributor.cs

@ -32,6 +32,7 @@ namespace EventHub.Data
var countries = new List<Country>
{
//TODO: Use IGuidGenerator
new Country(Guid.NewGuid(), "Afghanistan"),
new Country(Guid.NewGuid(), "Albania"),
new Country(Guid.NewGuid(), "Algeria"),

56
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<Track> 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);
}
}
}

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

@ -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<EventTimeChangingEventData>, ITransientDependency
{
private readonly IRepository<Event, Guid> _eventRepository;
public EventTimeChangeLocalEventHandler(IRepository<Event, Guid> 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);
}
}
}

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

@ -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;
}
}
}

27
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;
}
}
}

2
test/EventHub.Domain.Tests/Events/EventTests.cs

@ -23,7 +23,7 @@ namespace EventHub.Events
);
});
exception.Code.ShouldBe(EventHubErrorCodes.EventEndTimeCantBeEarlierThanStartTime);
exception.Code.ShouldBe(EventHubErrorCodes.EndTimeCantBeEarlierThanStartTime);
}
}
}

Loading…
Cancel
Save