示例#1
0
        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()));
        }