Mobrovac has submitted this change and it was merged. Change subject: Feed endpoints: Allow the client to request aggregated parts ......................................................................
Feed endpoints: Allow the client to request aggregated parts The individual feed endpoints do not throw errors if a request has been made to the aggregated endpoint. Since RESTBase will be using the individual endpoints by sending them requests in parallel and then assembling the response, enable it to signal them that the response should be in the same format as when the aggregated endpoint is contacted by allowing the `aggregated` query flag to be passed in. Note that, in production, this will be available only to RESTBase, if an external client passes it in, RESTBase will remove it from the request when forwarding it to MCS. Bug: T143912 Change-Id: I3ba040853e36ca53ddbf5590afd0b4430cda5749 --- M lib/feed/featured-image.js M lib/feed/featured.js M lib/feed/most-read.js M lib/feed/news.js M routes/aggregated.js 5 files changed, 20 insertions(+), 12 deletions(-) Approvals: BearND: Looks good to me, approved Mobrovac: Verified diff --git a/lib/feed/featured-image.js b/lib/feed/featured-image.js index 8a0b83b..93e9514 100644 --- a/lib/feed/featured-image.js +++ b/lib/feed/featured-image.js @@ -101,9 +101,11 @@ && page.pageid + '/' + mwapi.getRevisionFromExtract(page); } -function promise(app, req, dontThrow) { +function promise(app, req) { dateUtil.validate(dateUtil.hyphenDelimitedDateString(req)); - return requestPictureOfTheDay(app, req.params.domain, dateUtil.getRequestedDate(req), dontThrow) + var aggregated = !!req.query.aggregated; + return requestPictureOfTheDay(app, req.params.domain, + dateUtil.getRequestedDate(req), aggregated) .then(function (response) { mwapi.checkForQueryPagesInResponse(req, response); var page = getPageObject(response); @@ -115,7 +117,7 @@ }; }).catch(function(err) { if (err.status === 504) { - if (dontThrow) { + if (aggregated) { return { payload: undefined, meta: undefined }; } throw new HTTPError({ diff --git a/lib/feed/featured.js b/lib/feed/featured.js index a3e697b..46e3772 100644 --- a/lib/feed/featured.js +++ b/lib/feed/featured.js @@ -71,10 +71,11 @@ return extract; } -function promise(app, req, dontThrow) { +function promise(app, req) { dateUtil.validate(dateUtil.hyphenDelimitedDateString(req)); + var aggregated = !!req.query.aggregated; if (req.params.domain.indexOf('en') !== 0) { - if (dontThrow) { + if (aggregated) { return {}; } else { throw new HTTPError({ diff --git a/lib/feed/most-read.js b/lib/feed/most-read.js index b7d090a..a996ba8 100644 --- a/lib/feed/most-read.js +++ b/lib/feed/most-read.js @@ -22,7 +22,8 @@ return result; } -function getTopPageviews(app, req, aggregated) { +function getTopPageviews(app, req) { + var aggregated = !!req.query.aggregated; var yesterday = new Date(dateUtil.getRequestedDate(req) - dateUtil.ONE_DAY); var year = aggregated ? yesterday.getUTCFullYear() : req.params.yyyy; var month = aggregated ? dateUtil.pad(yesterday.getUTCMonth() + 1) : req.params.mm; diff --git a/lib/feed/news.js b/lib/feed/news.js index 6003724..081c268 100644 --- a/lib/feed/news.js +++ b/lib/feed/news.js @@ -35,10 +35,11 @@ pushTitleIfNew(linkTitles, story, removeFragment(href.slice(1))); } -function promise(app, req, dontThrow) { +function promise(app, req) { var lang = req.params.domain.split('.')[0]; + var aggregated = !!req.query.aggregated; if (!newsTemplates[lang]) { - if (dontThrow) { + if (aggregated) { return { payload: undefined, meta: undefined }; } throw new HTTPError({ diff --git a/routes/aggregated.js b/routes/aggregated.js index afa3719..35afaee 100644 --- a/routes/aggregated.js +++ b/routes/aggregated.js @@ -32,12 +32,15 @@ */ router.get('/featured/:yyyy/:mm/:dd', function (req, res) { var dateString = dateUtil.dateStringFrom(req); + // signal that this is a request for aggregated resources + req.query = req.query || {}; + req.query.aggregated = true; return BBPromise.props({ - tfa: featured.promise(app, req, true), - mostread: mostRead.promise(app, req, true), + tfa: featured.promise(app, req), + mostread: mostRead.promise(app, req), random: random.promise(app, req), - news: news.promise(app, req, true), - image: featuredImage.promise(app, req, true) + news: news.promise(app, req), + image: featuredImage.promise(app, req) }) .then(function (response) { var aggregate = { tfa: response.tfa.payload, -- To view, visit https://gerrit.wikimedia.org/r/308589 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I3ba040853e36ca53ddbf5590afd0b4430cda5749 Gerrit-PatchSet: 4 Gerrit-Project: mediawiki/services/mobileapps Gerrit-Branch: master Gerrit-Owner: Mobrovac <mobro...@wikimedia.org> Gerrit-Reviewer: BearND <bsitzm...@wikimedia.org> Gerrit-Reviewer: Dbrant <dbr...@wikimedia.org> Gerrit-Reviewer: Fjalapeno <cfl...@wikimedia.org> Gerrit-Reviewer: GWicke <gwi...@wikimedia.org> Gerrit-Reviewer: Jhernandez <jhernan...@wikimedia.org> Gerrit-Reviewer: Mholloway <mhollo...@wikimedia.org> Gerrit-Reviewer: Mhurd <mh...@wikimedia.org> Gerrit-Reviewer: Mobrovac <mobro...@wikimedia.org> Gerrit-Reviewer: Niedzielski <sniedziel...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits