Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }