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

Reply via email to