/// <inheritdoc/> public async Task PublishAreaAsync(AreaMatch areaMatch, CancellationToken cancellationToken = default) { // Validate inputs if (areaMatch == null) { throw new ArgumentNullException(nameof(areaMatch)); } RequestValidationResult validationResult = areaMatch.Validate(); if (validationResult.Passed) { // Build a MatchMessage containing the submitted areas MatchMessage message = new MatchMessage(); message.AreaMatches.Add(areaMatch); // Define a regions for the published message IEnumerable <Region> messageRegions = RegionHelper.GetRegionsCoverage(areaMatch.Areas, this.RegionPrecision); // Publish await this._messageRepo.InsertAsync(message, messageRegions, cancellationToken); } else { throw new RequestValidationFailedException(validationResult); } }