49 lines
1.8 KiB
JavaScript
49 lines
1.8 KiB
JavaScript
import swaggerJsdoc from 'swagger-jsdoc';
|
|
import swaggerUi from 'swagger-ui-express';
|
|
import path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
// swagger-jsdoc résout ses motifs `apis` avec `glob`, qui n'interprète pas
|
|
// les antislashs Windows comme séparateurs — on force donc des slashs.
|
|
const toGlobPath = (p) => p.split(path.sep).join('/');
|
|
|
|
/**
|
|
* Documentation OpenAPI de l'API publique v1 (lecture seule).
|
|
* Générée depuis les annotations JSDoc `@openapi` dans backend/src/routes/v1/*.js.
|
|
* Servie sur /api/docs (public, pas d'authentification pour consulter la doc —
|
|
* seules les requêtes réelles vers /api/v1/... nécessitent une clé API).
|
|
*/
|
|
const swaggerSpec = swaggerJsdoc({
|
|
definition: {
|
|
openapi: '3.0.3',
|
|
info: {
|
|
title: 'Crowdlending Tracker API',
|
|
version: 'v1',
|
|
description:
|
|
"API publique en lecture seule du portefeuille — crowdlending et Private Equity " +
|
|
"(cf. /investissements pour le crowdlending, /investissements-pe pour le PE ; " +
|
|
"/remboursements, /depots-retraits et /frais-operations couvrent les deux). " +
|
|
"Authentification par clé API (header `X-API-Key`), générée depuis Mon compte → Clés API. " +
|
|
"Chaque clé est scopée à un seul investisseur.",
|
|
},
|
|
servers: [{ url: '/api/v1' }],
|
|
components: {
|
|
securitySchemes: {
|
|
ApiKeyAuth: {
|
|
type: 'apiKey',
|
|
in: 'header',
|
|
name: 'X-API-Key',
|
|
},
|
|
},
|
|
},
|
|
security: [{ ApiKeyAuth: [] }],
|
|
},
|
|
apis: [toGlobPath(path.join(__dirname, 'routes/v1/*.js'))],
|
|
});
|
|
|
|
const nbPaths = Object.keys(swaggerSpec.paths || {}).length;
|
|
console.log(`[Swagger] ${nbPaths} route(s) documentée(s) sur /api/docs`);
|
|
|
|
export { swaggerSpec, swaggerUi };
|