Add projects to the system
This commit is contained in:
278
server/router/projects/index.js
Normal file
278
server/router/projects/index.js
Normal file
@@ -0,0 +1,278 @@
|
||||
const express = require('express')
|
||||
|
||||
module.exports = function (options) {
|
||||
const db = options.db;
|
||||
var router = express.Router();
|
||||
|
||||
router.route('/')
|
||||
.get(function(request, response, next) {
|
||||
db.Project.findAll()
|
||||
.then(projects => {
|
||||
response.display("projects", {
|
||||
user: request.user,
|
||||
pageTitle: "Projects - Mantra",
|
||||
projects: projects
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
router.route('/:id')
|
||||
.get(function(request, response, next) {
|
||||
db.Project.findByPk(request.params.id, {
|
||||
include: [
|
||||
{
|
||||
association: db.Project.ProjectEntryVersions,
|
||||
include: [
|
||||
{
|
||||
association: db.ProjectEntryVersion.EntryVersion,
|
||||
include: [
|
||||
{
|
||||
association: db.EntryVersion.Entry
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
association: db.Project.ProjectTranslationEntryVersions,
|
||||
include: [
|
||||
{
|
||||
association: db.ProjectTranslationEntryVersion.TranslationEntryVersion,
|
||||
include: [
|
||||
{
|
||||
association: db.TranslationEntryVersion.EntryVersion,
|
||||
include: [
|
||||
{
|
||||
association: db.EntryVersion.Entry
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}).then(project => {
|
||||
if (project) {
|
||||
response.display("project", {
|
||||
user: request.user,
|
||||
pageTitle: "Projects - Mantra",
|
||||
project: project
|
||||
})
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
}).catch(error => {
|
||||
next(error)
|
||||
})
|
||||
})
|
||||
|
||||
router.route('/create')
|
||||
.get(function(request, response, next) {
|
||||
response.display("project-form", {
|
||||
user: request.user,
|
||||
pageTitle: "Projects - Mantra",
|
||||
project: {
|
||||
|
||||
}
|
||||
})
|
||||
})
|
||||
.post(function(request, response, next) {
|
||||
db.Project.create({
|
||||
name: request.body.name,
|
||||
description: request.body.description
|
||||
}).then(project => {
|
||||
if (project) {
|
||||
response.redirect(`/projects/${project.id}`)
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
}).catch(error => {
|
||||
next(error)
|
||||
})
|
||||
})
|
||||
|
||||
router.route('/:id/add-entry')
|
||||
.get(function(request, response, next) {
|
||||
db.Project.findByPk(request.params.id, {
|
||||
include: [
|
||||
{
|
||||
association: db.Project.ProjectEntryVersions
|
||||
},
|
||||
{
|
||||
association: db.Project.ProjectTranslationEntryVersions
|
||||
}
|
||||
]
|
||||
}).then(async (project) => {
|
||||
if (project) {
|
||||
const entries = await db.Entry.findAll({
|
||||
// Narrow it down to entries this user has admin ownership off...,
|
||||
include: [
|
||||
{
|
||||
association: db.Entry.EntryVersions,
|
||||
limit: 1,
|
||||
required: true
|
||||
// TODO: Order by version...
|
||||
}
|
||||
]
|
||||
})
|
||||
response.display("project-add-entry", {
|
||||
user: request.user,
|
||||
pageTitle: "Projects - Mantra",
|
||||
project: project,
|
||||
entries: entries
|
||||
})
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
}).catch(error => {
|
||||
next(error)
|
||||
})
|
||||
})
|
||||
.post(function(request, response, next) {
|
||||
db.Project.findByPk(request.params.id, {
|
||||
include: [
|
||||
{
|
||||
association: db.Project.ProjectEntryVersions,
|
||||
include: [
|
||||
{
|
||||
association: db.ProjectEntryVersion.EntryVersion,
|
||||
include: [
|
||||
{
|
||||
association: db.EntryVersion.Entry
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
association: db.Project.ProjectTranslationEntryVersions,
|
||||
include: [
|
||||
{
|
||||
association: db.ProjectTranslationEntryVersion.TranslationEntryVersion,
|
||||
include: [
|
||||
{
|
||||
association: db.TranslationEntryVersion.EntryVersion,
|
||||
include: [
|
||||
{
|
||||
association: db.EntryVersion.Entry
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}).then(async (project) => {
|
||||
if (project) {
|
||||
// TODO: Fi
|
||||
const entryVersion = await db.EntryVersion.findByPk(request.body.entryVersionId, {
|
||||
// Narrow it down to entries this user has admin ownership off...,
|
||||
})
|
||||
|
||||
if (entryVersion) {
|
||||
const projectEntryVersion = db.ProjectEntryVersion.create({
|
||||
projectId: project.id,
|
||||
entryVersionId: entryVersion.id
|
||||
})
|
||||
|
||||
response.redirect(`/projects/${project.id}`)
|
||||
} else {
|
||||
response.redirect(`/projects/${project.id}/add-entry`)
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
}).catch(error => {
|
||||
next(error)
|
||||
})
|
||||
})
|
||||
|
||||
router.route('/:id/add-translation')
|
||||
.get(function(request, response, next) {
|
||||
db.Project.findByPk(request.params.id, {
|
||||
include: [
|
||||
{
|
||||
association: db.Project.ProjectEntryVersions
|
||||
},
|
||||
{
|
||||
association: db.Project.ProjectTranslationEntryVersions
|
||||
}
|
||||
]
|
||||
}).then(async (project) => {
|
||||
if (project) {
|
||||
const translationEntryVersions = await db.TranslationEntryVersion.findAll({
|
||||
// Narrow it down to entries this user has admin ownership off...,
|
||||
include: [
|
||||
{
|
||||
association: db.TranslationEntryVersion.EntryVersion,
|
||||
required: true,
|
||||
// TODO: Order by version...
|
||||
include: [
|
||||
{
|
||||
association: db.EntryVersion.Entry
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
response.display("project-add-translation", {
|
||||
user: request.user,
|
||||
pageTitle: "Projects - Mantra",
|
||||
project: project,
|
||||
translationEntryVersions: translationEntryVersions
|
||||
})
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
}).catch(error => {
|
||||
next(error)
|
||||
})
|
||||
})
|
||||
.post(function(request, response, next) {
|
||||
db.Project.findByPk(request.params.id, {
|
||||
include: [
|
||||
{
|
||||
association: db.Project.ProjectEntryVersions
|
||||
},
|
||||
{
|
||||
association: db.Project.ProjectTranslationEntryVersions
|
||||
}
|
||||
]
|
||||
}).then(async (project) => {
|
||||
if (project) {
|
||||
// TODO: Fi
|
||||
const translationEntryVersion = await db.TranslationEntryVersion.findByPk(request.body.translationEntryVersionId, {
|
||||
// Narrow it down to entries this user has admin ownership off...,
|
||||
include: [
|
||||
{
|
||||
association: db.TranslationEntryVersion.EntryVersion,
|
||||
required: true
|
||||
// TODO: Order by version...
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
if (translationEntryVersion) {
|
||||
const projectTranslationEntryVersion = db.ProjectTranslationEntryVersion.create({
|
||||
projectId: project.id,
|
||||
translationEntryVersionId: translationEntryVersion.id
|
||||
})
|
||||
|
||||
response.redirect(`/projects/${project.id}`)
|
||||
} else {
|
||||
response.redirect(`/projects/${project.id}/add-translation`)
|
||||
}
|
||||
|
||||
} else {
|
||||
next()
|
||||
}
|
||||
}).catch(error => {
|
||||
next(error)
|
||||
})
|
||||
})
|
||||
return router;
|
||||
};
|
||||
Reference in New Issue
Block a user