예제 #1
0
        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.");
        }