diff --git a/src/controllers/staging.controller.js b/src/controllers/staging.controller.js index 63af9c6f..0747794d 100644 --- a/src/controllers/staging.controller.js +++ b/src/controllers/staging.controller.js @@ -1,6 +1,12 @@ import _ from 'lodash'; import { Staging } from '../models'; + +import { + optionallyPaginatedResponse, + paginationParams, +} from '../utils/helpers'; + import { assertStagingRecordExists, assertHomeOrgExists, @@ -13,10 +19,17 @@ import { export const findAll = async (req, res) => { try { - const stagingData = await Staging.findAll(); + let { page, limit } = req.query; + + let pagination = paginationParams(page, limit); - const response = await Promise.all( - stagingData.map(async (stagingRecord) => { + let stagingData = await Staging.findAndCountAll({ + distinct: true, + ...pagination, + }); + + const results = await Promise.all( + stagingData.rows.map(async (stagingRecord) => { const { uuid, table, action, data } = stagingRecord; const workingData = _.cloneDeep(stagingRecord.dataValues); workingData.diff = await Staging.getDiffObject( @@ -32,6 +45,10 @@ export const findAll = async (req, res) => { }), ); + stagingData.rows = results; + + const response = optionallyPaginatedResponse(stagingData, page, limit); + res.json(response); } catch (error) { res.status(400).json({ diff --git a/src/datalayer/persistance.js b/src/datalayer/persistance.js index afaa5d1f..2399b751 100644 --- a/src/datalayer/persistance.js +++ b/src/datalayer/persistance.js @@ -47,33 +47,39 @@ export const createDataLayerStore = async () => { }; export const pushChangeListToDataLayer = async (storeId, changelist) => { - const options = { - url: `${rpcUrl}/batch_update`, - body: JSON.stringify({ - changelist, - id: storeId, - }), - }; + try { + const options = { + url: `${rpcUrl}/batch_update`, + body: JSON.stringify({ + changelist, + id: storeId, + }), + }; - const response = await request(Object.assign({}, getBaseOptions(), options)); + const response = await request( + Object.assign({}, getBaseOptions(), options), + ); - const data = JSON.parse(response); + const data = JSON.parse(response); - console.log(options, data); + console.log(options, data); - if (data.success) { - console.log('Success!'); - return true; - } + if (data.success) { + console.log('Success!'); + return true; + } - if (data.error.includes('Key already present')) { - console.log('Success, I guess...'); - return true; - } + if (data.error.includes('Key already present')) { + console.log('Success, I guess...'); + return true; + } - console.log(data); + console.log(data); - return false; + return false; + } catch (error) { + console.log(error); + } }; export const getRoots = async (storeIds) => { diff --git a/src/routes/v1/resources/staging.js b/src/routes/v1/resources/staging.js index 29d04581..cf390a89 100644 --- a/src/routes/v1/resources/staging.js +++ b/src/routes/v1/resources/staging.js @@ -4,12 +4,15 @@ import express from 'express'; import joiExpress from 'express-joi-validation'; import { StagingController } from '../../../controllers'; -import { stagingDeleteSchema } from '../../../validations'; +import { + stagingDeleteSchema, + stagingGetQuerySchema, +} from '../../../validations'; const validator = joiExpress.createValidator({ passError: true }); const StagingRouter = express.Router(); -StagingRouter.get('/', (req, res) => { +StagingRouter.get('/', validator.query(stagingGetQuerySchema), (req, res) => { return StagingController.findAll(req, res); }); diff --git a/src/validations/staging.validations.js b/src/validations/staging.validations.js index 7309a631..60ada552 100644 --- a/src/validations/staging.validations.js +++ b/src/validations/staging.validations.js @@ -3,3 +3,10 @@ import Joi from 'joi'; export const stagingDeleteSchema = Joi.object({ uuid: Joi.string().required(), }); + +export const stagingGetQuerySchema = Joi.object() + .keys({ + page: Joi.number(), + limit: Joi.number(), + }) + .with('page', 'limit');