/// <summary> /// Adds the variable value product. /// </summary> /// <param name="productId">The product identifier.</param> /// <param name="productName">Name of the product.</param> /// <param name="displayText">The display text.</param> /// <exception cref="System.InvalidOperationException">Product Name {productName} has already been added to the contract</exception> public void AddVariableValueProduct(Guid productId, String productName, String displayText) { Guard.ThrowIfNullOrEmpty(productName, typeof(ArgumentNullException), "Product Name must not be null or empty"); Guard.ThrowIfNullOrEmpty(displayText, typeof(ArgumentNullException), "Product Display Text must not be null or empty"); // Check product not already added if (this.Products.Any(p => p.Name == productName)) { throw new InvalidOperationException($"Product Name {productName} has already been added to the contract"); } VariableValueProductAddedToContractEvent variableValueProductAddedToContractEvent = new VariableValueProductAddedToContractEvent(this.AggregateId, this.EstateId, productId, productName, displayText); this.ApplyAndAppend(variableValueProductAddedToContractEvent); }
/// <summary> /// Handles the specific domain event. /// </summary> /// <param name="domainEvent">The domain event.</param> /// <param name="cancellationToken">The cancellation token.</param> private async Task HandleSpecificDomainEvent(VariableValueProductAddedToContractEvent domainEvent, CancellationToken cancellationToken) { await this.EstateReportingRepository.AddContractProduct(domainEvent, cancellationToken); }