const express = require('express'); module.exports = function (options) { const db = options.db; var router = express.Router(); router.route('/t/:id') .post(function(request, response, next) { db.TranslationEntryVersion.findByPk(request.params.id, { }).then(async (translationEntryVersion) => { if (translationEntryVersion) { // fork... const forkedTranslationEntryVersion = await db.TranslationEntryVersion.create({ name: translationEntryVersion.name, entryVersionId: translationEntryVersion.entryVersionId, userId: request.user.id, dialectId: translationEntryVersion.dialectId, forkedFromId: translationEntryVersion.id }) if (forkedTranslationEntryVersion) { return response.redirect(`/v/${forkedTranslationEntryVersion.entryVersionId}/translations/${forkedTranslationEntryVersion.id}`) } else { next() } } else { next() } }).catch(error => { next(error) }) }) router.route('/e/:id') .get(function(request, response, next) { db.EntryVersion.findByPk(request.params.id, { include: [ { association: db.EntryVersion.Entry } ] }).then(entryVersion => { if (entryVersion) { response.display("fork-entry-version", { user: request.user, pageTitle: "Add translation - Mantra", entryVersion: entryVersion }) } else { next() } }).catch(error => { next(error) }) }) .post(async function(request, response, next) { const dialectTokens = request.body.dialect?.split(":") if (dialectTokens?.length == 2) { const countryId = dialectTokens[0].split("-")[0] const languageId = dialectTokens[0].split("-")[1] const dialect = await db.Dialect.findOne({ where: { countryId: countryId, languageId: languageId } }) if (dialect) { const entryVersion = await db.EntryVersion.findByPk(request.params.id, { include: [ { association: db.EntryVersion.Entry }, { association: db.EntryVersion.TranslationEntryVersions, required: false, where: { dialectId: dialect.id, } } ] }) if (entryVersion) { const forkedTranslationEntryVersion = await forkEntryVersion(entryVersion, dialect, request.user.id) if (forkedTranslationEntryVersion) { return response.redirect(`/v/${forkedTranslationEntryVersion.entryVersionId}/translations/${forkedTranslationEntryVersion.id}`) } } } } next() }) const forkEntryVersion = (entryVersion, dialect, userId) => { if (entryVersion.translationEntryVersions.length == 0) { // create a translationEntryVersion with a new dialect... return db.TranslationEntryVersion.create({ name: dialect.name, entryVersionId: entryVersion.id, dialectId: dialect.id, userId: userId, }) } else { return db.TranslationEntryVersion.create({ name: entryVersion.translationEntryVersions[0].name, entryVersionId: entryVersion.translationEntryVersions[0].entryVersionId, userId: userId, dialectId: entryVersion.translationEntryVersions[0].dialectId, forkedFromId: entryVersion.translationEntryVersions[0].id }) } } return router; };