public async Task AssignCourierToDeliveryAsync(AssignCourierToDeliveryDtoSave assignCourierToDelivery) { var deliveryId = assignCourierToDelivery.DeliveryId; var courierId = assignCourierToDelivery.CourierId; var delivery = await _deliveryRepository.GetDeliveryByIdAsync(deliveryId); if (delivery == null) { throw new KeyNotFoundException($"Delivery not found with specified Id: {deliveryId}"); } var courier = await _courierRepository.GetCourierByIdAsync(courierId); if (courier == null) { throw new KeyNotFoundException($"Courier not found with specified Id: {courierId}"); } await _deliveryRepository.AssignCourierToDeliveryAsync(deliveryId, courierId); await _deliveryRepository.SetDeliveryStatusAsync(deliveryId, DeliveryStatus.CourierAssigned); var deliveryStatusChangedEvent = new CourierAssignedToDeliveryIntegrationEvent(deliveryId, courierId); _integrationEventPublisher.Publish(deliveryStatusChangedEvent); }