diff --git a/src/apps.js b/src/apps.js index b4c87f39f..76fecea72 100644 --- a/src/apps.js +++ b/src/apps.js @@ -981,7 +981,10 @@ function restoreApp(app, addonsToRestore, backupId, callback) { }); } -function listBackups(appId, callback) { +function listBackups(page, perPage, appId, callback) { + assert(typeof page === 'number' && page > 0); + assert(typeof perPage === 'number' && perPage > 0); + assert.strictEqual(typeof appId, 'string'); assert.strictEqual(typeof callback, 'function'); @@ -989,22 +992,10 @@ function listBackups(appId, callback) { if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error)); if (!exists) return callback(new AppsError(AppsError.NOT_FOUND)); - // TODO pagination is not implemented in the backend yet - backups.getAllPaged(0, 1000, function (error, result) { + backups.getByAppIdPaged(page, perPage, appId, function (error, results) { if (error) return callback(new AppsError(AppsError.INTERNAL_ERROR, error)); - var appBackups = []; - - result.forEach(function (backup) { - appBackups = appBackups.concat(backup.dependsOn.filter(function (d) { - return d.indexOf('appbackup_' + appId) === 0; - })); - }); - - // alphabetic should be sufficient - appBackups.sort(); - - callback(null, appBackups); + callback(null, results); }); }); } diff --git a/src/routes/apps.js b/src/routes/apps.js index 167a9f0bd..b88488b55 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -381,7 +381,13 @@ function exec(req, res, next) { function listBackups(req, res, next) { assert.strictEqual(typeof req.params.id, 'string'); - apps.listBackups(req.params.id, function (error, result) { + var page = typeof req.query.page !== 'undefined' ? parseInt(req.query.page) : 1; + if (!page || page < 0) return next(new HttpError(400, 'page query param has to be a postive number')); + + var perPage = typeof req.query.per_page !== 'undefined'? parseInt(req.query.per_page) : 25; + if (!perPage || perPage < 0) return next(new HttpError(400, 'per_page query param has to be a postive number')); + + apps.listBackups(page, perPage, req.params.id, function (error, result) { if (error && error.reason === AppsError.NOT_FOUND) return next(new HttpError(404, 'No such app')); if (error) return next(new HttpError(500, error));