ecliptica/server/routers/easy-project/projects.js

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