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(); } }
public async Task UpdateAsync(TrackedVehicle trackedVehicle) { await _repository.UpdateAsync(trackedVehicle) .AnyContext(); }