From f49b6948c639418d0650c75c387ac1c11d5ce936 Mon Sep 17 00:00:00 2001
From: Agustin Ruiz Diaz <agustin.ruiz.diaz@fing.edu.uy>
Date: Wed, 22 Sep 2021 19:42:32 -0300
Subject: [PATCH] feat: ParameterSubsystem first commit

---
 package-lock.json                             | 183 +++++++++++++++++-
 package.json                                  |   5 +-
 src/Config/Constants.ts                       |  12 +-
 src/Config/DBConfig.ts                        |   7 +
 src/Interfaces/IDAO.ts                        |   8 +
 src/Interfaces/IParameterDAO.ts               |  10 +
 src/Interfaces/ParameterAttributes.ts         |   9 +
 src/Interfaces/ParameterCreationAttributes.ts |   6 +
 src/Loaders/DBLoader.sql                      |  30 +++
 src/Loaders/DataBase.ts                       |  23 +++
 src/Loaders/loader.csv                        |  20 ++
 src/Models/Parameter.ts                       |   4 +-
 src/Models/ParameterModel.ts                  |  25 +++
 src/index.ts                                  |   3 +
 14 files changed, 328 insertions(+), 17 deletions(-)
 create mode 100644 src/Config/DBConfig.ts
 create mode 100644 src/Interfaces/IDAO.ts
 create mode 100644 src/Interfaces/IParameterDAO.ts
 create mode 100644 src/Interfaces/ParameterAttributes.ts
 create mode 100644 src/Interfaces/ParameterCreationAttributes.ts
 create mode 100644 src/Loaders/DBLoader.sql
 create mode 100644 src/Loaders/DataBase.ts
 create mode 100644 src/Loaders/loader.csv
 create mode 100644 src/Models/ParameterModel.ts

diff --git a/package-lock.json b/package-lock.json
index 7b430bf..61388dc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1072,10 +1072,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "16.7.10",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz",
-      "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==",
-      "dev": true
+      "version": "16.9.6",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.6.tgz",
+      "integrity": "sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ=="
     },
     "@types/parse-json": {
       "version": "4.0.0",
@@ -1133,6 +1132,11 @@
         "@types/serve-static": "*"
       }
     },
+    "@types/validator": {
+      "version": "13.6.3",
+      "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.6.3.tgz",
+      "integrity": "sha512-fWG42pMJOL4jKsDDZZREnXLjc3UE0R8LOJfARWYg6U966rxDT7TYejYzLnUF5cvSObGg34nd0+H2wHHU5Omdfw=="
+    },
     "@types/winston": {
       "version": "2.4.4",
       "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.4.4.tgz",
@@ -1439,6 +1443,11 @@
       "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
       "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768="
     },
+    "any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
+    },
     "anymatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
@@ -2415,6 +2424,11 @@
       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
       "dev": true
     },
+    "denque": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz",
+      "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw=="
+    },
     "depd": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
@@ -2490,6 +2504,11 @@
       "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
       "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q=="
     },
+    "dottie": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz",
+      "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg=="
+    },
     "duplexer3": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
@@ -3464,6 +3483,14 @@
       "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
       "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
     },
+    "generate-function": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
+      "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
+      "requires": {
+        "is-property": "^1.0.2"
+      }
+    },
     "gensync": {
       "version": "1.0.0-beta.2",
       "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -4158,6 +4185,11 @@
       "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
       "dev": true
     },
+    "inflection": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.1.tgz",
+      "integrity": "sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA=="
+    },
     "inflight": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -4466,6 +4498,11 @@
       "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
       "dev": true
     },
+    "is-property": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
+      "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ="
+    },
     "is-regex": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
@@ -5465,6 +5502,11 @@
         "triple-beam": "^1.3.0"
       }
     },
+    "long": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+    },
     "loose-envify": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -5484,7 +5526,6 @@
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
       "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
       "requires": {
         "yallist": "^4.0.0"
       }
@@ -5602,6 +5643,19 @@
         "minimist": "^1.2.5"
       }
     },
+    "moment": {
+      "version": "2.29.1",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
+      "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
+    },
+    "moment-timezone": {
+      "version": "0.5.33",
+      "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz",
+      "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==",
+      "requires": {
+        "moment": ">= 2.9.0"
+      }
+    },
     "ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -5612,6 +5666,55 @@
       "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
       "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
     },
+    "mysql2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.0.tgz",
+      "integrity": "sha512-0t5Ivps5Tdy5YHk5NdKwQhe/4Qyn2pload+S+UooDBvsqngtzujG1BaTWBihQLfeKO3t3122/GtusBtmHEHqww==",
+      "requires": {
+        "denque": "^1.4.1",
+        "generate-function": "^2.3.1",
+        "iconv-lite": "^0.6.2",
+        "long": "^4.0.0",
+        "lru-cache": "^6.0.0",
+        "named-placeholders": "^1.1.2",
+        "seq-queue": "^0.0.5",
+        "sqlstring": "^2.3.2"
+      },
+      "dependencies": {
+        "iconv-lite": {
+          "version": "0.6.3",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+          "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3.0.0"
+          }
+        }
+      }
+    },
+    "named-placeholders": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz",
+      "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==",
+      "requires": {
+        "lru-cache": "^4.1.3"
+      },
+      "dependencies": {
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "requires": {
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
+          }
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+        }
+      }
+    },
     "natural-compare": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -6160,6 +6263,11 @@
         "ipaddr.js": "1.9.1"
       }
     },
+    "pseudomap": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+    },
     "psl": {
       "version": "1.8.0",
       "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
@@ -6396,6 +6504,14 @@
         "signal-exit": "^3.0.2"
       }
     },
+    "retry-as-promised": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz",
+      "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==",
+      "requires": {
+        "any-promise": "^1.3.0"
+      }
+    },
     "rimraf": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -6441,7 +6557,6 @@
       "version": "7.3.5",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
       "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
-      "dev": true,
       "requires": {
         "lru-cache": "^6.0.0"
       }
@@ -6517,6 +6632,36 @@
         }
       }
     },
+    "seq-queue": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
+      "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4="
+    },
+    "sequelize": {
+      "version": "6.6.5",
+      "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.6.5.tgz",
+      "integrity": "sha512-QyRrJrDRiwuiILqTMHUA1yWOPIL12KlfmgZ3hnzQwbMvp2vJ6fzu9bYJQB+qPMosck4mBUggY4Cjoc6Et8FBIQ==",
+      "requires": {
+        "debug": "^4.1.1",
+        "dottie": "^2.0.0",
+        "inflection": "1.13.1",
+        "lodash": "^4.17.20",
+        "moment": "^2.26.0",
+        "moment-timezone": "^0.5.31",
+        "retry-as-promised": "^3.2.0",
+        "semver": "^7.3.2",
+        "sequelize-pool": "^6.0.0",
+        "toposort-class": "^1.0.1",
+        "uuid": "^8.1.0",
+        "validator": "^13.6.0",
+        "wkx": "^0.5.0"
+      }
+    },
+    "sequelize-pool": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-6.1.0.tgz",
+      "integrity": "sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg=="
+    },
     "serve-static": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
@@ -6681,6 +6826,11 @@
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
     },
+    "sqlstring": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz",
+      "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg=="
+    },
     "ssf": {
       "version": "0.11.2",
       "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz",
@@ -7084,6 +7234,11 @@
       "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
       "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
     },
+    "toposort-class": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz",
+      "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg="
+    },
     "touch": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
@@ -7401,6 +7556,11 @@
       "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
       "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
     },
+    "uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+    },
     "v8-compile-cache": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -7597,6 +7757,14 @@
         }
       }
     },
+    "wkx": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz",
+      "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==",
+      "requires": {
+        "@types/node": "*"
+      }
+    },
     "wmf": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz",
@@ -7736,8 +7904,7 @@
     "yallist": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
     },
     "yaml": {
       "version": "1.10.2",
diff --git a/package.json b/package.json
index 985296e..e0bd4c4 100644
--- a/package.json
+++ b/package.json
@@ -4,13 +4,16 @@
   "description": "Herramienta de calculo del requerimiento energetico ponderado de una poblacion, llamado REPP.",
   "main": "index.ts",
   "dependencies": {
+    "@types/validator": "^13.6.3",
     "config.json": "0.0.4",
     "cors": "^2.8.5",
     "dotenv": "^10.0.0",
     "express": "^4.17.1",
     "gulp-eslint": "^6.0.0",
     "helmet": "^4.6.0",
+    "mysql2": "^2.3.0",
     "openapi-types": "^9.3.0",
+    "sequelize": "^6.6.5",
     "swagger-jsdoc": "^6.1.0",
     "swagger-ui-express": "^4.1.6",
     "tsconfig.json": "^1.0.10",
@@ -21,7 +24,7 @@
   "devDependencies": {
     "@types/cors": "^2.8.12",
     "@types/express": "^4.17.13",
-    "@types/node": "^16.7.10",
+    "@types/node": "^16.9.6",
     "@types/swagger-jsdoc": "^6.0.1",
     "@types/swagger-ui-express": "^4.1.3",
     "@types/winston": "^2.4.4",
diff --git a/src/Config/Constants.ts b/src/Config/Constants.ts
index 6f2b975..337ad28 100644
--- a/src/Config/Constants.ts
+++ b/src/Config/Constants.ts
@@ -1,6 +1,6 @@
-export const SheetNames = {
-  HOMBRES: 'Hombres',
-  MUJERES: 'Mujeres',
-  HOMBRES_MENORES: 'Hombres<1',
-  MUJERES_MENORES: 'Mujeres<1',
-};
+export const SheetNames = {
+  HOMBRES: 'Hombres',
+  MUJERES: 'Mujeres',
+  HOMBRES_MENORES: 'Hombres<1',
+  MUJERES_MENORES: 'Mujeres<1',
+};
diff --git a/src/Config/DBConfig.ts b/src/Config/DBConfig.ts
new file mode 100644
index 0000000..19ad4b2
--- /dev/null
+++ b/src/Config/DBConfig.ts
@@ -0,0 +1,7 @@
+export const DBConfig = {
+  HOST: 'localhost',
+  USER: 'root',
+  PASSWORD: 'password',
+  DB: 'testdb',
+  dialect: 'mysql',
+};
diff --git a/src/Interfaces/IDAO.ts b/src/Interfaces/IDAO.ts
new file mode 100644
index 0000000..aa0fd29
--- /dev/null
+++ b/src/Interfaces/IDAO.ts
@@ -0,0 +1,8 @@
+interface DAO<T> {
+  exists(t: T): Promise<boolean>;
+  delete(t: T): Promise<T>;
+  getById(id: string): Promise<T>;
+  save(t: T): Promise<T>;
+}
+
+export default DAO;
diff --git a/src/Interfaces/IParameterDAO.ts b/src/Interfaces/IParameterDAO.ts
new file mode 100644
index 0000000..0f02f60
--- /dev/null
+++ b/src/Interfaces/IParameterDAO.ts
@@ -0,0 +1,10 @@
+import IDAO from './IDAO';
+import Parameter from '../Models/Parameter';
+import ParameterType from '../Enum/ParameterType';
+
+interface ParameterDAO extends IDAO<Parameter> {
+  getParametersOfType(parameterType: ParameterType): Promise<Parameter>;
+  getParameter(id: string, type: ParameterType): Promise<Parameter>;
+}
+
+export default ParameterDAO;
diff --git a/src/Interfaces/ParameterAttributes.ts b/src/Interfaces/ParameterAttributes.ts
new file mode 100644
index 0000000..ecbba85
--- /dev/null
+++ b/src/Interfaces/ParameterAttributes.ts
@@ -0,0 +1,9 @@
+import ParameterType from '../Enum/ParameterType';
+
+interface ParameterAttributes {
+  id: string;
+  value: number;
+  parameterType: ParameterType;
+}
+
+export default ParameterAttributes;
diff --git a/src/Interfaces/ParameterCreationAttributes.ts b/src/Interfaces/ParameterCreationAttributes.ts
new file mode 100644
index 0000000..65b8cd0
--- /dev/null
+++ b/src/Interfaces/ParameterCreationAttributes.ts
@@ -0,0 +1,6 @@
+import { Optional } from 'sequelize/types';
+import ParameterAttributes from './ParameterAttributes';
+
+type ParameterCreationAttributes = Optional<ParameterAttributes, 'id'>;
+
+export default ParameterCreationAttributes;
diff --git a/src/Loaders/DBLoader.sql b/src/Loaders/DBLoader.sql
new file mode 100644
index 0000000..d9e6f5f
--- /dev/null
+++ b/src/Loaders/DBLoader.sql
@@ -0,0 +1,30 @@
+CREATE TABLE Parameters (
+  id STRING NOT NULL,
+  value INT NOT NULL,
+  parameterType INT NOT NULL,
+  PRIMARY KEY (id)
+);
+
+-- pesos por defecto
+INSERT INTO Parameters (id, value, parameterType) VALUES ('0Month-Male', 3.3, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('1Month-Male', 4.5, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('2Month-Male', 5.6,1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('3Month-Male', 6.4, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('4Month-Male', 7.0, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('5Month-Male', 7.5, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('6Month-Male', 7.9, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('7Month-Male', 8.3, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('8Month-Male', 8.6, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('9Month-Male', 8.9, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('10Month-Male', 9.2, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('11Month-Male', 9.4, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('1Year-Male', 10.9, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('2Year-Male', 13.3, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('3Year-Male', 15.3, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('4Year-Male', 17.3, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('5Year-Male', 19.5, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('6Year-Male', 21.8, 1);
+INSERT INTO Parameters (id, value, parameterType) VALUES ('7Year-Male', 24.2, 1);
+
+
+
diff --git a/src/Loaders/DataBase.ts b/src/Loaders/DataBase.ts
new file mode 100644
index 0000000..5677422
--- /dev/null
+++ b/src/Loaders/DataBase.ts
@@ -0,0 +1,23 @@
+import fs from 'fs';
+import { Sequelize } from 'sequelize';
+import { DBConfig } from '../Config/DBConfig';
+
+function initDataBase(): Sequelize {
+  const sequelize = new Sequelize(
+    DBConfig.DB,
+    DBConfig.USER,
+    DBConfig.PASSWORD,
+    {
+      host: DBConfig.HOST,
+      dialect: 'mysql',
+      dialectOptions: {
+        multipleStatements: true,
+      },
+    },
+  );
+  const loadQuery: string = fs.readFileSync('/DBLoader.sql').toString();
+  sequelize.query(loadQuery);
+  return sequelize;
+}
+
+export default { initDataBase };
diff --git a/src/Loaders/loader.csv b/src/Loaders/loader.csv
new file mode 100644
index 0000000..a8f4af7
--- /dev/null
+++ b/src/Loaders/loader.csv
@@ -0,0 +1,20 @@
+id,value,parameterType
+0Month,3.3,1
+1Month,4.5,1
+2Month,5.6,1
+3Month,6.4,1
+4Month,7,1
+5Month,7.5,1
+6Month,7.9,1
+7Month,8.3,1
+8Month,8.6,1
+9Month,8.9,1
+10Month,9.2,1
+11Month,9.4,1
+1Year,10.9,1
+2Year,13.3,1
+3Year,15.3,1
+4Year,17.3,1
+5Year,19.5,1
+6Year,21.8,1
+7Year,24.2,1
diff --git a/src/Models/Parameter.ts b/src/Models/Parameter.ts
index ae2b4ae..c0a5496 100644
--- a/src/Models/Parameter.ts
+++ b/src/Models/Parameter.ts
@@ -1,6 +1,6 @@
 import ParameterType from '../Enum/ParameterType';
 
-class Parameter {
+class ParameterModel {
   name: string;
 
   value: number;
@@ -14,4 +14,4 @@ class Parameter {
   }
 }
 
-export default Parameter;
+export default ParameterModel;
diff --git a/src/Models/ParameterModel.ts b/src/Models/ParameterModel.ts
new file mode 100644
index 0000000..2c379c0
--- /dev/null
+++ b/src/Models/ParameterModel.ts
@@ -0,0 +1,25 @@
+import { Model, DataTypes } from 'sequelize';
+import ParameterType from '../Enum/ParameterType';
+import ParameterAttributes from '../Interfaces/ParameterAttributes';
+import ParameterCreationAttributes from '../Interfaces/ParameterCreationAttributes';
+import sequelize from '../Loaders/DataBase';
+
+class Parameter extends Model<ParameterAttributes, ParameterCreationAttributes>
+  implements ParameterAttributes {
+  id!: string;
+
+  value!: number;
+
+  parameterType!: ParameterType;
+}
+
+Parameter.init(
+  {
+    id: DataTypes.STRING,
+    value: DataTypes.NUMBER,
+    parameterType: DataTypes.INTEGER,
+  },
+  { sequelize, modelName: 'Parameter' },
+);
+
+export default Parameter;
diff --git a/src/index.ts b/src/index.ts
index 6198782..a193c65 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -7,6 +7,7 @@ import helmet from 'helmet';
 import YAML from 'yamljs';
 import Routes from './routes';
 import logger from './Logger/logger';
+import DataBase from './Loaders/DataBase';
 
 const app: Application = express();
 const PORT = process.env.PORT || 8000;
@@ -33,6 +34,8 @@ app.use(express.raw({
 
 app.use(Routes);
 
+const sequelize = DataBase.initDataBase();
+
 app.listen(PORT, (): void => {
   console.log(`REPP Backend running here 👉 https://localhost:${PORT}`);
   logger.info('Server initiated');
-- 
GitLab