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));
            }
        }