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; };