public async Task AddLaunchToProductAsync([Validate(true, 36, 36)] string productKey, Launch launch) { var keyValidation = productKey.Validate(); var launchValidation = launch.Validate(); if (keyValidation.IsValid() && launchValidation.IsValid()) { var product = await _repository.GetProductByKeyAsync(productKey); if (product != null) { launch.Key = KeyBuilder.Build(); product.ModifiedOn = DateTime.Now; product.Launches.Add(launch); await _repository.UpdateProductAsync(product, productKey); var args = new AddLaunchToProductEventArgs { Launch = launch, ProductKey = productKey }; LaunchAddedToProduct?.Invoke(this, args); } } else { throw new EntityException(keyValidation.Aggregate(launchValidation)); } }