const express = require('express'); const compression = require('compression'); const bodyParser = require('body-parser'); const passport = require('passport'); const mongoose = require('mongoose'); const session = require('express-session'); const cors = require('cors'); const { TextEncoder, TextDecoder } = require('util'); global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder; const userRoutes = require('./routes/user'); const employeeRoutes = require('./routes/employee'); const authRoutes = require('./routes/auth'); const ticketRoutes = require('./routes/ticket'); const emailsRoutes = require('./routes/emailing'); const authGoogle = require('./routes/google'); const authFacebook = require('./routes/facebook'); const tirageRoutes = require('./routes/tirage'); const contactRoutes = require('./routes/contact'); const restaurantRoutes = require('./routes/restaurant'); const Logger = require('./logging'); const makeApiMiddleware = require('api-express-exporter'); const promBundle = require('express-prom-bundle'); const metricsMiddleware = promBundle({ includeMethod: true, includePath: true }); const { app: ssrApp } = require('./dist/fatboar/server/main'); const app = express(); app.use(compression()); app.use(cors({ origin: 'https://angular-preprod.foodgame.fr', optionsSuccessStatus: 200 })); app.use(metricsMiddleware); app.use(makeApiMiddleware()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use(express.urlencoded({ extended: true })); app.use(session({ secret: 'this_is_a_secret', resave: true, saveUninitialized: true, rolling: true, cookie: { maxAge: 360000, secure: false } })); app.use(passport.initialize()); app.use(express.static('dist/fatboar/browser')); app.get('/sitemap.xml', async (req, res) => { res.header('Content-Type', 'application/xml'); const baseUrl = 'https://angular-preprod.foodgame.fr'; let xml = ` `; const staticPages = [ { url: '/', lastmod: '2025-06-24', changefreq: 'daily', priority: '1.0' }, { url: '/home', lastmod: '2025-06-24', changefreq: 'daily', priority: '0.9' }, { url: '/register', lastmod: '2025-06-24', changefreq: 'weekly', priority: '0.8' }, { url: '/cgu', lastmod: '2025-06-24', changefreq: 'monthly', priority: '0.7' }, { url: '/mention-legales', lastmod: '2025-06-24', changefreq: 'monthly', priority: '0.7' }, { url: '/politique-de-confidentialite', lastmod: '2025-06-24', changefreq: 'monthly', priority: '0.7' }, { url: '/contact', lastmod: '2025-06-24', changefreq: 'weekly', priority: '0.8' }, { url: '/tirage', lastmod: '2025-06-24', changefreq: 'daily', priority: '0.9' } ]; staticPages.forEach(page => { xml += ` ${baseUrl}${page.url} ${page.lastmod} ${page.changefreq} ${page.priority} `; }); xml += ` `; res.send(xml); }); app.get('/robots.txt', (req, res) => { res.sendFile('robots.txt', { root: 'dist/fatboar/browser' }); }); app.get('/api', (req, res) => { res.status(200).send('Api Works.'); }); app.use('/api/users', userRoutes); app.use('/api/employees', employeeRoutes); app.use('/api/tickets', ticketRoutes); app.use('/api/auth', authRoutes); app.use('/api/emails', emailsRoutes); app.use('/api/auth/google', authGoogle); app.use('/api/auth/facebook', authFacebook); app.use('/api/tirage', tirageRoutes); app.use('/api/contact', contactRoutes); app.use('/api/restaurants', restaurantRoutes); app.use(ssrApp()); require('./lib/db'); const PORT = process.env.PORT || 4000; app.listen(PORT, () => { console.log(`Api listen on port ${PORT}.`); });