|
|
|
@@ -1,23 +1,25 @@
|
|
|
|
|
const express = require('express');
|
|
|
|
|
const fs = require('fs');
|
|
|
|
|
const path = require('path');
|
|
|
|
|
const { v4: uuidv4, validate} = require('uuid');
|
|
|
|
|
const {v4: uuidv4, validate} = require('uuid');
|
|
|
|
|
const crypto = require('crypto');
|
|
|
|
|
|
|
|
|
|
const { sendResponse } = require('../helpers/responseHelper');
|
|
|
|
|
const {sendResponse} = require('../helpers/responseHelper');
|
|
|
|
|
const {httpStatus, httpStatusMessages} = require('../helpers/httpResponses')
|
|
|
|
|
const {schemas} = require("../models/schemaMapper");
|
|
|
|
|
|
|
|
|
|
const UserAlreadyExistsException =require('../exceptions/userAlreadyExistsError');
|
|
|
|
|
const UserAlreadyExistsException = require('../exceptions/userAlreadyExistsError');
|
|
|
|
|
const UserNotExistingError = require("../exceptions/userNotExistingError");
|
|
|
|
|
const ImproperDirStructureError = require("../exceptions/improperDirStructureError");
|
|
|
|
|
const EmailAlreadyInSystemError = require("../exceptions/emailAlreadyInSystemError");
|
|
|
|
|
const {HttpStatusCode} = require("axios");
|
|
|
|
|
const DepartmentAlreadyExistsError = require("../exceptions/departmentAlreadyExistsError");
|
|
|
|
|
const DepartmentNotExistingError = require("../exceptions/departmentNotExistingError");
|
|
|
|
|
|
|
|
|
|
const router = express.Router();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
router.get('/', async(req, res) => {
|
|
|
|
|
router.get('/', async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const usersFilePath = path.join(__dirname, '..', 'db', 'users.json');
|
|
|
|
|
const usersData = fs.readFileSync(usersFilePath, 'utf8');
|
|
|
|
@@ -30,7 +32,7 @@ router.get('/', async(req, res) => {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const validateRegisterBody = (req, res, next) => {
|
|
|
|
|
const { error, value } = schemas.usersRegisterModelSchema.validate(req.body);
|
|
|
|
|
const {error, value} = schemas.usersRegisterModelSchema.validate(req.body);
|
|
|
|
|
if (error) {
|
|
|
|
|
return sendResponse(res, httpStatus.BAD_REQUEST, error.details[0].message);
|
|
|
|
|
}
|
|
|
|
@@ -44,7 +46,7 @@ router.post('/register', validateRegisterBody, async (req, res) => {
|
|
|
|
|
const usersData = fs.readFileSync(usersFilePath, 'utf8');
|
|
|
|
|
const usersJson = JSON.parse(usersData);
|
|
|
|
|
|
|
|
|
|
const { name, email, password, department} = req.jsonModel;
|
|
|
|
|
const {name, email, password, department} = req.jsonModel;
|
|
|
|
|
|
|
|
|
|
const existingUser = usersJson.find(user => user.email === email);
|
|
|
|
|
if (existingUser) {
|
|
|
|
@@ -79,7 +81,7 @@ router.post('/register', validateRegisterBody, async (req, res) => {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const validateLoginBody = (req, res, next) => {
|
|
|
|
|
const { error, value } = schemas.usersLoginModelSchema.validate(req.body);
|
|
|
|
|
const {error, value} = schemas.usersLoginModelSchema.validate(req.body);
|
|
|
|
|
if (error) {
|
|
|
|
|
return sendResponse(res, httpStatus.BAD_REQUEST, error.details[0].message);
|
|
|
|
|
}
|
|
|
|
@@ -93,7 +95,7 @@ router.post('/login', validateLoginBody, async (req, res) => {
|
|
|
|
|
const usersData = fs.readFileSync(usersFilePath, 'utf8');
|
|
|
|
|
const usersJson = JSON.parse(usersData);
|
|
|
|
|
|
|
|
|
|
const { email, password } = req.jsonModel;
|
|
|
|
|
const {email, password} = req.jsonModel;
|
|
|
|
|
const hashedPassword = crypto.createHash('sha256').update(password).digest('hex');
|
|
|
|
|
const user = usersJson.find(user => user.email === email && user.password === hashedPassword);
|
|
|
|
|
|
|
|
|
@@ -120,7 +122,7 @@ router.post('/login', validateLoginBody, async (req, res) => {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const validateEmailValidationBody = (req, res, next) => {
|
|
|
|
|
const { error, value } = schemas.emailVerificationSchema.validate(req.body);
|
|
|
|
|
const {error, value} = schemas.emailVerificationSchema.validate(req.body);
|
|
|
|
|
if (error) {
|
|
|
|
|
return sendResponse(res, httpStatus.BAD_REQUEST, error.details[0].message);
|
|
|
|
|
}
|
|
|
|
@@ -140,7 +142,7 @@ router.post('/validate_email', validateEmailValidationBody, (req, res) => {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sendResponse(res, httpStatus.OK, httpStatusMessages[httpStatus.OK]);
|
|
|
|
|
}catch(error){
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error(`Error: ${error.message}`);
|
|
|
|
|
if (error instanceof EmailAlreadyInSystemError) {
|
|
|
|
|
return sendResponse(res, httpStatus.CONFLICT, error.message);
|
|
|
|
@@ -150,9 +152,8 @@ router.post('/validate_email', validateEmailValidationBody, (req, res) => {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const validateDirStructureBody = (req, res, next) => {
|
|
|
|
|
const { error, value } = schemas.dirStructureModelSchema.validate(req.body);
|
|
|
|
|
const {error, value} = schemas.dirStructureModelSchema.validate(req.body);
|
|
|
|
|
if (error) {
|
|
|
|
|
return sendResponse(res, httpStatus.BAD_REQUEST, error.details[0].message);
|
|
|
|
|
}
|
|
|
|
@@ -162,7 +163,7 @@ const validateDirStructureBody = (req, res, next) => {
|
|
|
|
|
|
|
|
|
|
router.put('/dir_structure', validateDirStructureBody, (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const { id, dir_config, total_space } = req.jsonModel;
|
|
|
|
|
const {id, dir_config, total_space} = req.jsonModel;
|
|
|
|
|
|
|
|
|
|
const backupFilePath = path.join(__dirname, '..', 'db', 'backup_schemas.json');
|
|
|
|
|
let backupArray = [];
|
|
|
|
@@ -202,6 +203,52 @@ router.put('/dir_structure', validateDirStructureBody, (req, res) => {
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const validateUserDepartmentPatch = (req, res, next) => {
|
|
|
|
|
const {error, value} = schemas.userDepartmentPatchSchema.validate(req.body);
|
|
|
|
|
if (error) {
|
|
|
|
|
return sendResponse(res, httpStatus.BAD_REQUEST, error.details[0].message);
|
|
|
|
|
}
|
|
|
|
|
req.jsonModel = value;
|
|
|
|
|
next();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
router.patch('/:id', validateUserDepartmentPatch, async (req, res) => {
|
|
|
|
|
const id = req.params.id;
|
|
|
|
|
console.log('esti aici');
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const department_id = req.jsonModel.department;
|
|
|
|
|
|
|
|
|
|
const usersFilePath = path.join(__dirname, '..', 'db', 'users.json');
|
|
|
|
|
const usersData = fs.readFileSync(usersFilePath, 'utf8');
|
|
|
|
|
const usersJson = JSON.parse(usersData);
|
|
|
|
|
|
|
|
|
|
const index = usersJson.findIndex(user => user.id === id);
|
|
|
|
|
if (index === -1) {
|
|
|
|
|
throw new UserNotExistingError();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const departmentsFilePath = path.join(__dirname, '..', 'db', 'departments.json');
|
|
|
|
|
const departmentsData = fs.readFileSync(departmentsFilePath, 'utf8');
|
|
|
|
|
const departments = JSON.parse(departmentsData);
|
|
|
|
|
|
|
|
|
|
console.log(departments);
|
|
|
|
|
|
|
|
|
|
const indexDepartment = departments.findIndex(department => department.id === department_id);
|
|
|
|
|
if (indexDepartment === -1) {
|
|
|
|
|
throw new DepartmentNotExistingError();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
usersJson[index].department = department_id;
|
|
|
|
|
fs.writeFileSync(usersFilePath, JSON.stringify(usersJson, null, 2));
|
|
|
|
|
|
|
|
|
|
return sendResponse(res, httpStatus.OK, httpStatusMessages[httpStatus.OK]);
|
|
|
|
|
}catch(error){
|
|
|
|
|
console.log(error);
|
|
|
|
|
return sendResponse(res, httpStatus.INTERNAL_SERVER_ERROR, httpStatusMessages[httpStatus.INTERNAL_SERVER_ERROR]);
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
router.delete('/:id', async (req, res) => {
|
|
|
|
|
const id = req.params.id;
|
|
|
|
@@ -232,7 +279,7 @@ router.delete('/:id', async (req, res) => {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const validateModifyUserBody = (req, res, next) => {
|
|
|
|
|
const { error, value } = schemas.usersModifyModelSchema.validate(req.body);
|
|
|
|
|
const {error, value} = schemas.usersModifyModelSchema.validate(req.body);
|
|
|
|
|
if (error) {
|
|
|
|
|
return sendResponse(res, httpStatus.BAD_REQUEST, error.details[0].message);
|
|
|
|
|
}
|
|
|
|
@@ -274,7 +321,7 @@ router.put('/:id', validateModifyUserBody, async (req, res) => {
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error(`Error: ${error.message}`);
|
|
|
|
|
|
|
|
|
|
if (error instanceof EmailAlreadyInSystemError){
|
|
|
|
|
if (error instanceof EmailAlreadyInSystemError) {
|
|
|
|
|
return sendResponse(res, httpStatus.CONFLICT, error.message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|