diff --git a/.env b/.env index b981354fc0ce98f2bce191e2ece716909c215911..31ac94e167f2502a52f2a6a55dd6ebefe18c04a3 100644 --- a/.env +++ b/.env @@ -2,6 +2,6 @@ PORT=8000 INSTANCE=PROD HOST=localhost USER=root -PASSWORD=rootroot +PASSWORD=Comfortablynumb.07 DB=parameter_database -AUTH_BASE_URL= \ No newline at end of file +AUTH_BASE_URL=http://localhost:3000/users \ No newline at end of file diff --git a/src/Controllers/UserController.ts b/src/Controllers/UserController.ts index 4a630c1d57456d55015284c415b0618971f2cd6b..9b3ab78c12e385f6a7761c0f55821a2cc8a1786d 100644 --- a/src/Controllers/UserController.ts +++ b/src/Controllers/UserController.ts @@ -1,42 +1,101 @@ +// TODO: Get rid of all the 'any' mentions +/* eslint-disable @typescript-eslint/no-explicit-any */ + import { Handler, Request, Response, Router, } from 'express'; +import UserAPI from '../Services/UserAPI'; const router = Router(); const create: Handler = async (req: Request, res: Response) => { + try { + const user: any = await UserAPI.create(req.body); + return res.status(200).send(user); + } catch (error) { + const e = error as Error; + return res.status(400).json({ error: e.message }); + } }; const listUsers: Handler = async (req: Request, res: Response) => { - + try { + const userList: any = await UserAPI.listUsers(req.body); + return res.status(200).send(userList); + } catch (error) { + const e = error as Error; + return res.status(400).json({ error: e.message }); + } }; const login: Handler = async (req: Request, res: Response) => { - + try { + const { token, user }: any = await UserAPI.login(req.body); + return res.status(200).send({ token, user }); + } catch (error) { + const e = error as Error; + return res.status(400).json({ error: e.message }); + } }; const update: Handler = async (req: Request, res: Response) => { - + try { + const user: any = await UserAPI.update(req.body, req.params.id); + return res.status(200).send(user); + } catch (error) { + const e = error as Error; + return res.status(400).json({ error: e.message }); + } }; const password: Handler = async (req: Request, res: Response) => { - + try { + const user: any = await UserAPI.password(req.body, req.params.id); + return res.status(200).send(user); + } catch (error) { + const e = error as Error; + return res.status(400).json({ error: e.message }); + } }; const approve: Handler = async (req: Request, res: Response) => { - + try { + const user: any = await UserAPI.approve(req.params.id); + return res.status(200).send(user); + } catch (error) { + const e = error as Error; + return res.status(400).json({ error: e.message }); + } }; const cancel: Handler = async (req: Request, res: Response) => { - + try { + const user: any = await UserAPI.cancel(req.params.id); + return res.status(200).send(user); + } catch (error) { + const e = error as Error; + return res.status(400).json({ error: e.message }); + } }; const giveAdminPermission: Handler = async (req: Request, res: Response) => { - + try { + const user: any = await UserAPI.giveAdminPermission(req.params.id); + return res.status(200).send(user); + } catch (error) { + const e = error as Error; + return res.status(400).json({ error: e.message }); + } }; const removeAdminPermission: Handler = async (req: Request, res: Response) => { - + try { + const user: any = await UserAPI.removeAdminPermission(req.params.id); + return res.status(200).send(user); + } catch (error) { + const e = error as Error; + return res.status(400).json({ error: e.message }); + } }; router.post('/', create); @@ -48,3 +107,5 @@ router.put('/:id/approve', approve); router.put('/:id/cancel', cancel); router.put('/:id/admin', giveAdminPermission); router.put('/:id/client', removeAdminPermission); + +export default router; diff --git a/src/Services/UserAPI.ts b/src/Services/UserAPI.ts index b0fc01fda0e291f9f43172f880313c1b43196f46..25ca43962e90ca6413136338b48b78374999211f 100644 --- a/src/Services/UserAPI.ts +++ b/src/Services/UserAPI.ts @@ -1,3 +1,8 @@ +// TODO: Set according return types and don't use 'any' explicitly. Nor implicitly. +// Basically don't use 'any' in any context whatsoever. Despite it being the easiest solution. + +/* eslint-disable @typescript-eslint/explicit-function-return-type */ +/* eslint-disable @typescript-eslint/no-explicit-any */ import axios from 'axios'; const instance = axios.create({ @@ -11,7 +16,93 @@ export const validate = (token: string): number => { id = (res.data as any).userId as number; }) .catch((err) => { + throw (err); // if needed implement later }); return id; }; + +const create = (user: any): any => { + instance.post('/', user) + .then((res) => res) + .catch((err) => { + throw (err); + }); +}; + +const login = (user: any): any => { + instance.post('/login', user) + .then((res) => res) + .catch((err) => { + throw (err); + }); +}; + +const listUsers = (requirements: any): any => { + instance.get('/', requirements) + .then((res) => res) + .catch((err) => { + throw (err); + }); +}; + +const update = (user: any, idUser: string) => { + const url = `/${idUser}`; + instance.put(url, user) + .then((res) => res) + .catch((err) => { + throw (err); + }); +}; + +const password = (user: any, idUser: string) => { + instance.put('/password', user, { params: { id: idUser } }) + .then((res) => res) + .catch((err) => { + throw (err); + }); +}; + +const approve = (idUser: string) => { + instance.put('/approve', { params: { id: idUser } }) + .then((res) => res) + .catch((err) => { + throw (err); + }); +}; + +const cancel = (idUser: string) => { + instance.put('/cancel', { params: { id: idUser } }) + .then((res) => res) + .catch((err) => { + throw (err); + }); +}; + +const giveAdminPermission = (idUser: string) => { + instance.put('/admin', { params: { id: idUser } }) + .then((res) => res) + .catch((err) => { + throw (err); + }); +}; + +const removeAdminPermission = (idUser: string) => { + instance.put('/client', { params: { id: idUser } }) + .then((res) => res) + .catch((err) => { + throw (err); + }); +}; + +export default { + create, + login, + listUsers, + update, + password, + approve, + cancel, + giveAdminPermission, + removeAdminPermission, +}; diff --git a/src/index.ts b/src/index.ts index a56eac52fb6f265d2dfca9b11713d74c9af33d22..4b81e702516a53ec07d210296ba9f5d3d734d0cd 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,6 +14,7 @@ import YAML from 'yamljs'; import Routes from './routes'; import logger from './Logger/logger'; import ParameterDataBaseLoader from './Loaders/ParameterDataBaseLoader'; +import authChecker from './Middlewares/authChecker'; const app: Application = express(); const PORT = process.env.PORT || 8000; @@ -38,11 +39,13 @@ app.use(express.raw({ limit: '50mb', })); -const auditMiddleware = (req, res, next) => { +// TODO: Set according return type. Plus, 'res is declared but never used' +// eslint-disable-next-line @typescript-eslint/explicit-function-return-type +const auditMiddleware = (req: Request, res: Response, next: NextFunction) => { next(); }; -app.use(authChecker); -app.use(auditMiddleware); +// app.use(authChecker); +// app.use(auditMiddleware); app.use(Routes); diff --git a/src/routes.ts b/src/routes.ts index c0ea909c381728d2b0e3a226166ec8e1f4102f4e..c6d1ccb22b4cdb8982dbf66b0fe8cbefeee9de36 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -2,6 +2,7 @@ import { Request, Response, Router } from 'express'; import SheetController from './Controllers/SheetController'; import CalculatorController from './Controllers/CalculatorController'; import ParameterController from './Controllers/ParameterController'; +import UserController from './Controllers/UserController'; const router = Router(); @@ -15,4 +16,6 @@ router.use('/repCalculator', CalculatorController); router.use('/parameters', ParameterController); +router.use('/users', UserController); + export default router;