created http requests router
This commit is contained in:
parent
c70e65e58c
commit
11b570336f
|
|
@ -0,0 +1,263 @@
|
||||||
|
/**
|
||||||
|
* @fileoverview This file contains the route definitions for the user-related endpoints.
|
||||||
|
*/
|
||||||
|
import {Router} from 'express'
|
||||||
|
import { getDeviceController, getDeviceByUuidController, postDeviceController, putDeviceController, deleteDeviceController, getDeviceswithMinimumStockController, getDeviceBySerialNumberController, getDeviceByModelController, getDeviceByBrandController } from '../controllers/resource_types/deviceController.js'
|
||||||
|
import { getUserListController, getUserInfoController, postUserController, putUserController, softDeleteUserController } from '../controllers/authorization/userController.js'
|
||||||
|
import { getRoleController, getRoleInfoController, postRoleController, putRoleController, deleteRoleController } from '../controllers/authorization/rolesController.js'
|
||||||
|
import { getPermissionController, getPermissionByUuidController, postPermissionController, putPermissionController, softDeletePermissionController } from '../controllers/authorization/permissionsController.js'
|
||||||
|
import { indexController } from '../controllers/indexController.js'
|
||||||
|
import { postLoginController } from '../controllers/authorization/loginController.js'
|
||||||
|
import { addLinks } from '../utils/links.js'
|
||||||
|
import { linkRoutes } from '../index.js'
|
||||||
|
import {
|
||||||
|
sendCreatedResponse,
|
||||||
|
sendLoginSuccessfullResponse,
|
||||||
|
sendOkResponse,
|
||||||
|
sendResponseNoContent,
|
||||||
|
} from '../utils/responses.js'
|
||||||
|
import { integer, uuid, varChar} from '../validators/expressValidator/customValidators.js'
|
||||||
|
import {payloadExpressValidator} from '../validators/expressValidator/payloadExpressValidator.js'
|
||||||
|
import { error422, errorHandler } from '../utils/errors.js'
|
||||||
|
import { authorizePermission, setToken, authenticateToken} from '../middlewares/auth.js'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @function default
|
||||||
|
* @param {Object} configuration based on environment
|
||||||
|
* @returns {Router} all endpoint routes
|
||||||
|
*/
|
||||||
|
export default(config) => {
|
||||||
|
/**
|
||||||
|
* Express router to mount user related functions on.
|
||||||
|
* @type {Object}
|
||||||
|
* @const
|
||||||
|
* @namespace deviceRouter
|
||||||
|
*/
|
||||||
|
const routes = Router()
|
||||||
|
const hasAddLinks = config.environment !== 'production'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets message from data object result from index controller to check if server is up.
|
||||||
|
* Ideally, if server is working correctly it should return message
|
||||||
|
* @name get/
|
||||||
|
* @function
|
||||||
|
* @inner
|
||||||
|
* @memberof deviceRouter
|
||||||
|
* @route GET /
|
||||||
|
* @returns {Device} 200 - The data object with message
|
||||||
|
* @returns {ErrorResponse} 404 - Data not found
|
||||||
|
* @returns {ErrorResponse} 500 - Internal server error
|
||||||
|
*/
|
||||||
|
routes.get(
|
||||||
|
'/',
|
||||||
|
(req, res, next) => indexController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendOkResponse(result, req, res)
|
||||||
|
)
|
||||||
|
|
||||||
|
// User Routes
|
||||||
|
routes.get(
|
||||||
|
'/users',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
(req, res, next) => authorizePermission('/users')(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid').optional({ nullable: false, values: 'falsy' }),
|
||||||
|
varChar('username').optional({ nullable: false, values: 'falsy' }),
|
||||||
|
varChar('email').optional({ nullable: false, values: 'falsy' })
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => getUserListController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendOkResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.get(
|
||||||
|
'/users/:uuid',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
(req, res, next) => authorizePermission('/users/:uuid')(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => getUserInfoController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendOkResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.post(
|
||||||
|
'/users',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
(req, res, next) => authorizePermission('/users')(req, res, next, config),
|
||||||
|
[
|
||||||
|
varChar('username'),
|
||||||
|
varChar('password'),
|
||||||
|
varChar('email').optional({ nullable: true, values: 'falsy' }),
|
||||||
|
uuid('fk_role')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => postUserController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendCreatedResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.put(
|
||||||
|
'/users/:uuid',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
(req, res, next) => authorizePermission('/users/:uuid')(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid'),
|
||||||
|
varChar('username').optional({ nullable: false, values: 'falsy' }),
|
||||||
|
varChar('email').optional({ nullable: true, values: 'falsy' }),
|
||||||
|
uuid('fk_role').optional({ nullable: false, values: 'falsy' })
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => putUserController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendCreatedResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.put(
|
||||||
|
'/users/:uuid',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
(req, res, next) => authorizePermission('/users/:uuid')(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => softDeleteUserController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendResponseNoContent(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.get(
|
||||||
|
'/roles',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => getRoleController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendOkResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.get(
|
||||||
|
'/roles/:uuid',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => getRoleInfoController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendOkResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.post(
|
||||||
|
'/roles',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
[
|
||||||
|
varChar('name')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => postRoleController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendCreatedResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.put(
|
||||||
|
'/roles/:uuid',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid'),
|
||||||
|
varChar('name').optional({ nullable: false, values: 'falsy' })
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => putRoleController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendCreatedResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.delete(
|
||||||
|
'/roles/:uuid',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => deleteRoleController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendResponseNoContent(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.get(
|
||||||
|
'/permissions',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => getPermissionController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendOkResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.get(
|
||||||
|
'/permissions/:uuid',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => getPermissionByUuidController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendOkResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.post(
|
||||||
|
'/permissions',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
[
|
||||||
|
varChar('name')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => postPermissionController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendCreatedResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.put(
|
||||||
|
'/permissions/:uuid',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => putPermissionController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendCreatedResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
routes.delete(
|
||||||
|
'/permissions/:uuid',
|
||||||
|
(req, res, next) => authenticateToken(req, res, next, config),
|
||||||
|
(req, res, next) => authorizePermission('permissions')(req, res, next, config),
|
||||||
|
[
|
||||||
|
uuid('uuid')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => softDeletePermissionController(req, res, next, config),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendResponseNoContent(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Login Endpoint
|
||||||
|
routes.post(
|
||||||
|
'/login',
|
||||||
|
[
|
||||||
|
varChar('username'),
|
||||||
|
varChar('password')
|
||||||
|
],
|
||||||
|
(req, res, next) => payloadExpressValidator(req, res, next, config),
|
||||||
|
(req, res, next) => postLoginController(req, res, next, config),
|
||||||
|
(result, req, res, next) => setToken(result, req, res, next),
|
||||||
|
(result, req, res, next) => addLinks(result, req, res, next, hasAddLinks, linkRoutes),
|
||||||
|
(result, req, res, _) => sendLoginSuccessfullResponse(result, req, res)
|
||||||
|
);
|
||||||
|
|
||||||
|
return routes;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue