Example #1
0
        public async Task HandleAsync(TrackVehicleCommand command)
        {
            var alreayTracked = await _trackedVehicleRepository.ExistsAsync(command.VehicleId)
                                .AnyContext();

            var customerId = "";

            try
            {
                if (alreayTracked)
                {
                    throw new AccException("vehicle_already_tracked", $"Vehicle: '{command.VehicleId}' already tracked.");
                }

                var vehicle = await _vehicleService.GetAsync(command.VehicleId)
                              .AnyContext();

                if (vehicle == null)
                {
                    throw new AccException("vehicle_not_found", $"Vehicle: '{command.VehicleId}' was not found");
                }
                customerId = vehicle.OwnerId;

                var customer = await _customerService.GetAsync(vehicle.OwnerId)
                               .AnyContext();

                if (customer == null)
                {
                    throw new AccException("customer_not_found", $"Customer: '{vehicle.OwnerId}' was not found");
                }

                var trackedVehicle = new TrackedVehicle(vehicle.Id, command.IPAddress, vehicle.RegNr, customer.Id.ToLower(), customer.Name, customer.Address);

                await _trackedVehicleRepository.AddAsync(trackedVehicle)
                .AnyContext();

                await _busPublisher.PublishAsync(new VehicleTrackedEvent(vehicle.Id))
                .AnyContext();
            }
            catch (AccException ex)
            {
                await _busPublisher.PublishAsync(new TrackVehicleRejectedEvent(command.VehicleId, customerId, ex.Code, ex.Message))
                .AnyContext();
            }
        }
Example #2
0
 public async Task UpdateAsync(TrackedVehicle trackedVehicle)
 {
     await _repository.UpdateAsync(trackedVehicle)
     .AnyContext();
 }