public async Task Handle(PetrolStolenByCustomer @event) { logger.LogDebug($"Petrol stolen by customer event received. Id: {@event.NozzleId}"); var petrolStation = await repository.GetAsync(callContext.PetrolStationId.Value); petrolStation.Time = @event.TimeStamp; var tank = petrolStation.Tanks.SingleOrDefault(x => x.Nozzles.Any(z => z.Id == @event.NozzleId)); tank.CurrentVolume -= @event.PetrolAmountInTransaction; var nozzle = tank.Nozzles.Single(z => z.Id == @event.NozzleId); nozzle.LastTransactionVolume = @event.PetrolAmountInTransaction; nozzle.TotalPetrolAmount = @event.TotalDispatchedPetrolAmount; nozzle.LastStolenPetrolAmount = @event.PetrolAmountInTransaction; nozzle.TotalStolenPetrolAmount = @event.TotalStolenPetrolAmount; var report = factory.CreateReportForPetrolStolenByCustomer(tank.Id, @event); if (petrolStation.Reports == null) { petrolStation.Reports = new List <PetrolStationReport>(); } petrolStation.Reports.Add(report); await repository.UpdateAsync(petrolStation); await hub.Clients.All.SendAsync("StationUpdate", petrolStation.Id); logger.LogDebug($"Petrol stolen by customer event received handling ended."); }
private IEvent FinishUsingNozzle(DateTime currentDateTime) { TotalPetrolAmount += PetrolAmountInCurrentTransaction; IsCurrentlyInUse = false; IEvent eventToPublish; if (CurrentClient.PayForOrder()) { TotalStolenPetrolAmount += 0; LastStolenPetrolAmount = 0; eventToPublish = new NozzleUsed(Id, currentDateTime, PetrolAmountInCurrentTransaction, TotalPetrolAmount); PetrolAmountInCurrentTransaction = 0; } else { TotalStolenPetrolAmount += PetrolAmountInCurrentTransaction; LastStolenPetrolAmount = PetrolAmountInCurrentTransaction; eventToPublish = new PetrolStolenByCustomer(Id, currentDateTime, LastStolenPetrolAmount, TotalStolenPetrolAmount, TotalPetrolAmount); PetrolAmountInCurrentTransaction = 0; } return(eventToPublish); }
public PetrolStationReport CreateReportForPetrolStolenByCustomer(Guid tankId, PetrolStolenByCustomer @event) { return(new PetrolStationReport() { TankId = tankId, NozzleId = @event.NozzleId, TimeStamp = @event.TimeStamp, Report = $"Petrol stolen by customer. Petrol amount in transaction: {@event.PetrolAmountInTransaction}. Total stolen petrol amount: {@event.TotalStolenPetrolAmount}. Total dispatched petrol amount: {@event.TotalDispatchedPetrolAmount}.", Status = ReportStatus.PetrolStolenByCustomer }); }