public async Task create_airplane_with_existing_registration_number_failed_published_create_airplane_rejected() { _airplanesRepository.GetAsync(_airplaneRegistraionNumber) .Returns(new Airplane(_id, _airplaneRegistraionNumber, _model, _availableSeats, _requiredCrew)); try { await _commandHandler.HandleAsync(_command, _correlationContext); } catch (Exception ex) { if (ex is BeComfyException) { await _busPublisher.PublishAsync(new CreateAirplaneRejected(_command.AirplaneId, _command.AirplaneRegistrationNumber, _command.AirplaneModel, "airplane_already_exists", $"Airplane with registration number: '{_command.AirplaneRegistrationNumber}' already exists." ), _correlationContext); } } await _busPublisher .Received() .PublishAsync(Arg.Is <CreateAirplaneRejected>(e => e.Id == _command.AirplaneId && e.AirplaneRegistrationNumber == _command.AirplaneRegistrationNumber && e.Code == "airplane_already_exists" && e.Reason == $"Airplane with registration number: '{_command.AirplaneRegistrationNumber}' already exists." ), _correlationContext); await _airplanesRepository.DeleteAsync(_id); }
public async Task HandleAsync(CreateAirplane command, ICorrelationContext context) { if (await _airplanesRepository.GetAsync(command.AirplaneRegistrationNumber) != null) { throw new BeComfyException("airplane_already_exists", $"Airplane with registration number: '{command.AirplaneRegistrationNumber}' already exists."); } var airplane = new Airplane(command.AirplaneId, command.AirplaneRegistrationNumber, command.AirplaneModel, command.AvailableSeats, command.RequiredCrew); await _airplanesRepository.AddAsync(airplane); await _busPublisher.PublishAsync(new AirplaneCreated(command.AirplaneId, command.AirplaneRegistrationNumber, command.AirplaneModel), context); }
public async Task HandleAsync(FlightEnded @event, ICorrelationContext context) { var airplane = await _airplanesRepository.GetAsync(@event.PlaneId); if (airplane is null) { throw new BeComfyException("cannot_end_flight", $"Cannot end flight, airplane with id: '{@event.PlaneId}' does not exist"); } airplane.IncreaseFlightsCarriedOut(); airplane.SetNextFlight(DateTime.MinValue); airplane.SetFlightEnd(DateTime.MinValue); airplane.SetAirplaneStatus(AirplaneStatus.Ready); await _airplanesRepository.UpdateAsync(airplane); }
public async Task HandleAsync(FlightCreated @event, ICorrelationContext context) { var airplane = await _airplanesRepository.GetAsync(@event.AirplaneId); if (airplane is null) { throw new BeComfyException("cannot_create_flight", $"Cannot create flight, airplane with id: '{@event.AirplaneId}' does not exist"); } airplane.SetNextFlight(@event.FlightStart); airplane.SetFlightEnd(@event.FlightEnd); airplane.SetAirplaneStatus(AirplaneStatus.Reserved); await _airplanesRepository.UpdateAsync(airplane); await _busPublisher.PublishAsync(new AirplaneReserved(airplane.Id, @event.FlightId, airplane.RequiredCrew), context); }
public async Task <AirplaneDto> HandleAsync(GetAirplane query) { var airplane = await _repository.GetAsync(query.Id); if (airplane != null) { return(new AirplaneDto() { Id = airplane.Id, Model = airplane.Model, AirplaneRegistrationNumber = airplane.AirplaneRegistrationNumber, AirplaneStatus = airplane.AirplaneStatus, AvailableSeats = airplane.AvailableSeats, NextFlight = airplane.NextFlight, FlightEnd = airplane.FlightEnd }); } return(null); }