Skip to content

Commit

Permalink
Merge pull request #16 from Kasulejoseph/sort-expenses-170240164
Browse files Browse the repository at this point in the history
#170240164 Sort expenses
  • Loading branch information
Kasulejoseph committed Dec 17, 2019
2 parents d800b3a + 4f05f46 commit 332653f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 4 deletions.
21 changes: 17 additions & 4 deletions src/helper/queryHelper.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import Expense from "../model/expense";

export default async (queryParams, queryKeys, currentPage) => {
const expPerPage = 9
const expPerPage = 9;
let sort = {}
const requiredParams = [
"status",
"uuid",
Expand All @@ -11,22 +12,34 @@ export default async (queryParams, queryKeys, currentPage) => {
"currency",
"employee"
];
if (queryParams.sort) {
const getParts = queryParams.sort.split(":");
sort[getParts[0]] = getParts[1] === "asc" ? 1 : -1;
}
if(Object.keys(sort).length == 0) {
sort["created_at"] = -1
}

// eliminate page
const newArray = queryKeys.filter(value => value !== "page");
const newArray = queryKeys.filter(
value => value !== "page" && value !== "sort"
);
delete queryParams.page;
delete queryParams.sort;
const isValidParam = newArray.every(key => requiredParams.includes(key));
if (!isValidParam) {
return {
status: 422,
error: "Invalid query param(s)"
};
}

const data = await Expense.find(queryParams)
.skip(expPerPage * currentPage - expPerPage)
.limit(expPerPage);
.limit(expPerPage)
.sort(sort);
const count = await Expense.countDocuments(queryParams);
const pages = Math.ceil(count / expPerPage)
const pages = Math.ceil(count / expPerPage);
return {
status: 200,
pages,
Expand Down
11 changes: 11 additions & 0 deletions test/index.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,17 @@ describe("/users:id GET user expenses", () => {
res.text.includes('"status":200');
done();
});
});
it("should sort expenses", done => {
chai
.request(server)
.get("/?sort=amount:asc")
.end((err, res) => {
res.should.have.status(200);
res.body.data.should.be.a("array");
res.text.includes('"status":200');
done();
});
});
});

Expand Down

0 comments on commit 332653f

Please sign in to comment.