diff --git a/.gitignore b/.gitignore index 56753dda..32803309 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ requests.rest package-lock.json docker-compose.yml package-lock.json - +swagger.json +src/bk \ No newline at end of file diff --git a/src/controllers/docsController.ts b/src/controllers/docsController.ts new file mode 100644 index 00000000..e2fe61b2 --- /dev/null +++ b/src/controllers/docsController.ts @@ -0,0 +1,16 @@ +import { Request, Response } from "express"; +import { swaggerSpecsContent } from "../swaggerConfig"; + +class DocsController { + async downloadApiDocs(req: Request, res: Response) { + console.log("**** the code is here to download ****"); + res.setHeader( + "Content-Disposition", + "attachment; filename=swagger-specs.json", + ); + res.setHeader("Content-Type", "application/json"); + res.send(swaggerSpecsContent); + } +} + +export default DocsController; diff --git a/src/index.ts b/src/index.ts index cdb91134..1b197528 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,38 +1,39 @@ // src/index.ts -import "reflect-metadata"; -import AppDataSource from "./data-source"; -import log from "./utils/logger"; +import cors from "cors"; +import dotenv from "dotenv"; import express, { Express, Request, Response } from "express"; +import "reflect-metadata"; +import swaggerUi from "swagger-ui-express"; import config from "./config"; -import dotenv from "dotenv"; -import cors from "cors"; +import passport from "./config/google.passport.config"; +import AppDataSource from "./data-source"; +import { errorHandler, routeNotFound } from "./middleware"; import { - userRouter, + adminRouter, authRoute, - helpRouter, - testimonialRoute, - notificationRouter, - productRouter, - jobRouter, blogRouter, - adminRouter, - exportRouter, - sendEmailRoute, - paymentRouter, contactRouter, + docsRouter, + exportRouter, + faqRouter, + helpRouter, + jobRouter, + notificationRouter, paymentFlutterwaveRouter, + paymentRouter, paymentStripeRouter, - faqRouter, + productRouter, + sendEmailRoute, + testimonialRoute, + userRouter, } from "./routes"; -import { smsRouter } from "./routes/sms"; -import { routeNotFound, errorHandler } from "./middleware"; import { orgRouter } from "./routes/organisation"; -import swaggerUi from "swagger-ui-express"; -import swaggerSpec from "./swaggerConfig"; +import { smsRouter } from "./routes/sms"; import updateRouter from "./routes/updateOrg"; +import swaggerSpec from "./swaggerConfig"; import { Limiter } from "./utils"; +import log from "./utils/logger"; import ServerAdapter from "./views/bull-board"; -import passport from "./config/google.passport.config"; dotenv.config(); const port = config.port; @@ -84,7 +85,7 @@ server.use("/api/v1", faqRouter); server.use("/api/v1/queues", ServerAdapter.getRouter()); server.use("/api-docs", swaggerUi.serve, swaggerUi.setup(swaggerSpec)); - +server.use("/api/v1/docs", docsRouter); server.use(routeNotFound); server.use(errorHandler); diff --git a/src/routes/docs.routes.ts b/src/routes/docs.routes.ts new file mode 100644 index 00000000..b46d20ce --- /dev/null +++ b/src/routes/docs.routes.ts @@ -0,0 +1,9 @@ +import { Router } from "express"; +import DocsController from "../controllers/docsController"; + +const docsRouter = Router(); +const docsController = new DocsController(); + +docsRouter.get("/download", docsController.downloadApiDocs); + +export { docsRouter }; diff --git a/src/routes/index.ts b/src/routes/index.ts index e8841003..9f03f5a3 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -1,15 +1,16 @@ -export * from "./auth"; export * from "./admin"; +export * from "./auth"; export * from "./blog"; export * from "./contactRoutes"; +export * from "./docs.routes"; export * from "./export"; export * from "./help-center"; export * from "./job"; -export * from "./organisation"; export * from "./notificationsettings"; -export * from "./paymentStripe"; -export * from "./paymentLemonSqueezy"; +export * from "./organisation"; export * from "./payment"; +export * from "./paymentLemonSqueezy"; +export * from "./paymentStripe"; export * from "./product"; export * from "./sendEmail.route"; export * from "./sms"; diff --git a/src/swaggerConfig.ts b/src/swaggerConfig.ts index 35061141..4ecfcbc6 100644 --- a/src/swaggerConfig.ts +++ b/src/swaggerConfig.ts @@ -1,3 +1,4 @@ +import fs from "fs"; import swaggerJsdoc, { SwaggerDefinition } from "swagger-jsdoc"; import { version } from "../package.json"; import config from "./config"; @@ -47,5 +48,8 @@ const options = { }; const specs = swaggerJsdoc(options); +fs.writeFileSync("./swagger.json", JSON.stringify(specs, null, 2)); +const swaggerSpecsContent = JSON.stringify(specs, null, 2); +export { swaggerSpecsContent }; export default specs; diff --git a/src/utils/generate-swagger-docs.ts b/src/utils/generate-swagger-docs.ts new file mode 100644 index 00000000..e69de29b