'use strict'
const path = require('path')
const { application: { staticMaxAge } } = require('../config')
const { displayReactPage } = require('./reactPage')
const { displayObsoletePage } = require('./obsoletePage')
const envSesathequeConf = process.env.SESATHEQUE_CONF
const root = path.resolve(__dirname, '..', '..', '..')
/**
* Controleur du composant main pour les routes "statiques"
* @Controller controllerMain
*/
module.exports = function (mainComponent) {
mainComponent.controller(function ($rail) {
// l'appli express
const app = $rail.get()
// nos ressources statiques générées par webpack
const expressOptions = {
fsPath: path.join(root, 'build'),
maxAge: staticMaxAge || '7d'
}
// cf conf webpack, si y'a un SESATHEQUE_CONF ça build dans build.*
if (envSesathequeConf) expressOptions.fsPath += '.' + envSesathequeConf
this.serve('/', expressOptions)
// et les ressources statiques qui bougent pas (CopyWebpackPlugin arrive pas à les copier, y'en a trop)
expressOptions.fsPath = path.join(root, 'app', 'assets')
this.serve('/', expressOptions)
// le source react pour toutes ses routes
// (en dev on sera pas appelé car c'est webpack-dev-server qui gère)
// cf app/client-react/App.js pour ne pas oublier de routes
// On continue à passer ici par un contrôleur pour toutes les pages statiques, même si à première
// vue ce serait plus intelligent de construire ça au build avec html-webpack-plugin et le servir
// en statique (via le serve qui précède), car les routes dynamiques demandent un contrôleur et
// représentent > 90% des requêtes, pas la peine de doublonner du code pour optimiser un peu les
// 10% qui restent.
const reactRoutes = [
'/',
'/autocomplete',
'/compte',
'/mentionsLegales',
'/ressource/ajouter',
'/ressource/modifier/:oid',
'/ressource/apercevoir/:oid',
'/ressource/decrire/:oid',
'/ressource/rechercher',
'/groupe/ajouter',
'/groupe/editer/:groupe',
'/groupes/perso',
'/groupes/ouverts',
'/groupes/publics'
]
reactRoutes.forEach(route => this.get(route, displayReactPage))
// page destinée aux navigateurs non pris en charge
this.get('/navigateurObsolete', displayObsoletePage)
// lassi ne gère pas les requêtes head. nginx en frontal le fait pour nous,
// mais on veut répondre sur / pour le monitoring local (avec monit le 'protocol http' donne du head)
app.head('/', (req, res) => res.send())
})
}