From ca139ebd34536411ed62a4a95a1b8d21fa79c86a Mon Sep 17 00:00:00 2001
From: Renzo Beux <renzobeux@gmail.com>
Date: Thu, 16 Sep 2021 17:40:23 -0300
Subject: [PATCH] Swagger now uses yaml on root folder

---
 .env                             |  3 +-
 package-lock.json                | 15 ++++++
 package.json                     |  4 +-
 src/Controllers/SwaggerEndpoints | 41 ---------------
 src/Controllers/SwaggerSchemas   | 41 ---------------
 src/Logger/logger.ts             |  2 +-
 src/index.ts                     | 19 ++-----
 swagger.yaml                     | 90 ++++++++++++++++++++++++++++++++
 8 files changed, 114 insertions(+), 101 deletions(-)
 delete mode 100644 src/Controllers/SwaggerEndpoints
 delete mode 100644 src/Controllers/SwaggerSchemas
 create mode 100644 swagger.yaml

diff --git a/.env b/.env
index 83ebdaa..0efeaa7 100644
--- a/.env
+++ b/.env
@@ -1 +1,2 @@
-PORT=8000
\ No newline at end of file
+PORT=8000
+INSTANCE=PROD
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 745228e..7b430bf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1142,6 +1142,12 @@
         "winston": "*"
       }
     },
+    "@types/yamljs": {
+      "version": "0.2.31",
+      "resolved": "https://registry.npmjs.org/@types/yamljs/-/yamljs-0.2.31.tgz",
+      "integrity": "sha512-QcJ5ZczaXAqbVD3o8mw/mEBhRvO5UAdTtbvgwL/OgoWubvNBh6/MxLBAigtcgIFaq3shon9m3POIxQaLQt4fxQ==",
+      "dev": true
+    },
     "@types/yargs": {
       "version": "16.0.4",
       "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz",
@@ -7739,6 +7745,15 @@
       "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
       "dev": true
     },
+    "yamljs": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz",
+      "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==",
+      "requires": {
+        "argparse": "^1.0.7",
+        "glob": "^7.0.5"
+      }
+    },
     "yargs": {
       "version": "16.2.0",
       "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
diff --git a/package.json b/package.json
index 7d902a4..985296e 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,8 @@
     "swagger-ui-express": "^4.1.6",
     "tsconfig.json": "^1.0.10",
     "winston": "^3.3.3",
-    "xlsx": "^0.17.1"
+    "xlsx": "^0.17.1",
+    "yamljs": "^0.3.0"
   },
   "devDependencies": {
     "@types/cors": "^2.8.12",
@@ -24,6 +25,7 @@
     "@types/swagger-jsdoc": "^6.0.1",
     "@types/swagger-ui-express": "^4.1.3",
     "@types/winston": "^2.4.4",
+    "@types/yamljs": "^0.2.31",
     "@typescript-eslint/eslint-plugin": "^2.34.0",
     "@typescript-eslint/parser": "^2.0.0",
     "eslint": "^7.32.0",
diff --git a/src/Controllers/SwaggerEndpoints b/src/Controllers/SwaggerEndpoints
deleted file mode 100644
index 3ce392d..0000000
--- a/src/Controllers/SwaggerEndpoints
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * @swagger
- * /excelParser:
- *  post:
- *      tags:
- *          -   parser
- *      description: Sheet Parser
- *      requestBody:
- *          required: true
- *          content:
- *              application/octet-stream:
- *                  type: binary
- *      responses:
- *          '200':
- *              description: returns the parsed JSON of the excel file provided
- *              content:
- *                  application/json:
- *                      schema:
- *                          $ref: '#/components/schemas/SheetParserResponse'
- */
-
- /**
- * @swagger
- * /excelParser2:
- *  post:
- *      tags:
- *          -   parser
- *      description: Sheet Parser
- *      requestBody:
- *          required: true
- *          content:
- *              application/octet-stream:
- *                  type: binary
- *      responses:
- *          '200':
- *              description: returns the parsed JSON of the excel file provided
- *              content:
- *                  application/json:
- *                      schema:
- *                          $ref: '#/components/schemas/SheetParserResponse'
- */
\ No newline at end of file
diff --git a/src/Controllers/SwaggerSchemas b/src/Controllers/SwaggerSchemas
deleted file mode 100644
index 65d51f4..0000000
--- a/src/Controllers/SwaggerSchemas
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * @swagger
- * components:
- *  schemas:
- *      Menores:
- *          type: object
- *          properties:
- *              edad:
- *                  type: integer
- *              peso:
- *                  type: integer
- *      Mayores:
- *          type: object
- *          required: ["edad"]
- *          properties:
- *              edad:
- *                  type: integer
- *              peso:
- *                  type: integer
- *              talla:
- *                  type: integer
- *      SheetParserResponse:
- *          type: object
- *          properties:
- *              hombresMenores:
- *                  type: array
- *                  items:
- *                      $ref: '#/components/schemas/Menores'
- *              mujeresMenores:
- *                  type: array
- *                  items:
- *                      $ref: '#/components/schemas/Menores'
- *              hombres:
- *                  type: array
- *                  items:
- *                      $ref: '#/components/schemas/Mayores'
- *              mujeres:
- *                  type: array
- *                  items:
- *                      $ref: '#/components/schemas/Mayores'
- */
\ No newline at end of file
diff --git a/src/Logger/logger.ts b/src/Logger/logger.ts
index 56648e1..1771549 100644
--- a/src/Logger/logger.ts
+++ b/src/Logger/logger.ts
@@ -3,7 +3,7 @@ import {
 } from 'winston';
 
 const {
-  combine, timestamp, label, printf,
+  combine, timestamp,
 } = format;
 
 const logger: Logger = createLogger({
diff --git a/src/index.ts b/src/index.ts
index c728db6..30dad1b 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -2,9 +2,9 @@
 import express, { Application } from 'express';
 import 'dotenv/config';
 import cors from 'cors';
-import swaggerJsDoc, { Options } from 'swagger-jsdoc';
 import swaggerUi from 'swagger-ui-express';
 import helmet from 'helmet';
+import YAML from 'yamljs';
 import Routes from './routes';
 import logger from './Logger/logger';
 
@@ -12,22 +12,9 @@ const app: Application = express();
 const PORT = process.env.PORT || 8000;
 app.use(helmet.hidePoweredBy());
 // swagger init
-const swaggerOptions: Options = {
-  swaggerDefinition: {
-    openapi: '3.0.0',
-    info: {
-      title: 'REPP Rest API',
-      version: '1.0.0',
-      description: '',
-      servers: ['http://localhost:3000'],
-    },
-  },
-  apis: ['src/Controllers/*'],
-};
-const swaggerDocs = swaggerJsDoc(swaggerOptions);
-
+const swaggerDocument = YAML.load('./swagger.yaml');
 // middlewares
-app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocs));
+app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
 
 app.use(express.json({
   limit: '50mb',
diff --git a/swagger.yaml b/swagger.yaml
new file mode 100644
index 0000000..b424dc7
--- /dev/null
+++ b/swagger.yaml
@@ -0,0 +1,90 @@
+openapi: 3.0.0
+info:
+  version: 1.0.0
+  title: REPP Backend
+  description: ''
+security:
+  - BearerAuth: []
+tags:
+  - name: Auth
+  - name: Parser
+  - name: Calculation
+paths:
+
+  /login:
+    post:
+      tags:
+        - Auth
+      summary: Login to get an access token
+      requestBody:
+          required: true
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserCredentials'
+               
+      responses:
+        '200':
+           description: Ok.
+      security: []
+    
+  /sheetParser:
+    post:
+      tags:
+        - Parser
+      summary: Given a sheet returns SheetParserResponse
+      requestBody:
+        content:
+          application/octet-stream:
+            schema:
+              format: binary
+        required: true
+      responses:
+        '200':
+          description: Ok.
+      security:
+        - BearerAuth: []
+components:
+  securitySchemes:
+    BearerAuth:
+      type: http
+      scheme: bearer
+  schemas:
+    Menores:
+      properties:
+        edad:
+          type: integer
+        peso:
+          type: integer
+    Mayores:
+      properties:
+        edad:
+          type: integer
+        peso:
+          type: integer
+        talla:
+          type: integer
+    SheetParserResponse:
+      properties:
+        hombresMenores:
+          type: array
+          items:
+            $ref: '#/components/schemas/Menores'
+        mujeresMenores:
+          type: array
+          items:
+            $ref: '#/components/schemas/Menores'
+        hombres:
+          type: array
+          items:
+            $ref: '#/components/schemas/Mayores'
+        mujeres:
+          type: array
+          items:
+            $ref: '#/components/schemas/Mayores'
+    UserCredentials:
+      properties:
+        user:
+          type: string
+        pass:
+          type: string
-- 
GitLab