Source: src/admin_view/admin_view.js

/**
 * @file admin_view
 * @summary Interface "administrateur" de l'acces aux BDD
 * 
 */
import express from 'express';
import knex from '../../db/knex_router';

const router = express.Router();

let port = 3000;

router.get('/', function (req, res) {
    console.log('Connecting to ' + req.url);
    res.render('home', { title: 'Home', port: port });
});

router.get('/db?', function (req, res) {
    let table_name = req.query.table;
    let columns = req.query.columns;

    res.redirect(`db/${table_name}?columns=${columns}`);
});

/**
 * @function Knex API: Get table
 * @summary Effectue une requête pour une table dans la BDD
 * @argument {string} table_name - La table voulue par l'utilisateur.
 */
router.get('/db/:table_name?', function (req, res) {

    // get columns from query
    let columns;
    if (req.query.columns) {
        columns = req.query.columns.split(',');
    } else {
        columns = null;
    }
    console.log(columns);

    knex.select(columns).from(req.params.table_name).then(function (table) {
        res.setHeader("Content-Type", "application/json");
        res.write(JSON.stringify(table, null, 2));
        res.end();
    }, function () {
        res.status(400);
        res.render('error', {
            status: res.statusCode,
            error_message: "Bad request: can't find table " + req.params.table_name
        });
        res.end();
    }
    );
});

/**
 * @function Error 404 catcher
 * @summary Catche les requêtes en dehors des URL acceptées
 */
router.use((req, res, next) => {
    let err = new Error('Not found');
    err.status = 404;
    next(err);
});

/**
 * @function Error 404 handler
 * @summary Gère les erreurs 404
 */

router.use((err, req, res, next) => {
    res.locals.message = err.message;

    res.status(err.status || 500);
    let error_message = res.statusCode == 404 ? 'Not found.' : 'Internal server error.';
    res.render('error', {
        status: res.statusCode,
        error_message: error_message
    });
});

export default router;