Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 47 additions & 1 deletion src/controllers/expenses.js
Original file line number Diff line number Diff line change
Expand Up @@ -297,12 +297,58 @@ const expensesBreakdown = async (req, res) => {
}
};

// Return daily expense sums within a date range
const expensesDaily = async (req, res) => {
if (!req.query.startDate) {
return res.status(400).json({
message: "Start date must be present!"
});
}

if (!req.query.endDate) {
return res.status(400).json({
message: "End date must be present!"
});
}

const filterObject = {
accountID: req.params.aid,
date: {
$gte: new Date(req.query.startDate),
$lte: new Date(req.query.endDate)
}
};

try {
const pipeline = [
{ $match: filterObject },
{
$group: {
_id: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
total: { $sum: "$amount" }
}
},
{ $project: { _id: 0, date: "$_id", total: 1 } },
{ $sort: { date: 1 } }
];

const daily = await Expense.aggregate(pipeline).option({ allowDiskUse: true });

res.status(200).json(daily);
} catch (error) {
res.status(500).send({
message: error.message || "An error occurred while fetching daily expenses!"
});
}
};

export default {
findAllExpensesByAccountID,
findExpenseByID,
findExpenseFileByID,
create,
remove,
update,
expensesBreakdown
expensesBreakdown,
expensesDaily,
}
3 changes: 3 additions & 0 deletions src/models/expenses.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ let expense = new Schema({
timestamps: true
});

// Compound index to optimize account-scoped date queries and sorted pagination
expense.index({ accountID: 1, date: -1, _id: -1 });


// validate category1 with array of allowed categories1
function validateCategory1(category) {
Expand Down
3 changes: 3 additions & 0 deletions src/models/incomes.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ const income = new Schema({
timestamps: true
});

// Compound index to optimize account-scoped date queries and sorted pagination (latest first)
income.index({ accountID: 1, date: -1, _id: -1 });


// Validate category1 with array of allowed categories1
function validateCategory1(category) {
Expand Down
3 changes: 3 additions & 0 deletions src/routes/expenses.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ router.put("/:id", [authJWT.verifyTokenWhitelist, authJWT.verifyTokenExpense, dr
// Return expense breakdown by primary categories
router.get("/breakdown/:aid", [authJWT.verifyTokenWhitelist, authJWT.verifyTokenAccount], expensesController.expensesBreakdown);

// Return daily expense sums in date range
router.get("/daily/:aid", [authJWT.verifyTokenWhitelist, authJWT.verifyTokenAccount], expensesController.expensesDaily);

// Create sms expense draft
router.post("/sms", [authJWT.verifyTokenWhitelist, drafts.createExpenseSMS], expensesController.create);

Expand Down
Loading