From e1fadd02c733fb5af9fac8d66dbf1717a4732add Mon Sep 17 00:00:00 2001 From: Leonardo Merlin Date: Mon, 7 Sep 2015 08:52:11 -0300 Subject: [PATCH] Update service --- src/app/components/article-service/article.service.js | 57 ++++++++++++++++++++++++++++++++------------------------- src/app/components/dialoga-service/dialoga.service.js | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------- 2 files changed, 108 insertions(+), 84 deletions(-) diff --git a/src/app/components/article-service/article.service.js b/src/app/components/article-service/article.service.js index 10d5cff..3f4323b 100644 --- a/src/app/components/article-service/article.service.js +++ b/src/app/components/article-service/article.service.js @@ -32,7 +32,8 @@ var url = service.apiArticles + articleId; var paramsExtended = angular.extend({}, params); - UtilService.get(url, {params: paramsExtended}).then(function(data){ + UtilService.get(url, {params: paramsExtended}) + .then(function(data){ cbSuccess(data); }).catch(function(error){ cbError(error); @@ -47,43 +48,38 @@ throw { name: 'NotImplementedYet', message: 'The service "getArticleBySlug" is not implemented yet.'}; } - function getCategories (articleId, cbSuccess, cbError) { + function getCategories (articleId, params, cbSuccess, cbError) { // Ex.: /api/v1/articles/103358?fields= var url = service.apiArticles + articleId; - - UtilService.get(url, {params: { + var paramsExtended = angular.extend({ 'fields[]': ['id', 'categories'] - }}).then(function(data){ + }, params); + + UtilService.get(url, {params: paramsExtended}) + .then(function(data){ cbSuccess(data); }).catch(function(error){ cbError(error); }); } - function getCategoryBySlug () { + function getCategoryBySlug (/*slug, params, cbSuccess, cbError*/) { throw { name: 'NotImplementedYet', message: 'The service "getArticleBySlug" is not implemented yet.'}; } - function getTopics (cbSuccess, cbError) { + function getTopics (params, cbSuccess, cbError) { // Ex.: /api/v1/articles/103358/children?fields= - - var url = service.apiArticles + API.articleId.home + '/children'; - - UtilService.get(url, {params: { - 'fields[]': ['id', 'title', 'slug', 'abstract', 'categories', 'setting', 'children_count', 'hits'] - }}).then(function(data){ - cbSuccess(data); - }).catch(function(error){ - cbError(error); - }); + getTopicById(API.articleId.home); } - function getTopicById (topicId, cbSuccess, cbError) { - // Ex.: /api/v1/articles/103358/children/121521?fields= + function getTopicById (topicId, params, cbSuccess, cbError) { + // Ex.: /api/v1/articles/103358/children?fields= - // var url = service.apiArticles + API.articleId.home + '/children/' + topicId; // dont need to chain - var url = service.apiArticles + topicId; + var url = service.apiArticles + topicId + '/children'; + var paramsExtended = angular.extend({ + 'fields[]': ['id', 'categories'] + }, params); UtilService.get(url, {params: { 'fields[]': ['id', 'title', 'body', 'slug', 'abstract', 'categories', 'setting', 'children_count', 'hits'] @@ -111,11 +107,23 @@ }); } + /** + * Ex.: /api/v1/articles/[article_id]/children?[params]content_type=ProposalsDiscussionPlugin::Proposal + * Ex.: /api/v1/articles/103644/children?limit=20&fields=id,name,slug,abstract,created_by&content_type=ProposalsDiscussionPlugin::Proposal + * + * @param {Integer} topicId topic where has those proposals + * @param {Object} params params for pagination ant others + * @param {Function} cbSuccess callback for success + * @param {Function} cbError callback for error + * @return {Array} [description] + */ function getProposalsByTopicId (topicId, params, cbSuccess, cbError) { - var url = service.apiArticles + topicId; + var url = service.apiArticles + topicId + '/children'; var paramsExtended = angular.extend({ 'fields[]': ['id', 'title', 'abstract', 'children', 'children_count'], + 'limit':'20', + 'page':'1', 'content_type':'ProposalsDiscussionPlugin::Proposals' }, params); @@ -126,11 +134,10 @@ }); } - function getRandomProposal (cbSuccess, cbError) {} - function getEvents (community_id, params, cbSuccess, cbError) { + // Ex.: /api/v1/communities/19195/articles?categories_ids[]=' + cat_id + '&content_type=Event'; // Ex.: /api/v1/communities/' + community_id + '/articles?categories_ids[]=' + cat_id + '&content_type=Event'; - + var url = service.apiCommunities + community_id + '/articles'; var paramsExtended = angular.extend({ 'fields[]': ['id', 'slug', 'title', 'abstract', 'body', 'categories', 'created_at', 'start_date', 'end_date', 'hits'], diff --git a/src/app/components/dialoga-service/dialoga.service.js b/src/app/components/dialoga-service/dialoga.service.js index 95ccf15..42bd308 100644 --- a/src/app/components/dialoga-service/dialoga.service.js +++ b/src/app/components/dialoga-service/dialoga.service.js @@ -9,24 +9,23 @@ function DialogaService($rootScope, $sce, API, ArticleService, UtilService, Slug, $log) { $log.debug('DialogaService'); - var service = { - getHome: getHome, - getAbout: getAbout, - getThemes: getThemes, - getPrograms: getPrograms, - getProgramBySlug: getProgramBySlug, - getProgramsRandom: getProgramsRandom, - getProposals: getProposals, - getProposalsByTopicId: getProposalsByTopicId, - getEvents: getEvents, - getQuestions: getQuestions, - searchProgram: searchProgram, - searchProposal: searchProposal, - }; + var extendedService = angular.extend({}, ArticleService); + + extendedService.serviceDialoga = $rootScope.basePath + '/api/v1/dialoga_plugin/'; + extendedService.getHome = getHome; + extendedService.getAbout = getAbout; + extendedService.getThemes = getThemes; + extendedService.getPrograms = getPrograms; + extendedService.getProgramBySlug = getProgramBySlug; + extendedService.getProgramsRandom = getProgramsRandom; + extendedService.getEvents = getEvents; // override + extendedService.getQuestions = getQuestions; + extendedService.searchPrograms = searchPrograms; + extendedService.searchProposals = searchProposals; var CACHE = {}; - return service; + return extendedService; function getHome (cbSuccess, cbError) { if( !!CACHE.home ){ @@ -91,11 +90,11 @@ } function getProgramBySlug (slug, cbSuccess, cbError) { - + if( !CACHE.programs ){ getPrograms(_getProgramBySlug, cbError); } else { - _getProgramBySlug(); + _getProgramBySlug(); } function _getProgramBySlug(){ @@ -110,56 +109,46 @@ } } - function getProgramsRandom (cbSuccess, cbError) { - getPrograms(cbSuccess, cbError); - // TODO: get endpoint for production - // if( !!CACHE.programsRandom ){ - // cbSuccess(CACHE.programsRandom); - // }else{ - // // load article content - // // UtilService.get(API.random_topics, {params: { - // ArticleService.getArticleById(API.articleId.home, {params: { - // 'fields[]': [ - // 'id', 'title', 'slug', 'abstract', 'children_count'], - // 'content_type': 'ProposalsDiscussionPlugin::Topic' - // }}).then(function(data){ - // CACHE.programsRandom = data; - - // cbSuccess(data); - // }).catch(function(error){ - // cbError(error); - // }); - // } - } + // Ex.: /api/v1/dialoga_plugin/random_topics/103358 + // TODO: get endpoint for production + // TODO: put at cache? + function getProgramsRandom(params, cbSuccess, cbError) { - function getProposals (param, cbSuccess, cbError) { - ArticleService.getProposals(param, function (data){ - CACHE.proposals = data; + if( !!CACHE.programsRandom ){ + cbSuccess(CACHE.programsRandom); + }else{ + var mapFromCache = !!CACHE.programs; - cbSuccess(CACHE.proposals); - }, cbError); - } + var url = extendedService.serviceDialoga + 'random_topics/' + API.articleId.home; + var fields = null; - function getProposalsByTopicId (topicId, params, cbSuccess, cbError) { - ArticleService.getProposalsByTopicId(topicId, params, function (data){ - CACHE.proposals = data; + if (mapFromCache){ + // get only references + fields = ['id', 'title', 'slug']; + }else{ + // get all content + fields = []; + } + + var paramsExtended = angular.extend({ + 'fields[]': fields + }, params); - cbSuccess(CACHE.proposals); - }, cbError); + UtilService.get(url, {params: paramsExtended}).then(function(data){ + _pipeHandleProgramsRandomFromCache(mapFromCache, data, cbSuccess); + }).catch(function(error){ + cbError(error); + }); + } } function getEvents (params, cbSuccess, cbError) { - if( !!CACHE.events ){ - cbSuccess(CACHE.events); - }else{ - ArticleService.getEvents(API.communityId, params, function(data){ - CACHE.events = data; + var paramsExtended = angular.extend({}, params); - cbSuccess(data); - }, cbError); - } + ArticleService.getEvents(API.communityId, paramsExtended, cbSuccess, cbError); } + // TODO: implement function getQuestions (cbSuccess/*, cbError*/) { if( !!CACHE.questions ){ cbSuccess(CACHE.questions); @@ -172,9 +161,13 @@ } } - function searchProgram (cbSuccess, cbError) {} + function searchPrograms (query, cbSuccess, cbError) { + ArticleService.searchTopics({query: query}, cbSuccess, cbError); + } - function searchProposal (cbSuccess, cbError) {} + function searchProposals (query, cbSuccess, cbError) { + ArticleService.searchProposals({query: query}, cbSuccess, cbError); + } function _pipeHandleYoutube (data) { var abstract = data.article.abstract; @@ -241,6 +234,30 @@ } } + function _pipeHandleProgramsRandomFromCache (mapFromCache, data, cbSuccess){ + + if(mapFromCache){ + var result = []; + var refPrograms = data.articles; + + for (var i = CACHE.programs.length - 1; i >= 0; i--) { + var cachedProgram = CACHE.programs[i]; + + for (var j = refPrograms.length - 1; j >= 0; j--) { + var refProgram = refPrograms[j]; + + if(refProgram.id === cachedProgram.id){ + result.push(cachedProgram); + } + } + } + + data.articles = result; + } + + cbSuccess(data); + } + function forceIframeParams(abstract) { var patternIframe = '