Skip to content
This repository was archived by the owner on Sep 20, 2025. It is now read-only.

Commit 6b6adae

Browse files
committed
Add admin products count stat request
1 parent 59286f5 commit 6b6adae

File tree

7 files changed

+109
-0
lines changed

7 files changed

+109
-0
lines changed

grocery-store-management-system.postman_collection.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,46 @@
398398
}
399399
]
400400
},
401+
{
402+
"name": "Stats",
403+
"item": [
404+
{
405+
"name": "Bearer Token Restricted",
406+
"item": [
407+
{
408+
"name": "Products Count",
409+
"request": {
410+
"auth": {
411+
"type": "bearer",
412+
"bearer": [
413+
{
414+
"key": "token",
415+
"value": "{{token}}",
416+
"type": "string"
417+
}
418+
]
419+
},
420+
"method": "GET",
421+
"header": [],
422+
"url": {
423+
"raw": "{{api}}/web/stats/admin/products",
424+
"host": [
425+
"{{api}}"
426+
],
427+
"path": [
428+
"web",
429+
"stats",
430+
"admin",
431+
"products"
432+
]
433+
}
434+
},
435+
"response": []
436+
}
437+
]
438+
}
439+
]
440+
},
401441
{
402442
"name": "Get Users",
403443
"request": {

src/models/v1/product.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
const {
33
Model
44
} = require('sequelize');
5+
const { nodeEnv, } = require('../../config');
56
module.exports = (sequelize, DataTypes) => {
67
class product extends Model {
78
/**
@@ -12,6 +13,28 @@ module.exports = (sequelize, DataTypes) => {
1213
static associate(models) {
1314
// define association here
1415
}
16+
17+
/**
18+
* @returns {object|false}
19+
*/
20+
static async getAdminProductCountStat() {
21+
try {
22+
const result = await sequelize.query(
23+
`SELECT count(id) as count
24+
FROM ${this.getTableName()}`,
25+
{
26+
type: sequelize.QueryTypes.SELECT,
27+
},
28+
);
29+
30+
return { count: result[0].count };
31+
} catch(err) {
32+
if ("production" !== nodeEnv) {
33+
console.log(err);
34+
}
35+
return false;
36+
}
37+
}
1538
}
1639
product.init({
1740
id: {

src/routes/api/v1/web/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ const express = require('express');
33
const users = require("./users");
44
const user = require("./user");
55
const admin = require("./admin");
6+
const stats = require("./stats");
67

78
const router = express.Router();
89

910
router.use("/users", users);
1011
router.use("/user", user);
1112
router.use("/admin", admin);
13+
router.use("/stats", stats);
1214

1315
module.exports = router;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const express = require("express");
2+
const products = require("./products");
3+
4+
const router = express.Router();
5+
6+
router.use("/products", products);
7+
8+
module.exports = router;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const express = require("express");
2+
const products = require("./products");
3+
4+
const router = express.Router();
5+
6+
router.use("/", products);
7+
8+
module.exports = router;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const express = require("express");
2+
const { status, } = require("http-status");
3+
const authenticate = require("../../../../../../../middlewares/v1/authenticate");
4+
const db = require("../../../../../../../models/v1/index");
5+
const { message500 } = require("../../../../../../../utils/httpResponses");
6+
7+
const router = express.Router();
8+
9+
router.get("/", authenticate, async (req, res) => {
10+
const result = await db.sequelize.models.product.getAdminProductCountStat();
11+
if (false === result) {
12+
res.status(status.UNAUTHORIZED);
13+
return res.json(message500);
14+
}
15+
16+
res.status(status.OK);
17+
return res.json({ data: result.count });
18+
});
19+
20+
module.exports = router;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const express = require("express");
2+
const admin = require("./admin");
3+
4+
const router = express.Router();
5+
6+
router.use("/admin", admin);
7+
8+
module.exports = router;

0 commit comments

Comments
 (0)