public IActionResult ExportDictionaries(string id, [FromBody] ExportDictionariesSettings settings, [FromServices] UrlProvider urlProvider) { //SERVICE VALIDATION var service = serviceQuery.Get(id); if (service == null) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status404NotFound, ServiceResources.InvalidIdNotExistingService)); } if (service.Type != (int)ServiceTypeEnum.Classifier) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, string.Format(ServiceResources.InvalidServiceTypeOnly_0_ServicesAreValidForThisRequest, "Classifier"))); } if (service.Status != (int)ServiceStatusEnum.Active && service.Status != (int)ServiceStatusEnum.Prepared) { return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, ServiceResources.InvalidStatusOnlyTheServicesWithPreparedOrActiveStatusCanBeExported)); } var classifierSettings = serviceQuery.GetSettings <ClassifierSettingsElastic>(service.Id); //TAGS VALIDATION var tagQuery = queryFactory.GetTagQuery(classifierSettings.DataSetName); List <string> tagIds; if (settings?.TagIdList?.Any() == true) { tagIds = classifierSettings.Tags.Select(t => t.Id).Intersect(settings.TagIdList).ToList(); if (tagIds.Count < settings.TagIdList.Count) { var missingTagIds = settings.TagIdList.Except(tagIds).ToList(); return(new HttpStatusCodeWithErrorResult(StatusCodes.Status400BadRequest, string.Format(ServiceResources.TheFollowingTagIdsNotExistInTheService_0, string.Join(", ", missingTagIds)))); } } else { tagIds = classifierSettings.Tags.Select(t => t.Id).ToList(); } //NGRAM COUNT LIST VALIDATION var nGramResult = CommonValidators.ValidateServiceNGramList(classifierSettings.NGramList, settings.NGramList); if (nGramResult.IsFailure) { return(HttpErrorResult(StatusCodes.Status400BadRequest, nGramResult.Error)); } var process = processHandler.Create( ProcessTypeEnum.ClassifierExportDictionaries, service.Id, settings, string.Format(ServiceResources.ExportingDictionariesFrom_0_Service_1, ServiceTypeEnum.Classifier, service.Name)); service.ProcessIdList.Add(process.Id); serviceQuery.Update(service.Id, service); processHandler.Start(process, (tokenSource) => classifierHandler.ExportDictionaries(process.Id, classifierSettings, tagIds, settings.NGramList, tokenSource.Token, urlProvider.GetHostUrl())); return(new HttpStatusCodeWithObjectResult(StatusCodes.Status202Accepted, process.ToProcessModel())); }