Skip to content

Commit

Permalink
feat: Paginate data
Browse files Browse the repository at this point in the history
Data obtained at get all workouts, records and members can be limited
and divided by pages.
  • Loading branch information
JSamuelAP committed Oct 6, 2023
1 parent 5e35651 commit 3d44c49
Show file tree
Hide file tree
Showing 11 changed files with 51 additions and 19 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "crossfit-wod-api",
"version": "1.3.0",
"version": "1.4.0",
"description": "Crossfit Work Of Day REST API from freeCodeCamp",
"main": "index.js",
"scripts": {
Expand Down
7 changes: 5 additions & 2 deletions src/controllers/memberController.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
const memberService = require("../services/memberService");

const getAllMembers = (req, res) => {
const { name, gender } = req.query;
const { name, gender, lenght, page } = req.query;
try {
const allMembers = memberService.getAllMembers({ name, gender });
const allMembers = memberService.getAllMembers(
{ name, gender },
{ lenght, page }
);
res.send({ status: "OK", data: allMembers });
} catch (error) {
res
Expand Down
4 changes: 3 additions & 1 deletion src/controllers/recordController.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,10 @@ const getRecordsForMember = (req, res) => {
};

const getAllRecords = (req, res) => {
const { length, page } = req.query;

try {
const allRecords = recordService.getAllRecords();
const allRecords = recordService.getAllRecords({ length, page });
res.send({ status: "OK", data: allRecords });
} catch (error) {
res
Expand Down
7 changes: 5 additions & 2 deletions src/controllers/workoutController.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
const workoutService = require("../services/workoutService");

const getAllWorkouts = (req, res) => {
const { mode, equipment } = req.query;
const { mode, equipment, length, page } = req.query;
try {
const allWorkouts = workoutService.getAllWorkouts({ mode, equipment });
const allWorkouts = workoutService.getAllWorkouts(
{ mode, equipment },
{ length, page }
);
res.send({ status: "OK", data: allWorkouts });
} catch (error) {
res
Expand Down
7 changes: 5 additions & 2 deletions src/database/Member.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
const DB = require("./db.json");

const { saveToDatabase, getCurrentDateTime } = require("./utils");
const { saveToDatabase, getCurrentDateTime, getPage } = require("./utils");

const getAllMembers = (filterParams) => {
const getAllMembers = (filterParams, paginationParams) => {
try {
let members = DB.members;

if (filterParams.name)
members = members.filter((member) =>
member.name.toLowerCase().includes(filterParams.name)
Expand All @@ -13,6 +14,8 @@ const getAllMembers = (filterParams) => {
members = members.filter(
(member) => member.gender === filterParams.gender
);
members = getPage(members, paginationParams.page, paginationParams.length);

return members;
} catch (error) {
throw { status: 500, message: error };
Expand Down
11 changes: 8 additions & 3 deletions src/database/Record.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const DB = require("./db.json");

const { saveToDatabase, getCurrentDateTime } = require("./utils");
const { saveToDatabase, getCurrentDateTime, getPage } = require("./utils");

const getRecordsForWorkout = (workoutId) => {
try {
Expand Down Expand Up @@ -30,9 +30,14 @@ const getRecordsForMember = (memberId) => {
}
};

const getAllRecords = () => {
const getAllRecords = (paginationParams) => {
try {
return DB.records;
let records = getPage(
DB.records,
paginationParams.page,
paginationParams.length
);
return records;
} catch (error) {
throw { status: 500, message: error };
}
Expand Down
11 changes: 9 additions & 2 deletions src/database/Workout.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
const DB = require("./db.json");
const { saveToDatabase, getCurrentDateTime } = require("./utils");
const { saveToDatabase, getCurrentDateTime, getPage } = require("./utils");

const getAllWorkouts = (filterParams) => {
const getAllWorkouts = (filterParams, paginationParams) => {
try {
let workouts = DB.workouts;

if (filterParams.mode)
workouts = workouts.filter((workout) =>
workout.mode.toLowerCase().includes(filterParams.mode)
Expand All @@ -12,6 +13,12 @@ const getAllWorkouts = (filterParams) => {
workouts = workouts.filter((workout) =>
workout.equipment.includes(filterParams.equipment)
);
workouts = getPage(
workouts,
paginationParams.page,
paginationParams.length
);

return workouts;
} catch (error) {
throw { status: 500, message: error };
Expand Down
9 changes: 9 additions & 0 deletions src/database/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,18 @@ const comparePassword = (password, hashedPassword) => {
return hashPassword(password) === hashedPassword;
};

const getPage = (array = [], page = 1, length = 20) => {
page = parseInt(page);
length = parseInt(length);
const startIndex = (page - 1) * length;
const endIndex = page * length;
return array.slice(startIndex, endIndex);
};

module.exports = {
saveToDatabase,
getCurrentDateTime,
hashPassword,
comparePassword,
getPage,
};
4 changes: 2 additions & 2 deletions src/services/memberService.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ const crypto = require("node:crypto");
const Member = require("../database/Member");
const { getCurrentDateTime, hashPassword } = require("../database/utils");

const getAllMembers = (filterParams) => {
const getAllMembers = (filterParams, paginationParams) => {
try {
const allMembers = Member.getAllMembers(filterParams);
const allMembers = Member.getAllMembers(filterParams, paginationParams);
return allMembers;
} catch (error) {
throw error;
Expand Down
4 changes: 2 additions & 2 deletions src/services/recordService.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ const getRecordsForMember = (memberId) => {
}
};

const getAllRecords = () => {
const getAllRecords = (paginationParams) => {
try {
const allRecords = Record.getAllRecords();
const allRecords = Record.getAllRecords(paginationParams);
return allRecords;
} catch (error) {
throw error;
Expand Down
4 changes: 2 additions & 2 deletions src/services/workoutService.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ const crypto = require("node:crypto");
const Workout = require("../database/Workout");
const { getCurrentDateTime } = require("../database/utils");

const getAllWorkouts = (filterParams) => {
const getAllWorkouts = (filterParams, paginationParams) => {
try {
const allWorkouts = Workout.getAllWorkouts(filterParams);
const allWorkouts = Workout.getAllWorkouts(filterParams, paginationParams);
return allWorkouts;
} catch (error) {
throw error;
Expand Down

0 comments on commit 3d44c49

Please sign in to comment.