Skip to content

Instantly share code, notes, and snippets.

@jvkassi
Created July 5, 2024 17:24
Show Gist options
  • Save jvkassi/e1de5be36e96ea862474881ae3444a92 to your computer and use it in GitHub Desktop.
Save jvkassi/e1de5be36e96ea862474881ae3444a92 to your computer and use it in GitHub Desktop.
const express = require('express');
const redis = require("redis");
const swaggerSpec = require('./src/middlewares/swagger');
const swaggerUi = require("swagger-ui-express");
const { jwtapikeyVerify } = require('./src/middlewares/auth');
const logger = require('./src/middlewares/logger');
const factureRoutes = require('./src/routes/ro-facture');
const detailFactureRoutes = require('./src/routes/ro-detail-facture');
const taxeDetailFactureRoutes = require('./src/routes/ro-taxe-detail-facture');
const taxeRoutes = require('./src/routes/ro-taxe');
const echeanceRoutes = require('./src/routes/ro-echeance');
const labelRoutes = require('./src/routes/ro-label');
const reglementRoutes = require('./src/routes/ro-reglement');
// Module Utilisateur
const accessRoutes = require('./src/routes/ro-access');
const activiteRoutes = require('./src/routes/ro-activite');
const profilRoutes = require('./src/routes/ro-profil');
const moduleRoutes = require('./src/routes/ro-module');
const fonctionnaliteRoutes = require('./src/routes/ro-fonctionnalite');
const utilisateurRoutes = require('./src/routes/ro-utilisateur');
const utilisateurProfilRoutes = require('./src/routes/ro-utilisateur-profil');
const permissionprofilRoutes = require('./src/routes/ro-permission-profil');
const bloqueaccessRoutes = require('./src/routes/ro-bloque-access');
const paysRoutes = require('./src/routes/ro-pays');
const userpayRoutes = require('./src/routes/ro-user-pays');
const clientRoutes = require('./src/routes/ro-client');
const teamRoutes = require('./src/routes/ro-team');
const userteamRoutes = require('./src/routes/ro-user-team');
const typeprojetRoutes = require('./src/routes/ro-type-projet');
const projetRoutes = require('./src/routes/ro-projet');
const clientprojetRoutes = require('./src/routes/ro-client-projet');
const approbationRoutes = require('./src/routes/ro-approbation');
const fichierRoutes = require('./src/routes/ro-fichier');
const connectRoutes = require('./src/routes/ro-connect');
const etapeRoutes = require('./src/routes/ro-etape');
const titreRoutes = require('./src/routes/ro-titre');
const sousEtapeRoutes = require('./src/routes/ro-sous-etape');
const tacheRoutes = require('./src/routes/ro-tache');
const statutetapeRoutes = require('./src/routes/ro-statut-etape');
const banquesRoutes = require('./src/routes/ro-banque');
const comptesRoutes = require('./src/routes/ro-compte');
const statutprojetsRoutes = require('./src/routes/ro-statut-projet');
const echangesRoutes = require('./src/routes/ro-echange');
const statutechangesRoutes = require('./src/routes/ro-statut-echange');
const projetmanagersRoutes = require('./src/routes/ro-projet-manager');
const compagnieRoutes = require('./src/routes/ro-compagnie');
const compterenduRoutes = require('./src/routes/ro-compte-rendu');
const statuttacheRoutes = require('./src/routes/ro-statut-tache');
const etapeProjet = require('./src/routes/ro-etape-projet');
const sousEtapeProjet = require('./src/routes/ro-sous-etape-projet');
const approbationcompterenduRoutes = require('./src/routes/ro-approbation-compte-rendu');
const reponsequestionvalidationRoutes = require('./src/routes/ro-reponse-question-validation');
const questionvalidationRoutes = require('./src/routes/ro-question-validation');
const parametreRoutes = require('./src/routes/ro-parametre');
const notificationRoutes = require('./src/routes/ro-notification');
const cacheHeaders = require('express-cache-headers');
const rateLimit = require('express-rate-limit');
const apicache = require('apicache');
const cors = require('cors');
const errorHandler = require('./src/middlewares/error-handler');
const { v4: uuidv4 } = require('uuid');
const app = express();
const port = process.env.PORT || 3201;
const fs = require('fs');
const http = require('http');
const WebSocket = require('ws');
/**
* TODO : ADD the function to upload any document, the function the utils
*/
app.use(express.json());
// Allow only the specify hosts to access my api
const allowedOrigins = ['http://localhost:3200',
'http://localhost:4200',
'http://localhost:7000',
'https://wizodia-rest-api.pretty-rattlesnake-77.telebit.io',
'https://wizodia-admin-console.pretty-rattlesnake-77.telebit.io',
'https://api.wizodia.com',
'https://management.wizodia.com'
];
const corsOptions = {
origin: function (origin, callback) {
if (allowedOrigins.includes(origin) || !origin) {
callback(null, true);
} else {
callback(new Error('Not allowed by CORS'));
}
}
};
app.use(cors(corsOptions));
app.use(errorHandler);
//app.use(cors()); // Allow any origin to access my api
/* // Redirect HTTP to HTTPS middleware
const enforceHTTPS = (req, res, next) => {
if (req.protocol === 'http') {
const secureUrl = `https://${req.headers.host}${req.url}`;
res.redirect(301, secureUrl);
} else {
next();
}
};
app.use(enforceHTTPS); */
// Apply caching middleware to all routes
app.use(cacheHeaders());
let cache = apicache.middleware;
// Apply rate limiting middleware to all routes
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 500, // maximum 100 requests in the given windowMs
message: 'Vous avez dépassé le nombre de requête limite. Merci de réessayer plus tard.'
});
app.use(limiter);
// set logger to available in all the project
app.use((req, res, next) => {
req.logger = logger;
next();
});
app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerSpec, {
explorer: true,
})
);
app.get('/', (req, res) => {
res.send('Hello world');
});
app.use('/api/v1/factures/', jwtapikeyVerify, factureRoutes);
app.use('/api/v1/detailfactures/', jwtapikeyVerify, detailFactureRoutes);
app.use('/api/v1/taxedetailfactures/', jwtapikeyVerify, taxeDetailFactureRoutes);
app.use('/api/v1/taxes/', jwtapikeyVerify, taxeRoutes);
app.use('/api/v1/echeances/', jwtapikeyVerify, echeanceRoutes);
app.use('/api/v1/reglements/', jwtapikeyVerify, reglementRoutes);
app.use('/api/v1/labels/', jwtapikeyVerify, labelRoutes);
app.use('/api/v1/connect/', connectRoutes);
app.use('/api/v1/connect/client', jwtapikeyVerify, connectRoutes);
app.use('/api/v1/activites/', jwtapikeyVerify, activiteRoutes);
app.use('/api/v1/access/', jwtapikeyVerify, cache('5 minutes'), accessRoutes);
app.use('/api/v1/bloqueaccesss/', jwtapikeyVerify, bloqueaccessRoutes);
app.use('/api/v1/fonctionnalites/', jwtapikeyVerify, fonctionnaliteRoutes);
app.use('/api/v1/modules/', jwtapikeyVerify, moduleRoutes);
app.use('/api/v1/permissionprofils/', jwtapikeyVerify, permissionprofilRoutes);
app.use('/api/v1/profils/', jwtapikeyVerify, profilRoutes);
app.use('/api/v1/userprofils/', jwtapikeyVerify, utilisateurProfilRoutes);
app.use('/api/v1/users/', jwtapikeyVerify, utilisateurRoutes);
app.use('/api/v1/pays/', jwtapikeyVerify, paysRoutes);
app.use('/api/v1/userpays/', jwtapikeyVerify, userpayRoutes);
app.use('/api/v1/clients/', jwtapikeyVerify, clientRoutes);
app.use('/api/v1/teams/', jwtapikeyVerify, teamRoutes);
app.use('/api/v1/userteams/', jwtapikeyVerify, userteamRoutes);
app.use('/api/v1/typeprojets/', jwtapikeyVerify, typeprojetRoutes);
app.use('/api/v1/projets/', jwtapikeyVerify, projetRoutes);
app.use('/api/v1/clientprojets/', jwtapikeyVerify, clientprojetRoutes);
app.use('/api/v1/fichiers/', jwtapikeyVerify, fichierRoutes);
app.use('/api/v1/approbations/', jwtapikeyVerify, approbationRoutes);
app.use('/api/v1/etapes/', jwtapikeyVerify, etapeRoutes);
app.use('/api/v1/titres/', jwtapikeyVerify, titreRoutes);
app.use('/api/v1/sousetapes/', jwtapikeyVerify, sousEtapeRoutes);
app.use('/api/v1/taches/', jwtapikeyVerify, tacheRoutes);
app.use('/api/v1/statutetapes/', jwtapikeyVerify, statutetapeRoutes);
app.use('/api/v1/statutetapeprojet/', jwtapikeyVerify, statutetapeRoutes);
app.use('/api/v1/banques/', jwtapikeyVerify, banquesRoutes);
app.use('/api/v1/comptes/', jwtapikeyVerify, comptesRoutes);
app.use('/api/v1/statutprojets/', jwtapikeyVerify, statutprojetsRoutes);
app.use('/api/v1/echanges/', jwtapikeyVerify, echangesRoutes);
app.use('/api/v1/statutechanges/', jwtapikeyVerify, statutechangesRoutes);
app.use('/api/v1/projetmanagers/', jwtapikeyVerify, projetmanagersRoutes);
app.use('/api/v1/compagnies/', jwtapikeyVerify, compagnieRoutes);
app.use('/api/v1/compterendus/', jwtapikeyVerify, compterenduRoutes);
app.use('/api/v1/statuttaches/', jwtapikeyVerify, statuttacheRoutes);
app.use('/api/v1/statutsousetapeprojet/', jwtapikeyVerify, statuttacheRoutes);
app.use('/api/v1/etapeprojet/', jwtapikeyVerify, etapeProjet);
app.use('/api/v1/sousetapeprojet/', jwtapikeyVerify, sousEtapeProjet);
app.use('/api/v1/approbationcompterendus/', jwtapikeyVerify, approbationcompterenduRoutes);
app.use('/api/v1/questionvalidations/', jwtapikeyVerify, questionvalidationRoutes);
app.use('/api/v1/reponsequestionvalidations/', jwtapikeyVerify, reponsequestionvalidationRoutes);
app.use('/api/v1/parametre/', jwtapikeyVerify, parametreRoutes);
app.use('/api/v1/notifications/', jwtapikeyVerify, notificationRoutes);
// Create an HTTP server
const server = http.createServer(app);
// Create a WebSocket server
const wss = new WebSocket.Server({ server });
// Start the server on port 3202
server.listen(port, () => {
console.log(`Server RestFull is listening on port ${port}`));
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment