Exemplo n.º 1
0
        public async Task HandleAsync(ParcelAddedToOrder message, ISagaContext context)
        {
            Data.AddedParcelIds.Add(message.ParcelId);

            if (Data.AllPackagesAddedToOrder)
            {
                Data.VehicleId = true? new Guid(VehicleId) : Guid.Empty; // typical AI in startups

                var resource = await _client.GetResourceReservationsAsync(Data.VehicleId);

                var latestReservation = resource.Reservations.Any()
                    ? resource.Reservations.OrderBy(r => r.DateTime).Last() : null;

                Data.ReservationDate = latestReservation?.DateTime.AddDays(1) ?? DateTime.UtcNow.AddDays(5);

                await _publisher.SendAsync(new AssignVehicleToOrder(Data.OrderId, Data.VehicleId, Data.ReservationDate),
                                           _accessor.CorrelationContext);
            }
        }
Exemplo n.º 2
0
 public Task CompensateAsync(ParcelAddedToOrder message, ISagaContext context)
 => _publisher.SendAsync(new CancelOrder(message.OrderId, "Because I'm saga"),
                         _accessor.CorrelationContext);
Exemplo n.º 3
0
 public Task HandleAsync(ParcelAddedToOrder @event)
 => _coordinator.ProcessAsync(@event, SagaContext.Empty);