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