Skip to content

Commit

Permalink
34 catalog pagination backend (#42)
Browse files Browse the repository at this point in the history
* Modified /catalog get request to accept limit and page parameter for pagination

Co-authored-by: Maithy Le <[email protected]>

* Modified /catalog get to return data and amount of events

Co-authored-by: Maithy Le <[email protected]>

* merge catalog query+filter with pagination

---------

Co-authored-by: Maithy Le <[email protected]>
Co-authored-by: ThatMegamind <[email protected]>
Co-authored-by: michellelin1 <[email protected]>
  • Loading branch information
4 people authored Feb 6, 2024
1 parent 9527087 commit 2434108
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 8 deletions.
7 changes: 6 additions & 1 deletion common/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ const isISODate = (str) => {
}
};

// dependency for catalog.js
const isInteger = (value) => {
return value && /^\d+$/.test(value);
};

const isObject = (o) => {
return o === Object(o) && !isArray(o) && typeof o !== 'function' && !isISODate(o);
};
Expand Down Expand Up @@ -52,4 +57,4 @@ const keysToCamel = (data) => {
return data;
};

module.exports = { keysToCamel };
module.exports = { keysToCamel, isInteger };
26 changes: 19 additions & 7 deletions routes/catalog.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
const express = require('express');

const { db } = require('../server/db');

const catalogRouter = express.Router();
const { keysToCamel } = require('../common/utils');
// modify /catalog
const { keysToCamel, isInteger } = require('../common/utils');

// -- GET - Returns all data from the catalog table
catalogRouter.get('/', async (req, res) => {
try {
const { title, eventType, subject, season, year } = req.query;
let query = 'SELECT * FROM catalog WHERE 1=1';

let { limit, page } = req.query;
limit = isInteger(limit) ? parseInt(limit, 10) : 10;
page = isInteger(page) ? parseInt(page, 10) : 1;

const offset = (page - 1) * limit;

let query = ' FROM catalog WHERE 1=1';

const params = [];

if (title) {
Expand Down Expand Up @@ -47,10 +54,15 @@ catalogRouter.get('/', async (req, res) => {
params.push('');
}

query += ' ORDER BY title ASC';
const eventCount = await db.query(`SELECT COUNT(*) ${query};`, params);

query += ' ORDER BY title ASC LIMIT $6 OFFSET $7;';
params.push(limit);
params.push(offset);

const reqInfo = await db.query(`SELECT * ${query}`, params);

const reqInfo = await db.query(query, params);
res.status(200).json(keysToCamel(reqInfo));
res.status(200).json(keysToCamel({ events: reqInfo, count: eventCount }));
} catch (err) {
res.status(500).send(err.message);
}
Expand Down

0 comments on commit 2434108

Please sign in to comment.