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); } }
public Task CompensateAsync(ParcelAddedToOrder message, ISagaContext context) => _publisher.SendAsync(new CancelOrder(message.OrderId, "Because I'm saga"), _accessor.CorrelationContext);
public Task HandleAsync(ParcelAddedToOrder @event) => _coordinator.ProcessAsync(@event, SagaContext.Empty);