forked from bro-students/multy-stub
117 lines
2.7 KiB
JavaScript
117 lines
2.7 KiB
JavaScript
|
const router = require('express').Router()
|
||
|
const { expressjwt: jwt } = require('express-jwt')
|
||
|
|
||
|
const { JWT_SECRET } = require('./constants')
|
||
|
const {
|
||
|
getMyProjects,
|
||
|
newProject,
|
||
|
getProjectById,
|
||
|
updateProject,
|
||
|
getMyProjectById,
|
||
|
deleteProjectById,
|
||
|
updateProjectMembers,
|
||
|
} = require('./db')
|
||
|
const { requiredFields, responseWrapper, _idToId } = require('./utils')
|
||
|
|
||
|
router.get('/healthcheck', (req, res) => {
|
||
|
res.send(true)
|
||
|
})
|
||
|
|
||
|
router.get('/', jwt({
|
||
|
secret: JWT_SECRET, algorithms: ['HS256'],
|
||
|
}), async (req, res, next) => {
|
||
|
try {
|
||
|
const projectList = await getMyProjects(req.auth.id)
|
||
|
|
||
|
res.send(responseWrapper(undefined, projectList))
|
||
|
} catch (e) {
|
||
|
next(e)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
router.get('/:projectId', jwt({
|
||
|
secret: JWT_SECRET, algorithms: ['HS256'],
|
||
|
}), async (req, res, next) => {
|
||
|
try {
|
||
|
const { projectId } = req.params
|
||
|
const myProject = await getMyProjectById(req.auth.id, projectId)
|
||
|
|
||
|
res.send(responseWrapper(undefined, myProject))
|
||
|
} catch (e) {
|
||
|
next(e)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
router.post('/new', jwt({
|
||
|
secret: JWT_SECRET, algorithms: ['HS256'],
|
||
|
}), async (req, res, next) => {
|
||
|
try {
|
||
|
const userId = req.auth.id
|
||
|
const { title, code, members } = req.body
|
||
|
|
||
|
const project = await newProject({
|
||
|
title, code, userId, members,
|
||
|
})
|
||
|
|
||
|
res.send(responseWrapper(undefined, project))
|
||
|
} catch (e) {
|
||
|
next(e)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
router.post('/delete', jwt({
|
||
|
secret: JWT_SECRET, algorithms: ['HS256'],
|
||
|
}), async (req, res, next) => {
|
||
|
try {
|
||
|
const userId = req.auth.id
|
||
|
const { projectId } = req.body
|
||
|
|
||
|
const myProject = await getMyProjectById(userId, projectId)
|
||
|
|
||
|
if (myProject) {
|
||
|
const answered = await deleteProjectById(projectId)
|
||
|
if (answered.result.ok) {
|
||
|
res.send(responseWrapper(undefined))
|
||
|
}
|
||
|
}
|
||
|
} catch (e) {
|
||
|
next(e)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
router.post('/edit', jwt({
|
||
|
secret: JWT_SECRET, algorithms: ['HS256'],
|
||
|
}), async (req, res, next) => {
|
||
|
try {
|
||
|
const userId = req.auth.id
|
||
|
const { projectId, title, code, members } = req.body
|
||
|
|
||
|
const projectCandidate = await getProjectById({
|
||
|
projectId,
|
||
|
})
|
||
|
|
||
|
if (!projectCandidate) {
|
||
|
throw new Error('The project not exists [project.edit]')
|
||
|
}
|
||
|
|
||
|
await updateProject({
|
||
|
projectId, title, code, members,
|
||
|
})
|
||
|
|
||
|
const updatedProject = await getProjectById({
|
||
|
projectId,
|
||
|
})
|
||
|
|
||
|
const projectSummary = {
|
||
|
oldData: projectCandidate,
|
||
|
newData: updatedProject,
|
||
|
}
|
||
|
|
||
|
res.send(responseWrapper(undefined, projectSummary))
|
||
|
} catch (e) {
|
||
|
next(e)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
module.exports = router
|