Skip to content

Commit

Permalink
Merge pull request #28 from CedricTheveneau/tests-doc
Browse files Browse the repository at this point in the history
Added Jest / Supertest tests + Swagger API Doc
  • Loading branch information
CedricTheveneau authored Nov 9, 2024
2 parents 885b011 + 3018af4 commit ee9a10d
Show file tree
Hide file tree
Showing 26 changed files with 11,117 additions and 1,457 deletions.
529 changes: 529 additions & 0 deletions API_Gateway/package-lock.json

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion API_Gateway/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
"express": "^4.19.2",
"express-http-proxy": "^2.0.0",
"nodemon": "^3.1.4",
"swagger-jsdoc": "^6.2.8",
"swagger-ui-express": "^5.0.1",
"yaml": "^2.4.5"
}
}
}
53 changes: 53 additions & 0 deletions API_Gateway/server.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require("dotenv").config();
const axios = require('axios');
const express = require("express");
const cors = require("cors");
const proxy = require("express-http-proxy");
Expand All @@ -9,6 +10,10 @@ const proxyURIArticles = process.env.PROXY_URI_ARTICLES;
const proxyURIComments = process.env.PROXY_URI_COMMENTS;
const proxyURIPosts = process.env.PROXY_URI_POSTS;

const swaggerModule = require('./swagger');
const swaggerUi = swaggerModule.swaggerUi;
const swaggerDocs = swaggerModule.swaggerDocs;

const allowedOrigins = process.env.CORS_ORIGIN.split(',');

const app = express();
Expand All @@ -21,10 +26,58 @@ const corsOptions = {

app.use(cors(corsOptions));

async function aggregateSwaggerDocs() {
try {
const authSwagger = await axios.get('http://auth:8081/swagger.json');
const articlesSwagger = await axios.get('http://articles:8082/swagger.json');
const commentsSwagger = await axios.get('http://comments:8083/swagger.json');
const postsSwagger = await axios.get('http://posts:8084/swagger.json');

// Vous pouvez ajouter plus de services Swagger ici (Comments, Posts, etc.)

// Fusionner les chemins (paths) et autres éléments de la doc
const aggregatedSwagger = {
openapi: '3.0.0',
info: {
title: 'API complète',
description: 'Documentation de l\'API complète, incluant tous les micro-services.',
version: '1.0.0',
},
paths: {
...authSwagger.data.paths,
...articlesSwagger.data.paths,
...commentsSwagger.data.paths,
...postsSwagger.data.paths,
},
components: {
...authSwagger.data.components,
...articlesSwagger.data.components,
...commentsSwagger.data.components,
...postsSwagger.data.components,
},
};

return aggregatedSwagger;
} catch (error) {
console.error('Erreur lors de la récupération des Swagger docs:', error);
throw error;
}
}

app.use("/api/auth", proxy(proxyURIAuth));
app.use("/api/articles", bouncer, proxy(proxyURIArticles));
app.use("/api/comments", bouncer, proxy(proxyURIComments));
app.use("/api/posts", bouncer, proxy(proxyURIPosts));
app.use('/api/docs', async (req, res, next) => {
try {
const aggregatedDocs = await aggregateSwaggerDocs();
swaggerUi.setup(aggregatedDocs)(req, res, next);
} catch (error) {
res.status(500).json({ message: 'Erreur lors de la génération de la documentation.' });
}
});

app.use('/api/docs-ui', swaggerUi.serve, swaggerUi.setup(swaggerDocs));

app.listen(port, () => {
console.log(`API Gateway en cours d'exécution sur le port ${port}`);
Expand Down
23 changes: 23 additions & 0 deletions API_Gateway/swagger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const swaggerJsDoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');

const swaggerOptions = {
swaggerDefinition: {
openapi: '3.0.0',
info: {
title: 'API Documentation',
version: '1.0.0',
description: 'Documentation for my API',
},
servers: [
{
url: 'https://voyage-stoïque.com',
},
],
},
apis: ['./app/routes/*.js']
};

const swaggerDocs = swaggerJsDoc(swaggerOptions);

module.exports = { swaggerUi, swaggerDocs };
Loading

0 comments on commit ee9a10d

Please # to comment.