ecliptica/server/routers/task-boss/index.js

163 lines
4.5 KiB
JavaScript

const router = require('express').Router()
const { promisify } = require('util')
const jwt = require('jsonwebtoken')
const fs = require('fs')
const path = require('path')
const md5 = require('crypto-js/md5')
const { JWT_SECRET_KEY } = require('./constants')
const { getResponse } = require('../../utils/common')
const { connect, getPeoplesData, createDept, getDepts, getDeptData, deleteDeptById, setUsers, authenticate } = require('./controllers')
connect()
router.get('/depts', async (req, res) => {
const errors = []
const depts = await getDepts().catch((e) => errors.push(e.message))
res.send(getResponse(errors, depts))
})
router.get('/peoples', async (req, res) => {
const errors = []
const peoplesData = await getPeoplesData().catch((e) => errors.push(e.message))
res.send(getResponse(errors, peoplesData))
})
router.post('/depts/create', async (req, res) => {
const errors = []
const deptData = await createDept(req.body.data).catch((e) => errors.push(e.message))
res.send(getResponse(errors, deptData))
})
router.get('/dept/:id', async (req, res) => {
const errors = []
const data = await getDeptData(req.params.id)
res.send(getResponse(errors, data))
})
router.post('/dept/delete', async (req, res) => {
const errors = []
await deleteDeptById(req.body)
res.send(getResponse(errors, 'success'))
});
router.post('/login', async (req, res, next) => {
const auth = promisify(authenticate)
try {
console.log(req.body.login)
console.log(req.body.password)
const { hash, salt, ...user } = await auth(req.body.login, req.body.password)
const token = jwt.sign({
user,
}, JWT_SECRET_KEY)
req.session.regenerate(() => {
req.session.user = user
res.send({
success: true,
body: {
...user,
token,
},
errors: [],
warnings: [],
})
})
} catch (error) {
next(error)
}
})
router.get('/tasks', (req, resp) => {
resp.send(require('./stubs/tasks/tasks.json'))
})
router.post('/tasks/create', (req, resp) => {
try {
const { dept } = req.body
const rawTasksData = fs.readFileSync(path.resolve(__dirname, './stubs/tasks/tasks.json'))
const tasksData = JSON.parse(rawTasksData)
const deptTasksData = tasksData.body.filter((data) => data.label === dept)
const task = {
id: md5(new Date()).toString(),
number: 100,
task: req.body.task,
status: 'open',
priority: req.body.priority,
performer: req.body.performer,
deadline: new Date(req.body.deadline).getTime(),
lastChanged: new Date().getTime(),
description: req.body.description,
}
if (!deptTasksData.length) {
const newDeptTasksData = {
label: req.body.dept,
data: [task],
}
tasksData.body.push(newDeptTasksData)
} else {
tasksData.body.map((data) => {
if (data.label === dept) {
return data.data.push(task)
}
return data
})
}
fs.writeFileSync(path.resolve(__dirname, './stubs/tasks/tasks.json'), JSON.stringify(tasksData))
resp.send({
success: true,
body: task,
errors: [],
warnings: [],
})
} catch (e) {
resp.send('./stubs/error.json')
}
})
router.post('/tasks/delete', (req, resp) => {
resp.send(require('./stubs/tasks/delete.json'))
})
router.post('/tasks/edit', (req, resp) => {
resp.send({
success: true,
body: req.body,
errors: [],
warnings: [],
})
})
router.post('/sign-up', async (req, res, next) => {
try {
const { hash, salt, ...user } = await setUsers({
login: req.body.login,
password: req.body.password,
mail: req.body.mail,
})
const token = jwt.sign({
user,
}, JWT_SECRET_KEY)
req.session.regenerate(() => {
req.session.user = user
res.send({
success: true,
body: {
...user,
token,
},
errors: [],
warnings: [],
})
})
} catch (error) {
next(error)
}
})
module.exports = router