Passed
Push — main ( d1d508...d26c33 )
by Julia
03:28 queued 01:41
created

server/routes/v1/admin/users.js   A

Complexity

Total Complexity 6
Complexity/F 1

Size

Lines of Code 84
Function Count 6

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 6
eloc 15
mnd 0
bc 0
fnc 6
dl 0
loc 84
bpm 0
cpm 1
noi 18
c 0
b 0
f 0
rs 10
1
import express from "express";
2
import userModel from "../../../src/models/user.js";
3
import paymentModel from "../../../src/models/payment.js";
4
5
const router = express.Router();
6
7
/**
8
 * @description Route for getting all users
9
 *
10
 * @param {express.Request} req Request object
11
 * @param {express.Response} res Response object
12
 * @param {express.NextFunction} next Next function
13
 *
14
 * @returns {void}
15
 */
16
router.get("/", async (req, res, next) => {
17
    try {
18
        const users = await userModel.all();
19
20
        res.status(200).json(users);
21
    } catch (error) {
22
        next(error);
23
    }
24
});
25
26
/**
27
 * @description Route for getting a set of users using pagination
28
 *
29
 * @param {express.Request} req Request object
30
 * @param {express.Response} res Response object
31
 * @param {express.NextFunction} next Next function
32
 *
33
 * @returns {void}
34
 */
35
router.get("/limit/:limit/offset/:offset", async (req, res, next) => {
36
    try {
37
        const limit = parseInt(req.params.limit);
38
        const offset = parseInt(req.params.offset);
39
40
        const users = await userModel.allPag(offset, limit);
41
42
        res.status(200).json(users);
43
    } catch (error) {
44
        next(error);
45
    }
46
});
47
48
/**
49
 * @description Route for searching for a user
50
 *
51
 * @param {express.Request} req Request object
52
 * @param {express.Response} res Response object
53
 * @param {express.NextFunction} next Next function
54
 *
55
 * @returns {void}
56
 */
57
router.get("/search/:search", async (req, res, next) => {
58
    try {
59
        const searchParam = req.params.search;
60
61
        const users = await userModel.userSearch(searchParam)[0];
62
63
        res.status(200).json(users);
64
    } catch (error) {
65
        next(error);
66
    }
67
});
68
69
/**
70
 * @description Route for getting one user
71
 *
72
 * @param {express.Request} req Request object
73
 * @param {express.Response} res Response object
74
 * @param {express.NextFunction} next Next function
75
 *
76
 * @returns {void}
77
 */
78
router.get("/:id", async (req, res, next) => {
79
    try {
80
        const searchParam = parseInt(req.params.id);
81
82
        const users = await userModel.userSearch(searchParam)[0];
83
84
        res.status(200).json(users);
85
    } catch (error) {
86
        next(error);
87
    }
88
});
89
90
/**
91
 * @description Route for billing users with negative balance
92
 *
93
 * @param {express.Request} req Request object
94
 * @param {express.Response} res Response object
95
 * @param {express.NextFunction} next Next function
96
 *
97
 * @returns {void}
98
 */
99
router.post("/invoice", async (req, res, next) => {
100
    try {
101
        const invoiceData = await paymentModel.invoice();
102
103
        res.status(200).json(invoiceData);
104
    } catch (error) {
105
        next(error);
106
    }
107
});
108
109
/**
110
 * @description Route for updating a user's status
111
 *
112
 * @param {express.Request} req Request object
113
 * @param {express.Response} res Response object
114
 * @param {express.NextFunction} next Next function
115
 *
116
 * @returns {void}
117
 */
118
router.put("/:id/status", async (req, res, next) => {
119
    try {
120
        const userId = parseInt(req.params.id);
121
        const status = req.body.active;
122
        const userData = await userModel.updStatus(userId, status);
123
124
        res.status(200).json(userData);
125
    } catch (error) {
126
        next(error);
127
    }
128
});
129
130
/**
131
 * @description Route for updating a user's email
132
 *
133
 * @param {express.Request} req Request object
134
 * @param {express.Response} res Response object
135
 * @param {express.NextFunction} next Next function
136
 *
137
 * @returns {void}
138
 */
139
router.put("/:id/email", async (req, res, next) => {
140
    try {
141
        const userId = parseInt(req.params.id);
142
        const email = req.body.email;
143
        const userData = await userModel.updEmail(userId, email);
144
145
        res.status(200).json(userData);
146
    } catch (error) {
147
        next(error);
148
    }
149
});
150
151
export default router;
152