UNPKG

@tiledesk/tiledesk-server

Version:
380 lines (279 loc) 11.2 kB
var express = require('express'); var router = express.Router({mergeParams: true}); var Label = require("../models/label"); var winston = require('../config/winston'); var passport = require('passport'); require('../middleware/passport')(passport); var validtoken = require('../middleware/valid-token') var roleChecker = require('../middleware/has-role') var labelService = require("../services/labelService"); var labelEvent = require("../event/labelEvent"); var mongoose = require('mongoose'); const { check, validationResult } = require('express-validator'); winston.debug(" labelService.FALLBACK_LANGUAGE: " + labelService.FALLBACK_LANGUAGE ); var Schema = mongoose.Schema, ObjectId = Schema.ObjectId; router.get('/default', function (req, res) { res.json(req.labels); }); // curl -v -X POST -H 'Content-Type:application/json' -d '{"lang":"IT"}' http://localhost:3000/123/labels/default/clone // curl -v -X POST -H 'Content-Type:application/json' -u andrea.leo@f21.it:123456 -d '{"lang":"IT"}' http://localhost:3001/624c78e27b91d2a2ab49543a/labels/default/clone router.post('/default/clone', [ passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin'), check('lang').notEmpty(), ], function (req, res, next) { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(422).json({ errors: errors.array() }); } var lang = req.body.lang; winston.debug("lang: " + lang); var pickedLang = req.labels.find(l => l.lang === lang); if (!pickedLang) { // FALLBACK_LANGUAGE IMP var pickedLangPivot = req.labels.find(l => l.lang === labelService.FALLBACK_LANGUAGE); pickedLangPivot.lang = lang; pickedLang = pickedLangPivot; } var newLabel = pickedLang; winston.debug("newLabel: " ,newLabel); Label.findOne({id_project:req.projectid}, function(err, label) { if (err) { return res.status(500).send({ success: false, msg: 'Error getting object.' }); } else { if (!label) { // auto make default the new lang newLabel.default = true; label = new Label({ id_project: req.projectid, createdBy: req.user.id, updatedBy: req.user.id, data: [newLabel] }); }else { var foundIndex = -1; label.data.forEach(function(l, index){ if (l.lang == lang ) { foundIndex = index; } }); winston.debug("foundIndex: " + foundIndex); if (foundIndex>-1) { label.data[foundIndex] = newLabel; }else { label.data.push(newLabel); } } label.save(function (err, savedLabel) { if (err) { winston.error('--- > ERROR ', err); return res.status(500).send({ success: false, msg: 'Error saving object.' }); } labelEvent.emit('label.clone', savedLabel); // express forward req.url = '/'; winston.debug('--- > req.url'+req.url); req.method = 'GET'; return router.handle(req, res, next); }); } }); }); router.get('/default/:lang', function (req, res) { var pickedLang = req.labels.find(l => l.lang === req.params.lang); res.json(pickedLang); }); // Update labels // curl -v -X PATCH -H 'Content-Type:application/json' -u andrea.leo@f21.it:123456 -d '{"lang":"FR", "data":{"a":"b","c":"d"}}' http://localhost:3000/4321/labels/EN/default router.patch('/:lang/default', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')],function (req, res, next) { var lang = req.params.lang; winston.debug("lang: " + lang); Label.findOne({id_project:req.projectid}, function(err, label) { if (err) { return res.status(500).send({ success: false, msg: 'Error getting object.' }); } else { if (!label) { winston.error('Lang not found'); return res.status(404).send({ success: false, msg: 'Lang not found' }); }else { var foundDefaultIndex = -1; label.data.forEach(function(l, index){ if (l.default === true ) { foundDefaultIndex = index; } }); winston.debug("foundDefaultIndex: " + foundDefaultIndex); if (foundDefaultIndex>-1) { label.data[foundDefaultIndex].default = false; winston.debug("label.data[foundDefaultIndex]: ", label.data[foundDefaultIndex]); } var foundIndex = -1; label.data.forEach(function(l, index){ if (l.lang == lang ) { foundIndex = index; } }); winston.debug("foundIndex: " + foundIndex); if (foundIndex>-1) { label.data[foundIndex].default = true; } winston.debug("saving label ", label); label.save(function (err, savedLabel) { if (err) { winston.error('--- > ERROR ', err); return res.status(500).send({ success: false, msg: 'Error saving object.' }); } labelEvent.emit('label.update', savedLabel); // express forward req.url = '/'+lang; winston.debug('--- > req.url'+req.url); req.method = 'GET'; return router.handle(req, res, next); }); } } }); }); // Update labels // curl -v -X POST -H 'Content-Type:application/json' -u andrea.leo@f21.it:123456 -d '{"lang":"FR", "data":{"a":"b","c":"d"}}' http://localhost:3000/4321/labels/ router.post('/', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')],function (req, res, next) { var lang = req.body.lang; winston.debug("lang: " + lang); var defaultValue = req.body.default; winston.debug("defaultValue: " + defaultValue); var newLabel = {lang: lang, data: req.body.data, default: defaultValue}; winston.debug("newLabel: " ,newLabel); Label.findOne({id_project:req.projectid}, function(err, label) { if (err) { return res.status(500).send({ success: false, msg: 'Error getting object.' }); } else { if (!label) { // auto make default the new lang newLabel.default = true; label = new Label({ id_project: req.projectid, createdBy: req.user.id, updatedBy: req.user.id, data: [newLabel] }); }else { //remove existing default if (defaultValue===true) { winston.debug("defaultValue: " + defaultValue); var foundDefaultIndex = -1; label.data.forEach(function(l, index){ if (l.default === true ) { foundDefaultIndex = index; } }); winston.debug("foundDefaultIndex: " + foundDefaultIndex); if (foundDefaultIndex>-1) { label.data[foundDefaultIndex].default = false; winston.debug("label.data[foundDefaultIndex]: ", label.data[foundDefaultIndex]); } } var foundIndex = -1; label.data.forEach(function(l, index){ if (l.lang == lang ) { foundIndex = index; } }); winston.debug("foundIndex: " + foundIndex); if (foundIndex>-1) { label.data[foundIndex] = newLabel; }else { label.data.push(newLabel); } } winston.debug("saving label ", label); label.save(function (err, savedLabel) { if (err) { winston.error('--- > ERROR ', err); return res.status(500).send({ success: false, msg: 'Error saving object.' }); } labelEvent.emit('label.create', savedLabel); // express forward req.url = '/'+lang; winston.debug('--- > req.url'+req.url); req.method = 'GET'; return router.handle(req, res, next); }); } }); }); // curl -v -X DELETE -H 'Content-Type:application/json' -u andrea.leo@f21.it:123456 http://localhost:3000/4321/labels/ router.delete('/', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')], function (req, res) { winston.debug(req.body); Label.remove({ id_project: req.projectid }, function (err, label) { if (err) { winston.error('--- > ERROR ', err); return res.status(500).send({ success: false, msg: 'Error deleting object.' }); } labelEvent.emit('label.delete', label); res.json(label); }); }); // curl -v -X DELETE -H 'Content-Type:application/json' -u andrea.leo@f21.it:123456 http://localhost:3000/1235/labels/EN router.delete('/:lang', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('admin')],function (req, res, next) { var lang = req.params.lang; winston.debug("lang: " + lang); Label.findOne({id_project:req.projectid}, function(err, label) { if (err) { return res.status(500).send({ success: false, msg: 'Error getting object.' }); } else { if (!label) { return res.status(404).send({ success: false, msg: 'Object not found.' }); }else { var foundIndex = -1; label.data.forEach(function(l, index){ if (l.lang == lang ) { foundIndex = index; } }); winston.debug("foundIndex: " + foundIndex); if (foundIndex>-1) { var labelFound = label.data[foundIndex]; if (labelFound.default === true) { return res.status(400).send({ success: false, msg: 'You can\'t delete the default language.' }); } var idData = labelFound._id; label.data.id(idData).remove(); }else { return res.status(404).send({ success: false, msg: 'Object not found.' }); } } label.save(function (err, savedLabel) { if (err) { winston.error('--- > ERROR ', err); return res.status(500).send({ success: false, msg: 'Error saving object.' }); } labelEvent.emit('label.delete', savedLabel); req.url = '/'+lang; winston.debug('--- > req.url'+req.url); req.method = 'GET'; return router.handle(req, res, next); }); } }); }); // return all the project labels router.get('/', async (req, res) => { winston.debug("projectid", req.projectid); var labels = await labelService.getAll(req.projectid); winston.debug("labels",labels); if (!labels) { winston.warn('Label not found for projectid: ' + req.projectid); return res.json({}); } return res.json(labels); }); router.get('/:lang', async (req, res) => { // get a specific project language but if not found return Pivot var labels = await labelService.getLanguage(req.projectid, req.params.lang); return res.json(labels); }); module.exports = router;