Skip to content

Commit 582873e

Browse files
Merge pull request #2166 from OneCommunityGlobal/feature/ki-inventory-api-connect
Abhinav - feat(ki-inventory): add stats endpoint and DB seed script
2 parents 326c438 + a78a76e commit 582873e

6 files changed

Lines changed: 1049 additions & 11 deletions

File tree

src/controllers/kitchenandinventory/KIInventoryController.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ const KIInventoryController = () => {
4848
const items = await KIInventoryItem.find(null, { __v: 0 }).lean().sort({ createdAt: -1 });
4949
res.status(200).json({ message: 'All Items fetched successfully.', data: items });
5050
} catch (err) {
51+
console.error(err);
5152
res.status(400).json({ message: 'Something went wrong while fetching items.' });
5253
}
5354
};
@@ -59,6 +60,7 @@ const KIInventoryController = () => {
5960
.sort({ createdAt: -1 });
6061
res.status(200).json({ message: 'Items fetched successfully.', data: items });
6162
} catch (err) {
63+
console.error(err);
6264
res.status(400).json({ message: 'Something went wrong while fetching items.' });
6365
}
6466
};
@@ -74,6 +76,7 @@ const KIInventoryController = () => {
7476
.sort({ presentQuantity: -1 });
7577
res.status(200).json({ message: 'Preserved stock items fetched successfully.', data: items });
7678
} catch (err) {
79+
console.error(err);
7780
res
7881
.status(400)
7982
.json({ message: 'Something went wrong while fetching preserved stock items.' });
@@ -154,6 +157,39 @@ const KIInventoryController = () => {
154157
res.status(400).json({ message: err.message });
155158
}
156159
};
160+
const getInventoryStats = async (req, res) => {
161+
try {
162+
// Only fetch the fields needed for stats — avoids sending full item payloads
163+
const items = await KIInventoryItem.find(
164+
{},
165+
{ presentQuantity: 1, reorderAt: 1, category: 1, expiryDate: 1 },
166+
).lean();
167+
const totalItems = items.length;
168+
const criticalStock = items.filter((i) => i.presentQuantity <= i.reorderAt * 0.5).length;
169+
const lowStock = items.filter(
170+
(i) => i.presentQuantity <= i.reorderAt && i.presentQuantity > i.reorderAt * 0.5,
171+
).length;
172+
173+
const oneYearFromNow = new Date();
174+
oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1);
175+
const preserved = items.filter(
176+
(i) => i.category === 'INGREDIENT' && new Date(i.expiryDate) >= oneYearFromNow,
177+
).length;
178+
179+
res.status(200).json({
180+
message: 'Inventory stats fetched successfully.',
181+
data: {
182+
totalItems,
183+
criticalStock,
184+
lowStock,
185+
preserved,
186+
},
187+
});
188+
} catch (err) {
189+
console.error(err);
190+
res.status(500).json({ message: 'Something went wrong while fetching inventory stats.' });
191+
}
192+
};
157193
return {
158194
addItem,
159195
getItems,
@@ -162,6 +198,7 @@ const KIInventoryController = () => {
162198
updateOnUsage,
163199
updateStoredQuantity,
164200
updateNextHarvest,
201+
getInventoryStats,
165202
};
166203
};
167204
module.exports = KIInventoryController;

0 commit comments

Comments
 (0)