public async Task <PetrolStationDetailsResponse> GetPetrolStationDetails([FromRoute] Guid id) { var petrolStation = await repository.GetAsync(id); var response = new PetrolStationDetailsResponse( id: petrolStation.Id, name: petrolStation.Name, time: petrolStation.Time, tanks: petrolStation.Tanks?.Select(x => new TankResponse( id: x.Id, maximumVolume: x.MaximumVolume, currentVolume: x.CurrentVolume, petrolTemperature: x.PetrolTemperature, tankHigh: x.TankHigh, nozzleResponses: x.Nozzles?.Select(z => new NozzleResponse( id: z.Id, lastTransactionVolume: z.LastTransactionVolume, totalStolenPetrolAmount: z.TotalStolenPetrolAmount, lastStolenPetrolAmount: z.LastStolenPetrolAmount, totalPetrolAmount: z.TotalPetrolAmount)).ToList())).ToList(), raports: petrolStation.Reports?.OrderByDescending(x => x.TimeStamp).Select(x => new PetrolStationRaportResponse( tankId: x.TankId, nozzleId: x.NozzleId, timeStamp: x.TimeStamp, report: x.Report, status: x.Status.ToString())).ToList()); return(response); }
public async Task Handle(NozzleUsed @event) { logger.LogDebug($"Nozzle used event received. Id: {@event.Id}"); 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.Id)); var nozzle = tank.Nozzles.Single(z => z.Id == @event.Id); nozzle.LastTransactionVolume = @event.PetrolAmountInTransaction; nozzle.TotalPetrolAmount = @event.TotalDispatchedPetrolAmount; var report = factory.CreateReportForNozzleUsed(tank.Id, @event); if (petrolStation.Reports == null) { petrolStation.Reports = new List <PetrolStationReport>(); } petrolStation.Reports.Add(report); tank.CurrentVolume -= @event.PetrolAmountInTransaction; await repository.UpdateAsync(petrolStation); await hub.Clients.All.SendAsync("StationUpdate", petrolStation.Id); logger.LogDebug($"Nozzle used event received handling ended."); }