Created
July 5, 2024 17:24
-
-
Save jvkassi/e1de5be36e96ea862474881ae3444a92 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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