278 lines
10 KiB
JavaScript
278 lines
10 KiB
JavaScript
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;
|
|
}; |