/// <summary> /// Creates a <see cref="StorableEvent" /> based on the specified domain event. /// </summary> /// <param name="domainEvent">The domain event.</param> public static StorableEvent ToStorableEvent(this IEvent domainEvent) { if (domainEvent == null) { throw new ArgumentNullException(nameof(domainEvent)); } string eventStreamName = null; var aggregateType = domainEvent.AggregateType(); eventStreamName = aggregateType != null ? AggregateType.EventStreamName(aggregateType) : ((dynamic)domainEvent).EventStreamName; return(new StorableEvent { Actor = domainEvent.Actor(), StreamName = eventStreamName, SequenceNumber = domainEvent.SequenceNumber, AggregateId = domainEvent.AggregateId, Type = domainEvent.EventName(), Body = JsonConvert.SerializeObject(domainEvent, Formatting.None, serializerSettings.Value), Timestamp = domainEvent.Timestamp, ETag = domainEvent.ETag, Id = domainEvent.AbsoluteSequenceNumber() }); }
internal void ScheduleIfNeeded(IEvent e) { var aggregateType = e.AggregateType(); if (e.GetType().IsConstructedGenericType&& e.GetType().GetGenericTypeDefinition() == typeof(CommandScheduled <>)) { DateTimeOffset dueTime = ((dynamic)e).DueTime; var now = Clock.Now(); if (dueTime > now) { dynamic commandScheduler = GetOrAddCommandScheduler(aggregateType); Task schedule = commandScheduler.Schedule((dynamic)e); schedule.Wait(TimeSpan.FromSeconds(5)); } } }
internal void ScheduleIfNeeded(IEvent e) { var aggregateType = e.AggregateType(); var scheduledCommand = e as IScheduledCommand; if (scheduledCommand != null) { DateTimeOffset dueTime = ((dynamic)e).DueTime; var now = Clock.Now(); if (dueTime > now) { dynamic commandScheduler = GetOrAddCommandScheduler(aggregateType); Task schedule = commandScheduler.Schedule((dynamic)e); schedule.Wait(TimeSpan.FromSeconds(5)); } } }
public static string EventStreamName(this IEvent @event) => @event.IfTypeIs <DynamicEvent>() .Then(e => e.EventStreamName) .Else(() => EventStreamName(@event.AggregateType()));