Esempio n. 1
0
        private static long?InternalGetMoodleCursoId
        (
            string cursoDescricao,
            Modalidade modalidade,
            GetCategoryByNameClient client = null,
            HttpClient httpClient          = null
        )
        {
            long?moodleCategoryId = MoodleFromToCache.GetCachedMoodleCategory(modalidade.IdModalidade, cursoDescricao);

            if (moodleCategoryId.HasValue)
            {
                return(moodleCategoryId.Value);
            }

            GetCategoryByNameClient getClient = client;

            if (getClient == null)
            {
                getClient = new GetCategoryByNameClient();
            }

            if (httpClient != null)
            {
                getClient.AddHttpClient(httpClient);
            }

            getClient.AddBaseUrl(modalidade.MoodleUrl)
            .AddServiceUrl(modalidade.MoodleServiceUrl)
            .AddToken(modalidade.MoodleGetInfoServiceToken);

            GetByNameRequest request = new GetByNameRequest()
            {
                Name = cursoDescricao
            };

            Task <CategoryResponse> task = getClient.Post(request);

            task.Wait();

            CategoryResponse response = task.Result;

            if (response?.Id > 0)
            {
                MoodleFromToCache.AddCategory(modalidade.IdModalidade, cursoDescricao, response.Id);
            }

            return(response?.Id);
        }
        public override SendResult <Curso, CategoryResponse> SendAll()
        {
            SendResult <Curso, CategoryResponse> result = new SendResult <Curso, CategoryResponse>();
            IEnumerable <Curso> data = GetData("");

            if (data == null)
            {
                return(result);
            }

            foreach (var modalidade in Modalidades)
            {
                var cursos = data.Where(x => x.IdModalidade == modalidade.IdModalidade).ToArray();

                this.AddMoodleBaseUrl(modalidade.MoodleUrl)
                .AddMoodleToken(modalidade.MoodleToken)
                .AddMoodleGetInfoServiceToken(modalidade.MoodleGetInfoServiceToken)
                .AddMoodleServiceUrl(modalidade.MoodleServiceUrl);

                this.AddMoodleCategoryParent(modalidade.MoodleCategoryParent)
                .AddMoodleDescriptionFormat(modalidade.MoodleDescriptionFormat);

                foreach (var item in cursos)
                {
                    try
                    {
                        long?cachedMoodleId = MoodleFromToCache.GetCachedMoodleCategory(modalidade.IdModalidade, item.CursoDescricao);

                        if (cachedMoodleId.HasValue)
                        {
                            LastUrl = "cached_value";

                            var reason = new NotImportedReason <Curso>()
                            {
                                Data   = item,
                                Url    = LastUrl,
                                Reason = $"Curso [{item.CursoDescricao}] já está adicionado ao MOODLE ({LastUrl})."
                            };

                            result.NotImported.Enqueue(reason);
                            Log(reason.Reason);
                            continue;
                        }

                        CategoryResponse exists = VerifyIfExists(item.CursoDescricao);

                        if (exists?.Id > 0)
                        {
                            MoodleFromToCache.AddCategory(modalidade.IdModalidade, item.CursoDescricao, exists.Id);

                            var reason = new NotImportedReason <Curso>()
                            {
                                Data   = item,
                                Url    = LastUrl,
                                Reason = $"Curso [{item.CursoDescricao}] já está adicionado ao MOODLE ({LastUrl})."
                            };

                            result.NotImported.Enqueue(reason);
                            Log(reason.Reason);
                            continue;
                        }

                        CategoryResponse response = SendItem(item);

                        ImportedResult <Curso, CategoryResponse> importedResult = new ImportedResult <Curso, CategoryResponse>()
                        {
                            Date   = DateTime.Now,
                            Data   = item,
                            Url    = LastUrl,
                            Result = response
                        };

                        result.ImportedSuccessfully.Enqueue(importedResult);
                        Log($"Curso [{item.CursoDescricao}] adicionado");
                    }
                    catch (Exception ex)
                    {
                        var reason = new NotImportedReason <Curso>()
                        {
                            Data      = item,
                            Url       = LastUrl,
                            Exception = ex
                        };

                        result.NotImported.Enqueue(reason);
                        Log(reason.Reason);
                    }
                }
            }

            return(result);
        }