public async Task <Unit> Handle(UpdateFlightCommand request, CancellationToken cancellationToken) { var entity = await _context.Flights .SingleOrDefaultAsync(c => c.DepartureAirportId == request.DepartureAirportId && c.DestinationAirportId == request.DestinationAirportId, cancellationToken); if (entity == null) { throw new NotFoundException(nameof(Flight), request.DepartureAirportId); } if (request.Distance != entity.Distance) { entity.Distance = request.Distance; } if (request.FuelConsumption != entity.FuelConsumption) { entity.FuelConsumption = request.FuelConsumption; } await _context.SaveChangesAsync(cancellationToken); return(Unit.Value); }
public async Task <FuelConsumptionModel> Handle(GetFuelConsumptionQuery request, CancellationToken cancellationToken) { var entityDeparture = await _context.Airports .SingleOrDefaultAsync(c => c.AirportId == request.DepartureAirportId, cancellationToken); if (entityDeparture == null) { throw new NotFoundException(nameof(Airport), request.DepartureAirportId); } var entityDestination = await _context.Airports .SingleOrDefaultAsync(c => c.AirportId == request.DestinationAirportId, cancellationToken); if (entityDeparture == null) { throw new NotFoundException(nameof(Airport), request.DestinationAirportId); } var queryResult = await _context.Flights.Where(filter => filter.DepartureAirportId == request.DepartureAirportId && filter.DestinationAirportId == request.DestinationAirportId).FirstOrDefaultAsync(); if (queryResult == null) { double calculatedDistance = CalcualteDistanceBetweenAirports(entityDeparture, entityDestination); queryResult = new Flight() { DepartureAirportId = request.DepartureAirportId, DestinationAirportId = request.DestinationAirportId, Distance = calculatedDistance, FuelConsumption = CaculateFuelConsumption(calculatedDistance) }; _context.Flights.Add(queryResult); await _context.SaveChangesAsync(); } return(new FuelConsumptionModel() { Consumption = queryResult.FuelConsumption, Distance = queryResult.Distance }); }