From 529847fbde1a48bc2f9f3eec5d8dbcb54a0ab9be Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Mon, 23 Mar 2020 13:19:14 +0530 Subject: [PATCH 01/11] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20server?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 11 +++ .gitignore | 11 +++ .huskyrc | 6 ++ package.json | 47 +++++++++++++ src/Server.ts | 48 +++++++++++++ src/config/IConfig.ts | 5 ++ src/config/configuration.ts | 14 ++++ src/index.ts | 5 ++ src/libs/Database.ts | 20 ++++++ src/libs/constant.ts | 0 src/libs/routes/errorHandler.ts | 14 ++++ src/libs/routes/index.ts | 2 + src/libs/routes/notFoundRoute.ts | 8 +++ .../sort-stats/ISortStatsDocument.ts | 10 +++ .../sort-stats/SortStatsRepository.ts | 0 .../sort-stats/SortStatsSchema.ts | 15 ++++ src/repositories/sort-stats/index.ts | 0 .../IUnsortedObjectsDocument.ts" | 0 .../UnsortedObjectsRepository.ts" | 0 .../UnsortedObjectsSchema.ts" | 0 .../\342\200\213unsortedObjects/index.ts" | 0 tsconfig.json | 31 ++++++++ tslint.json | 70 +++++++++++++++++++ 23 files changed, 317 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .huskyrc create mode 100644 package.json create mode 100644 src/Server.ts create mode 100644 src/config/IConfig.ts create mode 100644 src/config/configuration.ts create mode 100644 src/index.ts create mode 100644 src/libs/Database.ts create mode 100644 src/libs/constant.ts create mode 100644 src/libs/routes/errorHandler.ts create mode 100644 src/libs/routes/index.ts create mode 100644 src/libs/routes/notFoundRoute.ts create mode 100644 src/repositories/sort-stats/ISortStatsDocument.ts create mode 100644 src/repositories/sort-stats/SortStatsRepository.ts create mode 100644 src/repositories/sort-stats/SortStatsSchema.ts create mode 100644 src/repositories/sort-stats/index.ts create mode 100644 "src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" create mode 100644 "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" create mode 100644 "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" create mode 100644 "src/repositories/\342\200\213unsortedObjects/index.ts" create mode 100644 tsconfig.json create mode 100644 tslint.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..49c154d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +end_of_line = lf +# editorconfig-tools is unable to ignore longs strings or urls +max_line_length = null diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c1497fd --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +#node_modules +node_modules + +#package-lock.json +package-lock.json + +#Package dist +dist + +#.env +.env diff --git a/.huskyrc b/.huskyrc new file mode 100644 index 0000000..97226ee --- /dev/null +++ b/.huskyrc @@ -0,0 +1,6 @@ +{ + "hooks": { + "pre-commit": "npm run lint && npm run test:c", + "pre-push": "npm run lint && npm run test:c" + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..14c828c --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "training-task", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "tsc-watch --project . --onSuccess \"npm run nodemon\"", + "nodemon": "nodemon ./dist/index.js", + "lint": "./node_modules/tslint/bin/tslint -c tslint.json -p tsconfig.json --exclude 'node_modules/**/*.{j,t}s'", + "lint:fix": "npm run lint --fix", + "commit": "npx git-cz" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/AryanSinghalGit/training-task.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/AryanSinghalGit/training-task/issues" + }, + "homepage": "https://github.com/AryanSinghalGit/training-task#readme", + "dependencies": { + "@types/express": "4.17.2", + "@types/mongoose": "5.7.0", + "@types/node": "13.5.1", + "babel-node": "0.0.1-security", + "body-parser": "1.19.0", + "commitizen": "4.0.3", + "cz-conventional-changelog": "3.1.0", + "dotenv": "8.2.0", + "express": "4.17.1", + "git-cz": "4.2.0", + "husky": "4.2.1", + "mongoose": "5.8.11", + "nodemon": "2.0.2", + "tslint": "^6.0.0" + }, + "devDependencies": { + "@babel/core": "7.8.3", + "@babel/node": "7.8.3", + "@babel/preset-env": "7.8.3", + "tsc-watch": "4.1.0", + "typescript": "3.7.5" + } +} diff --git a/src/Server.ts b/src/Server.ts new file mode 100644 index 0000000..f07ec6a --- /dev/null +++ b/src/Server.ts @@ -0,0 +1,48 @@ +import * as express from 'express'; +import * as bodyParser from 'body-parser'; +import { notFoundRoute, errorHandler } from './libs/routes'; +import Database from './libs/Database'; + +export class Server { + private app: express.Express; + constructor(protected config) { + this.app = express(); + } + + public bootstrap = (): Server => { + this.initBodyParser(); + this.setupRoutes(); + return this; + } + + public run = async (): Promise => { + try { + const { app, config: { port, mongoUrl } }: Server = this; + await Database.open(mongoUrl); + app.listen(port, (err) => { + if (err) { + console.log(err); + } + console.log(`Express app Successfully started on port : ${port} `); + }); + } + catch (err) { + throw err; + } + return this; + } + + public initBodyParser = () => { + const { app } = this; + app.use(bodyParser.urlencoded({ extended: false })); + app.use(bodyParser.json()); + } + + public setupRoutes = (): void => { + const { app }: Server = this; + app.get('/health-check', (req: express.Request, res: express.Response) => res.send('I am OK')); + app.use('/api', (req: express.Request, res: express.Response) => res.send('I am in main router')); + app.use(notFoundRoute); + app.use(errorHandler); + } +} diff --git a/src/config/IConfig.ts b/src/config/IConfig.ts new file mode 100644 index 0000000..8f4d8a4 --- /dev/null +++ b/src/config/IConfig.ts @@ -0,0 +1,5 @@ +export interface IConfig { + port: string; + nodeEnv: string; + mongoUrl: string; +} diff --git a/src/config/configuration.ts b/src/config/configuration.ts new file mode 100644 index 0000000..28310d1 --- /dev/null +++ b/src/config/configuration.ts @@ -0,0 +1,14 @@ +import { IConfig } from './IConfig'; +import { config } from 'dotenv'; + +config(); + +const configuration: IConfig = { + port : process.env.PORT, + nodeEnv : process.env.NODE_ENV, + mongoUrl: process.env.MONGO_URL, +}; + +Object.freeze(configuration); + +export default configuration; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..d99ddc6 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,5 @@ +import { Server } from './Server'; +import config from './config/configuration'; + +const server: Server = new Server(config); +server.bootstrap().run(); diff --git a/src/libs/Database.ts b/src/libs/Database.ts new file mode 100644 index 0000000..d017929 --- /dev/null +++ b/src/libs/Database.ts @@ -0,0 +1,20 @@ +import * as mongoose from 'mongoose'; + +export default class Database { + static open = (mongoUrl) => { + const promise = new Promise((resolve, reject) => { + mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }, (err) => { + if (err) { + reject(err); + } + console.log('Database Connected at :', mongoUrl); + resolve(); + }); + }); + return promise; + } + static disconnect = () => { + mongoose.connection.close(); + console.log('Database disconnected'); + }; +} diff --git a/src/libs/constant.ts b/src/libs/constant.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/libs/routes/errorHandler.ts b/src/libs/routes/errorHandler.ts new file mode 100644 index 0000000..ae8cdf9 --- /dev/null +++ b/src/libs/routes/errorHandler.ts @@ -0,0 +1,14 @@ +import * as express from 'express'; + +const errorHandler = (err, req: express.Request, res: express.Response, next: express.NextFunction): void => { + const resp = { + message: err.message || err , + status: err.status || 500, + error: err.error || 'Error Occurred ', + timestamp: new Date() + }; + res.status(err.status).send(resp); + res.end('ok'); +}; + +export default errorHandler; diff --git a/src/libs/routes/index.ts b/src/libs/routes/index.ts new file mode 100644 index 0000000..9d8d0e5 --- /dev/null +++ b/src/libs/routes/index.ts @@ -0,0 +1,2 @@ +export { default as errorHandler } from './errorHandler'; +export { default as notFoundRoute } from './notFoundRoute'; diff --git a/src/libs/routes/notFoundRoute.ts b/src/libs/routes/notFoundRoute.ts new file mode 100644 index 0000000..f4f6986 --- /dev/null +++ b/src/libs/routes/notFoundRoute.ts @@ -0,0 +1,8 @@ +import * as express from 'express'; + +const notFoundRoute = (req: express.Request, res: express.Response, next): express.ErrorRequestHandler => { + const err = {error: 'Not Found' , message: 'error', status: 404 }; + return next(err); +}; + +export default notFoundRoute; diff --git a/src/repositories/sort-stats/ISortStatsDocument.ts b/src/repositories/sort-stats/ISortStatsDocument.ts new file mode 100644 index 0000000..9467bae --- /dev/null +++ b/src/repositories/sort-stats/ISortStatsDocument.ts @@ -0,0 +1,10 @@ +import * as mongoose from 'mongoose'; + +export default interface ISortStatsDocument extends mongoose.Document { + _id: string; + object: object; + keyCount: number; + depth: number; + size: number; + generationTime: number; +} diff --git a/src/repositories/sort-stats/SortStatsRepository.ts b/src/repositories/sort-stats/SortStatsRepository.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/repositories/sort-stats/SortStatsSchema.ts b/src/repositories/sort-stats/SortStatsSchema.ts new file mode 100644 index 0000000..8ad40f8 --- /dev/null +++ b/src/repositories/sort-stats/SortStatsSchema.ts @@ -0,0 +1,15 @@ +import * as mongoose from 'mongoose'; + +export default class SortStatsSchema extends mongoose.Schema { + constructor(options) { + const versionSchema = { + _id: String, + object: Object, + keyCount: Number, + depth: Number, + size: Number, + generationTime: Number + }; + super(versionSchema, options); + } +} diff --git a/src/repositories/sort-stats/index.ts b/src/repositories/sort-stats/index.ts new file mode 100644 index 0000000..e69de29 diff --git "a/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" "b/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" new file mode 100644 index 0000000..e69de29 diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" new file mode 100644 index 0000000..e69de29 diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" new file mode 100644 index 0000000..e69de29 diff --git "a/src/repositories/\342\200\213unsortedObjects/index.ts" "b/src/repositories/\342\200\213unsortedObjects/index.ts" new file mode 100644 index 0000000..e69de29 diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..2845fea --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "noImplicitAny": false, + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "esModuleInterop": false, + "allowJs": true /* Allow javascript files to be compiled. */, + "checkJs": false /* Report errors in .js files. */, + "sourceMap": true, + "outDir": "./dist", + "baseUrl": ".", + "paths": { + "*": [ + "node_modules/*", + "src/types/*" + ] + }, + }, + "exclude": [ + "dist" + ], + "include": [ + "src" + ], + "types": [ + "src/types" + ] +} \ No newline at end of file diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..8627218 --- /dev/null +++ b/tslint.json @@ -0,0 +1,70 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": { + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "indent": [ + true, + "spaces", + 2 + ], + "one-line": [ + true, + "check-open-brace", + "check-whitespace" + ], + "no-var-keyword": true, + "quotemark": [ + true, + "single", + "avoid-escape" + ], + "semicolon": [ + true, + "always", + "ignore-bound-class-methods" + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-module", + "check-separator", + "check-type" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ], + "no-internal-module": true, + "no-trailing-whitespace": true, + "no-null-keyword": true, + "prefer-const": true, + "jsdoc-format": true, + "no-console": [ + false + ] + }, + "rulesDirectory": [] +} \ No newline at end of file From a1d1ac7c6152ac397e39ae15dcb96e68ad2f00c9 Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Mon, 23 Mar 2020 16:49:38 +0530 Subject: [PATCH 02/11] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20mongoose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Server.ts | 3 +- src/controllers/index.ts | 1 + .../sortStats/controller.ts} | 0 .../sortStats}/index.ts | 0 src/controllers/sortStats/routes.ts | 0 src/controllers/sortStats/validation.ts | 0 src/controllers/unsortedObjects/controller.ts | 44 +++++++++++++++ src/controllers/unsortedObjects/index.ts | 2 + src/controllers/unsortedObjects/routes.ts | 11 ++++ src/controllers/unsortedObjects/validation.ts | 23 ++++++++ src/libs/SystemResponse.ts | 17 ++++++ src/libs/index.ts | 1 + src/libs/routes/index.ts | 1 + src/libs/routes/validationHandler.ts | 55 +++++++++++++++++++ src/libs/seedData.ts | 21 +++++++ .../sort-stats/ISortStatsDocument.ts | 10 ---- .../sort-stats/SortStatsSchema.ts | 15 ----- .../sortStats/ISortStatsDocument.ts | 0 .../sortStats/SortStatsRepository.ts | 0 src/repositories/sortStats/SortStatsSchema.ts | 0 src/repositories/sortStats/index.ts | 0 .../IUnsortedObjectsDocument.ts" | 10 ++++ .../UnsortedObjectsRepository.ts" | 22 ++++++++ .../UnsortedObjectsSchema.ts" | 15 +++++ .../\342\200\213unsortedObjects/index.ts" | 4 ++ .../unsortedObjectsModel.ts" | 19 +++++++ src/router.ts | 8 +++ 27 files changed, 256 insertions(+), 26 deletions(-) create mode 100644 src/controllers/index.ts rename src/{repositories/sort-stats/SortStatsRepository.ts => controllers/sortStats/controller.ts} (100%) rename src/{repositories/sort-stats => controllers/sortStats}/index.ts (100%) create mode 100644 src/controllers/sortStats/routes.ts create mode 100644 src/controllers/sortStats/validation.ts create mode 100644 src/controllers/unsortedObjects/controller.ts create mode 100644 src/controllers/unsortedObjects/index.ts create mode 100644 src/controllers/unsortedObjects/routes.ts create mode 100644 src/controllers/unsortedObjects/validation.ts create mode 100644 src/libs/SystemResponse.ts create mode 100644 src/libs/index.ts create mode 100644 src/libs/routes/validationHandler.ts create mode 100644 src/libs/seedData.ts delete mode 100644 src/repositories/sort-stats/ISortStatsDocument.ts delete mode 100644 src/repositories/sort-stats/SortStatsSchema.ts create mode 100644 src/repositories/sortStats/ISortStatsDocument.ts create mode 100644 src/repositories/sortStats/SortStatsRepository.ts create mode 100644 src/repositories/sortStats/SortStatsSchema.ts create mode 100644 src/repositories/sortStats/index.ts create mode 100644 "src/repositories/\342\200\213unsortedObjects/unsortedObjectsModel.ts" create mode 100644 src/router.ts diff --git a/src/Server.ts b/src/Server.ts index f07ec6a..8c9a28d 100644 --- a/src/Server.ts +++ b/src/Server.ts @@ -2,6 +2,7 @@ import * as express from 'express'; import * as bodyParser from 'body-parser'; import { notFoundRoute, errorHandler } from './libs/routes'; import Database from './libs/Database'; +import mainRouter from './router'; export class Server { private app: express.Express; @@ -41,7 +42,7 @@ export class Server { public setupRoutes = (): void => { const { app }: Server = this; app.get('/health-check', (req: express.Request, res: express.Response) => res.send('I am OK')); - app.use('/api', (req: express.Request, res: express.Response) => res.send('I am in main router')); + app.use('/api', mainRouter); app.use(notFoundRoute); app.use(errorHandler); } diff --git a/src/controllers/index.ts b/src/controllers/index.ts new file mode 100644 index 0000000..a794658 --- /dev/null +++ b/src/controllers/index.ts @@ -0,0 +1 @@ +export { unsortedObjectsRouter } from './unsortedObjects'; diff --git a/src/repositories/sort-stats/SortStatsRepository.ts b/src/controllers/sortStats/controller.ts similarity index 100% rename from src/repositories/sort-stats/SortStatsRepository.ts rename to src/controllers/sortStats/controller.ts diff --git a/src/repositories/sort-stats/index.ts b/src/controllers/sortStats/index.ts similarity index 100% rename from src/repositories/sort-stats/index.ts rename to src/controllers/sortStats/index.ts diff --git a/src/controllers/sortStats/routes.ts b/src/controllers/sortStats/routes.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/controllers/sortStats/validation.ts b/src/controllers/sortStats/validation.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/controllers/unsortedObjects/controller.ts b/src/controllers/unsortedObjects/controller.ts new file mode 100644 index 0000000..a31e9aa --- /dev/null +++ b/src/controllers/unsortedObjects/controller.ts @@ -0,0 +1,44 @@ +import { Request, Response } from 'express'; +import { UnsortedObjectsRepository } from '../../repositories/​unsortedObjects'; +import SystemResponse from '../../libs/SystemResponse'; + +class UnsortedObjectsController { + static instance: UnsortedObjectsController; + + static getInstance = () => { + if (UnsortedObjectsController.instance) { + return UnsortedObjectsController.instance; + } + else { + UnsortedObjectsController.instance = new UnsortedObjectsController(); + return UnsortedObjectsController.instance; + } + } + + create = async (req, res: Response) => { + console.log('----------Create Object----------'); + try { + const { rootKeyCount, maxDepth } = req.body; + const objectDetails = await UnsortedObjectsRepository.create({ object: { name: 'try' } }); + SystemResponse.success(res, objectDetails); + } + catch (err) { + SystemResponse.failure(res, err, err.message); + } + + }; + + list = async (req: Request, res: Response) => { + console.log('---------Object List----------'); + try { + const objectList = await UnsortedObjectsRepository.list(); + SystemResponse.success(res, objectList); + } + catch (err) { + SystemResponse.failure(res, err, err.message); + } + }; + +} + +export default UnsortedObjectsController.getInstance(); diff --git a/src/controllers/unsortedObjects/index.ts b/src/controllers/unsortedObjects/index.ts new file mode 100644 index 0000000..69d95cd --- /dev/null +++ b/src/controllers/unsortedObjects/index.ts @@ -0,0 +1,2 @@ +export { default as unsortedObjectsController } from './controller'; +export { default as unsortedObjectsRouter } from './routes'; diff --git a/src/controllers/unsortedObjects/routes.ts b/src/controllers/unsortedObjects/routes.ts new file mode 100644 index 0000000..cbd1603 --- /dev/null +++ b/src/controllers/unsortedObjects/routes.ts @@ -0,0 +1,11 @@ +import { Router } from 'express'; +import controller from './controller'; +import { validationHandler } from '../../libs'; +import { default as validation } from './validation'; + +const unsortedObjectsRouter: Router = Router(); +unsortedObjectsRouter.route('/') + .get(validationHandler(validation.get), controller.list) + .post(validationHandler(validation.create), controller.create); + +export default unsortedObjectsRouter; diff --git a/src/controllers/unsortedObjects/validation.ts b/src/controllers/unsortedObjects/validation.ts new file mode 100644 index 0000000..cad5239 --- /dev/null +++ b/src/controllers/unsortedObjects/validation.ts @@ -0,0 +1,23 @@ +const validation = { + create: + { + rootKeyCount: + { + required: true, + regex: /[0-9]+$/, + in: ['body'], + errorMessage: 'rootKeyCount is required', + }, + maxDepth: + { + required: true, + regex: /[0-9]+$/, + in: ['body'], + errorMessage: 'maxDepth is required' + }, + }, + get: { + }, +}; + +export default validation; diff --git a/src/libs/SystemResponse.ts b/src/libs/SystemResponse.ts new file mode 100644 index 0000000..5fa6d01 --- /dev/null +++ b/src/libs/SystemResponse.ts @@ -0,0 +1,17 @@ +class SystemResponse { + static success = (res, data, message = 'Success') => { + return res.status(200).send({ + status: 'ok', + message, + data + }); + } + static failure = (res, err, message = 'Failure', status = 400) => { + return res.status(status).send({ + status: err.status || 'Bad Request', + message, + err + }); + } +} +export default SystemResponse; diff --git a/src/libs/index.ts b/src/libs/index.ts new file mode 100644 index 0000000..6d1dd34 --- /dev/null +++ b/src/libs/index.ts @@ -0,0 +1 @@ +export { validationHandler } from './routes'; diff --git a/src/libs/routes/index.ts b/src/libs/routes/index.ts index 9d8d0e5..5218f78 100644 --- a/src/libs/routes/index.ts +++ b/src/libs/routes/index.ts @@ -1,2 +1,3 @@ export { default as errorHandler } from './errorHandler'; export { default as notFoundRoute } from './notFoundRoute'; +export { default as validationHandler } from './validationHandler'; diff --git a/src/libs/routes/validationHandler.ts b/src/libs/routes/validationHandler.ts new file mode 100644 index 0000000..2c35fbb --- /dev/null +++ b/src/libs/routes/validationHandler.ts @@ -0,0 +1,55 @@ +import { Request, Response, NextFunction } from 'express'; + +export default (config) => { + return (req: Request, res: Response, next: NextFunction) => { + console.log('---------Validation Handler---------'); + console.log(config); + console.log(req.body); + const err = []; + Object.keys(config).forEach(key => { + console.log(`---------${key}---------`); + const { errorMessage } = config[key]; + const { in: reqType } = config[key]; + reqType.forEach(reqMethod => { + const keyValue = req[reqMethod][key]; + if (config[key].required === true) { + if (keyValue === undefined || keyValue === null) { + const obj = { + location: `${reqMethod}`, + msg: `${errorMessage}`, + param: `${key}`, + value: `${keyValue}` + }; + err.push(obj); + } + } + if (keyValue !== undefined) + if (config[key].regex !== undefined) { + console.log('inside regex'); + const { regex } = config[key]; + if (!regex.test(keyValue)) { + const obj = { + location: `${reqMethod}`, + msg: `${key} is invalid`, + param: `${key}`, + value: `${keyValue}` + }; + err.push(obj); + } + } + }); + }); + if (err.length === 0) + return next(); + else { + console.log(err); + const error = { + message: 'Error Occurred', + status: 400, + error: err, + }; + console.log(error); + return next(error); + } + }; +}; diff --git a/src/libs/seedData.ts b/src/libs/seedData.ts new file mode 100644 index 0000000..e6a37f1 --- /dev/null +++ b/src/libs/seedData.ts @@ -0,0 +1,21 @@ +// import Repository from '../repositories//UserRepository'; +// import config from '../config/configuration'; + +// const seedData = async () => { +// const user = { +// }; + +// try { +// const count = await UserRepository.count(); +// if (count === 0) { +// UserRepository.create(user); +// console.log('Data seeded'); +// } +// else +// console.log(`Data is already seeded`); +// } catch (err) { +// throw err; +// } +// }; + +// export default seedData; diff --git a/src/repositories/sort-stats/ISortStatsDocument.ts b/src/repositories/sort-stats/ISortStatsDocument.ts deleted file mode 100644 index 9467bae..0000000 --- a/src/repositories/sort-stats/ISortStatsDocument.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as mongoose from 'mongoose'; - -export default interface ISortStatsDocument extends mongoose.Document { - _id: string; - object: object; - keyCount: number; - depth: number; - size: number; - generationTime: number; -} diff --git a/src/repositories/sort-stats/SortStatsSchema.ts b/src/repositories/sort-stats/SortStatsSchema.ts deleted file mode 100644 index 8ad40f8..0000000 --- a/src/repositories/sort-stats/SortStatsSchema.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as mongoose from 'mongoose'; - -export default class SortStatsSchema extends mongoose.Schema { - constructor(options) { - const versionSchema = { - _id: String, - object: Object, - keyCount: Number, - depth: Number, - size: Number, - generationTime: Number - }; - super(versionSchema, options); - } -} diff --git a/src/repositories/sortStats/ISortStatsDocument.ts b/src/repositories/sortStats/ISortStatsDocument.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/repositories/sortStats/SortStatsRepository.ts b/src/repositories/sortStats/SortStatsRepository.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/repositories/sortStats/SortStatsSchema.ts b/src/repositories/sortStats/SortStatsSchema.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/repositories/sortStats/index.ts b/src/repositories/sortStats/index.ts new file mode 100644 index 0000000..e69de29 diff --git "a/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" "b/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" index e69de29..3ff5a11 100644 --- "a/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" +++ "b/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" @@ -0,0 +1,10 @@ +import * as mongoose from 'mongoose'; + +export default interface IUnsortedObjectsDocument extends mongoose.Document { + _id: string; + object: object; + keyCount: number; + depth: number; + size: number; + generationTime: number; +} diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" index e69de29..af7dbbd 100644 --- "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" +++ "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" @@ -0,0 +1,22 @@ +import * as mongoose from 'mongoose'; +import { IUnsortedObjectsDocument, unsortedObjectsSchema, unsortedObjectsModel } from '.'; + + +class UnsortedObjectsRepository { + protected unsortedObjectsModel; + constructor() { + this.unsortedObjectsModel = unsortedObjectsModel; + } + +public create(data) { + console.log('inside repo'); + return this.unsortedObjectsModel.create(data); +} + +public list() { + console.log('inside repo'); + return this.unsortedObjectsModel.find({}); +} +} + +export default new UnsortedObjectsRepository(); diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" index e69de29..ca4d1dc 100644 --- "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" +++ "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" @@ -0,0 +1,15 @@ +import * as mongoose from 'mongoose'; + +export default class SortStatsSchema extends mongoose.Schema { + constructor(options) { + const unsortedObjectsSchema = { + _id: String, + object: Object, + keyCount: Number, + depth: Number, + size: Number, + generationTime: Number + }; + super(unsortedObjectsSchema, options); + } +} diff --git "a/src/repositories/\342\200\213unsortedObjects/index.ts" "b/src/repositories/\342\200\213unsortedObjects/index.ts" index e69de29..9fe2a98 100644 --- "a/src/repositories/\342\200\213unsortedObjects/index.ts" +++ "b/src/repositories/\342\200\213unsortedObjects/index.ts" @@ -0,0 +1,4 @@ +export { default as IUnsortedObjectsDocument } from './IUnsortedObjectsDocument'; +export { default as UnsortedObjectsRepository } from './UnsortedObjectsRepository'; +export { default as UnsortedObjectsSchema } from './UnsortedObjectsSchema'; +export { unsortedObjectsSchema, unsortedObjectsModel } from './unsortedObjectsModel'; diff --git "a/src/repositories/\342\200\213unsortedObjects/unsortedObjectsModel.ts" "b/src/repositories/\342\200\213unsortedObjects/unsortedObjectsModel.ts" new file mode 100644 index 0000000..27da63c --- /dev/null +++ "b/src/repositories/\342\200\213unsortedObjects/unsortedObjectsModel.ts" @@ -0,0 +1,19 @@ +import * as mongoose from 'mongoose'; +import UnsortedObjectsSchema from './UnsortedObjectsSchema'; +import IUnsortedObjectsDocument from './IUnsortedObjectsDocument'; + +const toConvert = { + transfers: (docs: any, ret: any) => { + ret.id = ret._id; + delete ret._id; + delete ret._v; + } +}; + +export const unsortedObjectsSchema = new UnsortedObjectsSchema({ + collection: 'unsortedObjects', + toJSON: toConvert, + toObject: toConvert, +}); + +export const unsortedObjectsModel: mongoose.Model = mongoose.model('unsortedObjects', unsortedObjectsSchema, 'unsortedObjects', true); diff --git a/src/router.ts b/src/router.ts new file mode 100644 index 0000000..bec210a --- /dev/null +++ b/src/router.ts @@ -0,0 +1,8 @@ +import { Router } from 'express'; +import { unsortedObjectsRouter } from './controllers'; + +const mainRouter: Router = Router(); +// mainRouter.use('/sort-stats', sortStats ); +mainRouter.use('/unsorted-objects', unsortedObjectsRouter); + +export default mainRouter; From f8c1f3f509787e3798c9c515e6cbd66ac66a6abb Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Mon, 23 Mar 2020 18:55:02 +0530 Subject: [PATCH 03/11] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20controller?= =?UTF-8?q?=20and=20unsortedObject?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/controllers/unsortedObjects/controller.ts | 10 +++- src/controllers/unsortedObjects/helper.ts | 60 +++++++++++++++++++ src/libs/SystemResponse.ts | 20 +++---- src/libs/index.ts | 1 + src/libs/seedData.ts | 21 ------- .../IUnsortedObjectsDocument.ts" | 2 +- .../UnsortedObjectsRepository.ts" | 22 +++---- .../UnsortedObjectsSchema.ts" | 2 +- 9 files changed, 93 insertions(+), 46 deletions(-) create mode 100644 src/controllers/unsortedObjects/helper.ts delete mode 100644 src/libs/seedData.ts diff --git a/package.json b/package.json index 14c828c..6b87f8d 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "husky": "4.2.1", "mongoose": "5.8.11", "nodemon": "2.0.2", + "sizeof": "^1.0.0", "tslint": "^6.0.0" }, "devDependencies": { diff --git a/src/controllers/unsortedObjects/controller.ts b/src/controllers/unsortedObjects/controller.ts index a31e9aa..ef98ba8 100644 --- a/src/controllers/unsortedObjects/controller.ts +++ b/src/controllers/unsortedObjects/controller.ts @@ -1,6 +1,8 @@ import { Request, Response } from 'express'; +import sizeof from 'sizeof'; import { UnsortedObjectsRepository } from '../../repositories/​unsortedObjects'; import SystemResponse from '../../libs/SystemResponse'; +import getObject from './helper'; class UnsortedObjectsController { static instance: UnsortedObjectsController; @@ -19,8 +21,12 @@ class UnsortedObjectsController { console.log('----------Create Object----------'); try { const { rootKeyCount, maxDepth } = req.body; - const objectDetails = await UnsortedObjectsRepository.create({ object: { name: 'try' } }); - SystemResponse.success(res, objectDetails); + const object = getObject(rootKeyCount, maxDepth); + // const size = sizeof.sizeof(object); + const keyCount​ = rootKeyCount; + console.log(object); + // const objectDetails = await UnsortedObjectsRepository.create({ object, keyCount​, depth, size​, generationTime }); + SystemResponse.success(res, object); } catch (err) { SystemResponse.failure(res, err, err.message); diff --git a/src/controllers/unsortedObjects/helper.ts b/src/controllers/unsortedObjects/helper.ts new file mode 100644 index 0000000..d3014de --- /dev/null +++ b/src/controllers/unsortedObjects/helper.ts @@ -0,0 +1,60 @@ +function getRandomInt(max) { + return Math.floor(Math.random() * max); +} + +function getRandomNumber(length) { + let result = ''; + const characters = '0123456789'; + const charactersLength = characters.length; + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + return result; +} + +function getRandomString(length) { + let result = ''; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + const charactersLength = characters.length; + for (let i = 0; i < length; i++) { + result += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + return result; +} + +function getRandomBoolean() { + const bool = [true, false]; + return bool[getRandomInt(2)]; +} + +const getObject = (rootKeyCount, maxDepth) => { + let rootKey = 0; + let object = {}; + while (rootKey < rootKeyCount) { + const max = (maxDepth > 0) ? 5 : 4; + const key = getRandomString(20); + switch (getRandomInt(max)) { + case 0: + object = { ...object, [key]: getRandomNumber(getRandomInt(20)) }; + break; + case 1: + object = { ...object, [key]: getRandomString(20) }; + break; + case 2: + object = { ...object, [key]: getRandomBoolean() }; + break; + case 3: + object = { ...object, [key]: [] }; + break; + case 4: + object = { ...object, [key]: getObject(Math.floor(rootKeyCount / 2), maxDepth - 1) }; + break; + default: + break; + } + rootKey++; + } + return object; +}; + +export default getObject; diff --git a/src/libs/SystemResponse.ts b/src/libs/SystemResponse.ts index 5fa6d01..bc837b4 100644 --- a/src/libs/SystemResponse.ts +++ b/src/libs/SystemResponse.ts @@ -1,17 +1,17 @@ class SystemResponse { static success = (res, data, message = 'Success') => { - return res.status(200).send({ - status: 'ok', - message, - data - }); + return res.status(200).send({ + status: 'ok', + message, + data + }); } static failure = (res, err, message = 'Failure', status = 400) => { - return res.status(status).send({ - status: err.status || 'Bad Request', - message, - err - }); + return res.status(status).send({ + status: err.status || 'Bad Request', + message, + err + }); } } export default SystemResponse; diff --git a/src/libs/index.ts b/src/libs/index.ts index 6d1dd34..a5b0227 100644 --- a/src/libs/index.ts +++ b/src/libs/index.ts @@ -1 +1,2 @@ export { validationHandler } from './routes'; +// export * from './constant'; diff --git a/src/libs/seedData.ts b/src/libs/seedData.ts deleted file mode 100644 index e6a37f1..0000000 --- a/src/libs/seedData.ts +++ /dev/null @@ -1,21 +0,0 @@ -// import Repository from '../repositories//UserRepository'; -// import config from '../config/configuration'; - -// const seedData = async () => { -// const user = { -// }; - -// try { -// const count = await UserRepository.count(); -// if (count === 0) { -// UserRepository.create(user); -// console.log('Data seeded'); -// } -// else -// console.log(`Data is already seeded`); -// } catch (err) { -// throw err; -// } -// }; - -// export default seedData; diff --git "a/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" "b/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" index 3ff5a11..dd952ab 100644 --- "a/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" +++ "b/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" @@ -1,7 +1,7 @@ import * as mongoose from 'mongoose'; export default interface IUnsortedObjectsDocument extends mongoose.Document { - _id: string; + id: string; object: object; keyCount: number; depth: number; diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" index af7dbbd..be835f8 100644 --- "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" +++ "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" @@ -1,22 +1,22 @@ import * as mongoose from 'mongoose'; -import { IUnsortedObjectsDocument, unsortedObjectsSchema, unsortedObjectsModel } from '.'; - +import { default as IUnsortedObjectsDocument } from './IUnsortedObjectsDocument'; +import { unsortedObjectsModel } from './unsortedObjectsModel'; class UnsortedObjectsRepository { - protected unsortedObjectsModel; + protected unsortedObjectsModel: mongoose.Model; constructor() { this.unsortedObjectsModel = unsortedObjectsModel; } -public create(data) { - console.log('inside repo'); - return this.unsortedObjectsModel.create(data); -} + public create(data) { + console.log('inside repo'); + return this.unsortedObjectsModel.create(data); + } -public list() { - console.log('inside repo'); - return this.unsortedObjectsModel.find({}); -} + public list() { + console.log('inside repo'); + return this.unsortedObjectsModel.find({}); + } } export default new UnsortedObjectsRepository(); diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" index ca4d1dc..cac9d70 100644 --- "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" +++ "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" @@ -3,7 +3,7 @@ import * as mongoose from 'mongoose'; export default class SortStatsSchema extends mongoose.Schema { constructor(options) { const unsortedObjectsSchema = { - _id: String, + id: String, object: Object, keyCount: Number, depth: Number, From 1b22531df409222a3d2609c05c41e21356710217 Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Tue, 24 Mar 2020 12:19:48 +0530 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20controller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 +-- src/controllers/sortStats/controller.ts | 0 src/controllers/sortStats/index.ts | 0 src/controllers/sortStats/routes.ts | 0 src/controllers/sortStats/validation.ts | 0 src/controllers/unsortedObjects/controller.ts | 29 +++++++++++-------- src/libs/index.ts | 1 - .../sortStats/ISortStatsDocument.ts | 8 +++++ src/repositories/sortStats/SortStatsModel.ts | 19 ++++++++++++ .../sortStats/SortStatsRepository.ts | 22 ++++++++++++++ src/repositories/sortStats/SortStatsSchema.ts | 13 +++++++++ src/repositories/sortStats/index.ts | 4 +++ .../UnsortedObjectsModel.ts" | 0 .../UnsortedObjectsSchema.ts" | 2 +- .../\342\200\213unsortedObjects/index.ts" | 2 +- src/router.ts | 2 +- 16 files changed, 88 insertions(+), 18 deletions(-) delete mode 100644 src/controllers/sortStats/controller.ts delete mode 100644 src/controllers/sortStats/index.ts delete mode 100644 src/controllers/sortStats/routes.ts delete mode 100644 src/controllers/sortStats/validation.ts create mode 100644 src/repositories/sortStats/SortStatsModel.ts rename "src/repositories/\342\200\213unsortedObjects/unsortedObjectsModel.ts" => "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" (100%) diff --git a/package.json b/package.json index 6b87f8d..85a3b40 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,8 @@ "husky": "4.2.1", "mongoose": "5.8.11", "nodemon": "2.0.2", - "sizeof": "^1.0.0", - "tslint": "^6.0.0" + "object-sizeof": "^1.5.2", + "tslint": "6.0.0" }, "devDependencies": { "@babel/core": "7.8.3", diff --git a/src/controllers/sortStats/controller.ts b/src/controllers/sortStats/controller.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/controllers/sortStats/index.ts b/src/controllers/sortStats/index.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/controllers/sortStats/routes.ts b/src/controllers/sortStats/routes.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/controllers/sortStats/validation.ts b/src/controllers/sortStats/validation.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/controllers/unsortedObjects/controller.ts b/src/controllers/unsortedObjects/controller.ts index ef98ba8..6fc3dc9 100644 --- a/src/controllers/unsortedObjects/controller.ts +++ b/src/controllers/unsortedObjects/controller.ts @@ -1,5 +1,5 @@ import { Request, Response } from 'express'; -import sizeof from 'sizeof'; +import sizeof from 'object-sizeof'; import { UnsortedObjectsRepository } from '../../repositories/​unsortedObjects'; import SystemResponse from '../../libs/SystemResponse'; import getObject from './helper'; @@ -21,12 +21,17 @@ class UnsortedObjectsController { console.log('----------Create Object----------'); try { const { rootKeyCount, maxDepth } = req.body; + const start = new Date().getTime(); const object = getObject(rootKeyCount, maxDepth); - // const size = sizeof.sizeof(object); - const keyCount​ = rootKeyCount; - console.log(object); - // const objectDetails = await UnsortedObjectsRepository.create({ object, keyCount​, depth, size​, generationTime }); - SystemResponse.success(res, object); + const end = new Date().getTime(); + const generationTime = end - start; + const size = sizeof(object); + const keyCount = rootKeyCount; + const depth = maxDepth; + const objectDetails = await UnsortedObjectsRepository.create({ object, keyCount, depth, size, generationTime }); + if (!objectDetails) + throw { message: 'Data is not inserted' }; + SystemResponse.success(res, objectDetails); } catch (err) { SystemResponse.failure(res, err, err.message); @@ -37,12 +42,12 @@ class UnsortedObjectsController { list = async (req: Request, res: Response) => { console.log('---------Object List----------'); try { - const objectList = await UnsortedObjectsRepository.list(); - SystemResponse.success(res, objectList); - } - catch (err) { - SystemResponse.failure(res, err, err.message); - } + const objectList = await UnsortedObjectsRepository.list(); + SystemResponse.success(res, objectList); + } + catch (err) { + SystemResponse.failure(res, err, err.message); + } }; } diff --git a/src/libs/index.ts b/src/libs/index.ts index a5b0227..6d1dd34 100644 --- a/src/libs/index.ts +++ b/src/libs/index.ts @@ -1,2 +1 @@ export { validationHandler } from './routes'; -// export * from './constant'; diff --git a/src/repositories/sortStats/ISortStatsDocument.ts b/src/repositories/sortStats/ISortStatsDocument.ts index e69de29..5613438 100644 --- a/src/repositories/sortStats/ISortStatsDocument.ts +++ b/src/repositories/sortStats/ISortStatsDocument.ts @@ -0,0 +1,8 @@ +import * as mongoose from 'mongoose'; + +export default interface ISortStatsDocument extends mongoose.Document { + id: string; + objectId: string; + sortDuration: number; + sortingAlgorithm: string; +} diff --git a/src/repositories/sortStats/SortStatsModel.ts b/src/repositories/sortStats/SortStatsModel.ts new file mode 100644 index 0000000..3fd89a4 --- /dev/null +++ b/src/repositories/sortStats/SortStatsModel.ts @@ -0,0 +1,19 @@ +import * as mongoose from 'mongoose'; +import SortStatsSchema from './SortStatsSchema'; +import ISortStatsDocument from './ISortStatsDocument'; + +const toConvert = { + transfers: (docs: any, ret: any) => { + ret.id = ret._id; + delete ret._id; + delete ret._v; + } +}; + +export const sortStatsSchema = new SortStatsSchema({ + collection: 'unsortedObjects', + toJSON: toConvert, + toObject: toConvert, +}); + +export const sortStatsModel: mongoose.Model = mongoose.model('unsortedObjects', sortStatsSchema, 'unsortedObjects', true); diff --git a/src/repositories/sortStats/SortStatsRepository.ts b/src/repositories/sortStats/SortStatsRepository.ts index e69de29..01ab9e8 100644 --- a/src/repositories/sortStats/SortStatsRepository.ts +++ b/src/repositories/sortStats/SortStatsRepository.ts @@ -0,0 +1,22 @@ +import * as mongoose from 'mongoose'; +import { default as ISortStatsDocument } from './ISortStatsDocument'; +import { sortStatsModel } from './SortStatsModel'; + +class UnsortedObjectsRepository { + protected sortStatsModel: mongoose.Model; + constructor() { + this.sortStatsModel = sortStatsModel; + } + + public create(data) { + console.log('inside repo'); + return this.sortStatsModel.create(data); + } + + public list() { + console.log('inside repo'); + return this.sortStatsModel.find({}); + } +} + +export default new UnsortedObjectsRepository(); diff --git a/src/repositories/sortStats/SortStatsSchema.ts b/src/repositories/sortStats/SortStatsSchema.ts index e69de29..c0c21ac 100644 --- a/src/repositories/sortStats/SortStatsSchema.ts +++ b/src/repositories/sortStats/SortStatsSchema.ts @@ -0,0 +1,13 @@ +import * as mongoose from 'mongoose'; + +export default class SortStatsSchema extends mongoose.Schema { + constructor(options) { + const unsortedObjectsSchema = { + id: String, + objectId: String, + sortDuration: Number, + sortingAlgorithm: String, + }; + super(unsortedObjectsSchema, options); + } +} diff --git a/src/repositories/sortStats/index.ts b/src/repositories/sortStats/index.ts index e69de29..dac4c10 100644 --- a/src/repositories/sortStats/index.ts +++ b/src/repositories/sortStats/index.ts @@ -0,0 +1,4 @@ +export { default as SortStatsSchema } from './SortStatsSchema'; +export { default as SortStatsRepository } from './SortStatsRepository'; +export { default as ISortStatsDocument } from './ISortStatsDocument'; +export { sortStatsModel, sortStatsSchema } from './SortStatsModel'; diff --git "a/src/repositories/\342\200\213unsortedObjects/unsortedObjectsModel.ts" "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" similarity index 100% rename from "src/repositories/\342\200\213unsortedObjects/unsortedObjectsModel.ts" rename to "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" index cac9d70..f444254 100644 --- "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" +++ "b/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" @@ -1,6 +1,6 @@ import * as mongoose from 'mongoose'; -export default class SortStatsSchema extends mongoose.Schema { +export default class UnsortedObjectsSchema extends mongoose.Schema { constructor(options) { const unsortedObjectsSchema = { id: String, diff --git "a/src/repositories/\342\200\213unsortedObjects/index.ts" "b/src/repositories/\342\200\213unsortedObjects/index.ts" index 9fe2a98..62d6015 100644 --- "a/src/repositories/\342\200\213unsortedObjects/index.ts" +++ "b/src/repositories/\342\200\213unsortedObjects/index.ts" @@ -1,4 +1,4 @@ export { default as IUnsortedObjectsDocument } from './IUnsortedObjectsDocument'; export { default as UnsortedObjectsRepository } from './UnsortedObjectsRepository'; export { default as UnsortedObjectsSchema } from './UnsortedObjectsSchema'; -export { unsortedObjectsSchema, unsortedObjectsModel } from './unsortedObjectsModel'; +export { unsortedObjectsSchema, unsortedObjectsModel } from './UnsortedObjectsModel'; diff --git a/src/router.ts b/src/router.ts index bec210a..8df4e61 100644 --- a/src/router.ts +++ b/src/router.ts @@ -2,7 +2,7 @@ import { Router } from 'express'; import { unsortedObjectsRouter } from './controllers'; const mainRouter: Router = Router(); -// mainRouter.use('/sort-stats', sortStats ); + mainRouter.use('/unsorted-objects', unsortedObjectsRouter); export default mainRouter; From 329458bd3838b3bb87693bbe2e9233b1f8bfc5a0 Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Tue, 24 Mar 2020 12:24:24 +0530 Subject: [PATCH 05/11] Add M1 --- .editorconfig => M1/.editorconfig | 0 .gitignore => M1/.gitignore | 0 .huskyrc => M1/.huskyrc | 0 README.md => M1/README.md | 0 package.json => M1/package.json | 0 {src => M1/src}/Server.ts | 0 {src => M1/src}/config/IConfig.ts | 0 {src => M1/src}/config/configuration.ts | 0 {src => M1/src}/controllers/index.ts | 0 {src => M1/src}/controllers/unsortedObjects/controller.ts | 0 {src => M1/src}/controllers/unsortedObjects/helper.ts | 0 {src => M1/src}/controllers/unsortedObjects/index.ts | 0 {src => M1/src}/controllers/unsortedObjects/routes.ts | 0 {src => M1/src}/controllers/unsortedObjects/validation.ts | 0 {src => M1/src}/index.ts | 0 {src => M1/src}/libs/Database.ts | 0 {src => M1/src}/libs/SystemResponse.ts | 0 {src => M1/src}/libs/constant.ts | 0 {src => M1/src}/libs/index.ts | 0 {src => M1/src}/libs/routes/errorHandler.ts | 0 {src => M1/src}/libs/routes/index.ts | 0 {src => M1/src}/libs/routes/notFoundRoute.ts | 0 {src => M1/src}/libs/routes/validationHandler.ts | 0 {src => M1/src}/repositories/sortStats/ISortStatsDocument.ts | 0 {src => M1/src}/repositories/sortStats/SortStatsModel.ts | 0 {src => M1/src}/repositories/sortStats/SortStatsRepository.ts | 0 {src => M1/src}/repositories/sortStats/SortStatsSchema.ts | 0 {src => M1/src}/repositories/sortStats/index.ts | 0 .../\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" | 0 .../\342\200\213unsortedObjects/UnsortedObjectsModel.ts" | 2 +- .../\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" | 0 .../\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" | 0 .../src/repositories/\342\200\213unsortedObjects/index.ts" | 0 {src => M1/src}/router.ts | 0 tsconfig.json => M1/tsconfig.json | 0 tslint.json => M1/tslint.json | 0 36 files changed, 1 insertion(+), 1 deletion(-) rename .editorconfig => M1/.editorconfig (100%) rename .gitignore => M1/.gitignore (100%) rename .huskyrc => M1/.huskyrc (100%) rename README.md => M1/README.md (100%) rename package.json => M1/package.json (100%) rename {src => M1/src}/Server.ts (100%) rename {src => M1/src}/config/IConfig.ts (100%) rename {src => M1/src}/config/configuration.ts (100%) rename {src => M1/src}/controllers/index.ts (100%) rename {src => M1/src}/controllers/unsortedObjects/controller.ts (100%) rename {src => M1/src}/controllers/unsortedObjects/helper.ts (100%) rename {src => M1/src}/controllers/unsortedObjects/index.ts (100%) rename {src => M1/src}/controllers/unsortedObjects/routes.ts (100%) rename {src => M1/src}/controllers/unsortedObjects/validation.ts (100%) rename {src => M1/src}/index.ts (100%) rename {src => M1/src}/libs/Database.ts (100%) rename {src => M1/src}/libs/SystemResponse.ts (100%) rename {src => M1/src}/libs/constant.ts (100%) rename {src => M1/src}/libs/index.ts (100%) rename {src => M1/src}/libs/routes/errorHandler.ts (100%) rename {src => M1/src}/libs/routes/index.ts (100%) rename {src => M1/src}/libs/routes/notFoundRoute.ts (100%) rename {src => M1/src}/libs/routes/validationHandler.ts (100%) rename {src => M1/src}/repositories/sortStats/ISortStatsDocument.ts (100%) rename {src => M1/src}/repositories/sortStats/SortStatsModel.ts (100%) rename {src => M1/src}/repositories/sortStats/SortStatsRepository.ts (100%) rename {src => M1/src}/repositories/sortStats/SortStatsSchema.ts (100%) rename {src => M1/src}/repositories/sortStats/index.ts (100%) rename "src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" => "M1/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" (100%) rename "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" => "M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" (81%) rename "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" => "M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" (100%) rename "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" => "M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" (100%) rename "src/repositories/\342\200\213unsortedObjects/index.ts" => "M1/src/repositories/\342\200\213unsortedObjects/index.ts" (100%) rename {src => M1/src}/router.ts (100%) rename tsconfig.json => M1/tsconfig.json (100%) rename tslint.json => M1/tslint.json (100%) diff --git a/.editorconfig b/M1/.editorconfig similarity index 100% rename from .editorconfig rename to M1/.editorconfig diff --git a/.gitignore b/M1/.gitignore similarity index 100% rename from .gitignore rename to M1/.gitignore diff --git a/.huskyrc b/M1/.huskyrc similarity index 100% rename from .huskyrc rename to M1/.huskyrc diff --git a/README.md b/M1/README.md similarity index 100% rename from README.md rename to M1/README.md diff --git a/package.json b/M1/package.json similarity index 100% rename from package.json rename to M1/package.json diff --git a/src/Server.ts b/M1/src/Server.ts similarity index 100% rename from src/Server.ts rename to M1/src/Server.ts diff --git a/src/config/IConfig.ts b/M1/src/config/IConfig.ts similarity index 100% rename from src/config/IConfig.ts rename to M1/src/config/IConfig.ts diff --git a/src/config/configuration.ts b/M1/src/config/configuration.ts similarity index 100% rename from src/config/configuration.ts rename to M1/src/config/configuration.ts diff --git a/src/controllers/index.ts b/M1/src/controllers/index.ts similarity index 100% rename from src/controllers/index.ts rename to M1/src/controllers/index.ts diff --git a/src/controllers/unsortedObjects/controller.ts b/M1/src/controllers/unsortedObjects/controller.ts similarity index 100% rename from src/controllers/unsortedObjects/controller.ts rename to M1/src/controllers/unsortedObjects/controller.ts diff --git a/src/controllers/unsortedObjects/helper.ts b/M1/src/controllers/unsortedObjects/helper.ts similarity index 100% rename from src/controllers/unsortedObjects/helper.ts rename to M1/src/controllers/unsortedObjects/helper.ts diff --git a/src/controllers/unsortedObjects/index.ts b/M1/src/controllers/unsortedObjects/index.ts similarity index 100% rename from src/controllers/unsortedObjects/index.ts rename to M1/src/controllers/unsortedObjects/index.ts diff --git a/src/controllers/unsortedObjects/routes.ts b/M1/src/controllers/unsortedObjects/routes.ts similarity index 100% rename from src/controllers/unsortedObjects/routes.ts rename to M1/src/controllers/unsortedObjects/routes.ts diff --git a/src/controllers/unsortedObjects/validation.ts b/M1/src/controllers/unsortedObjects/validation.ts similarity index 100% rename from src/controllers/unsortedObjects/validation.ts rename to M1/src/controllers/unsortedObjects/validation.ts diff --git a/src/index.ts b/M1/src/index.ts similarity index 100% rename from src/index.ts rename to M1/src/index.ts diff --git a/src/libs/Database.ts b/M1/src/libs/Database.ts similarity index 100% rename from src/libs/Database.ts rename to M1/src/libs/Database.ts diff --git a/src/libs/SystemResponse.ts b/M1/src/libs/SystemResponse.ts similarity index 100% rename from src/libs/SystemResponse.ts rename to M1/src/libs/SystemResponse.ts diff --git a/src/libs/constant.ts b/M1/src/libs/constant.ts similarity index 100% rename from src/libs/constant.ts rename to M1/src/libs/constant.ts diff --git a/src/libs/index.ts b/M1/src/libs/index.ts similarity index 100% rename from src/libs/index.ts rename to M1/src/libs/index.ts diff --git a/src/libs/routes/errorHandler.ts b/M1/src/libs/routes/errorHandler.ts similarity index 100% rename from src/libs/routes/errorHandler.ts rename to M1/src/libs/routes/errorHandler.ts diff --git a/src/libs/routes/index.ts b/M1/src/libs/routes/index.ts similarity index 100% rename from src/libs/routes/index.ts rename to M1/src/libs/routes/index.ts diff --git a/src/libs/routes/notFoundRoute.ts b/M1/src/libs/routes/notFoundRoute.ts similarity index 100% rename from src/libs/routes/notFoundRoute.ts rename to M1/src/libs/routes/notFoundRoute.ts diff --git a/src/libs/routes/validationHandler.ts b/M1/src/libs/routes/validationHandler.ts similarity index 100% rename from src/libs/routes/validationHandler.ts rename to M1/src/libs/routes/validationHandler.ts diff --git a/src/repositories/sortStats/ISortStatsDocument.ts b/M1/src/repositories/sortStats/ISortStatsDocument.ts similarity index 100% rename from src/repositories/sortStats/ISortStatsDocument.ts rename to M1/src/repositories/sortStats/ISortStatsDocument.ts diff --git a/src/repositories/sortStats/SortStatsModel.ts b/M1/src/repositories/sortStats/SortStatsModel.ts similarity index 100% rename from src/repositories/sortStats/SortStatsModel.ts rename to M1/src/repositories/sortStats/SortStatsModel.ts diff --git a/src/repositories/sortStats/SortStatsRepository.ts b/M1/src/repositories/sortStats/SortStatsRepository.ts similarity index 100% rename from src/repositories/sortStats/SortStatsRepository.ts rename to M1/src/repositories/sortStats/SortStatsRepository.ts diff --git a/src/repositories/sortStats/SortStatsSchema.ts b/M1/src/repositories/sortStats/SortStatsSchema.ts similarity index 100% rename from src/repositories/sortStats/SortStatsSchema.ts rename to M1/src/repositories/sortStats/SortStatsSchema.ts diff --git a/src/repositories/sortStats/index.ts b/M1/src/repositories/sortStats/index.ts similarity index 100% rename from src/repositories/sortStats/index.ts rename to M1/src/repositories/sortStats/index.ts diff --git "a/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" "b/M1/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" similarity index 100% rename from "src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" rename to "M1/src/repositories/\342\200\213unsortedObjects/IUnsortedObjectsDocument.ts" diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" "b/M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" similarity index 81% rename from "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" rename to "M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" index 27da63c..dcec9e5 100644 --- "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" +++ "b/M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsModel.ts" @@ -16,4 +16,4 @@ export const unsortedObjectsSchema = new UnsortedObjectsSchema({ toObject: toConvert, }); -export const unsortedObjectsModel: mongoose.Model = mongoose.model('unsortedObjects', unsortedObjectsSchema, 'unsortedObjects', true); +export const unsortedObjectsModel: mongoose.Model = mongoose.model('sortStats', unsortedObjectsSchema, 'sortStats', true); diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" "b/M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" similarity index 100% rename from "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" rename to "M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" diff --git "a/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" "b/M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" similarity index 100% rename from "src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" rename to "M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsSchema.ts" diff --git "a/src/repositories/\342\200\213unsortedObjects/index.ts" "b/M1/src/repositories/\342\200\213unsortedObjects/index.ts" similarity index 100% rename from "src/repositories/\342\200\213unsortedObjects/index.ts" rename to "M1/src/repositories/\342\200\213unsortedObjects/index.ts" diff --git a/src/router.ts b/M1/src/router.ts similarity index 100% rename from src/router.ts rename to M1/src/router.ts diff --git a/tsconfig.json b/M1/tsconfig.json similarity index 100% rename from tsconfig.json rename to M1/tsconfig.json diff --git a/tslint.json b/M1/tslint.json similarity index 100% rename from tslint.json rename to M1/tslint.json From 1284b7649def9cc1be1bf98ad442bd0405b96e9d Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Tue, 24 Mar 2020 12:39:36 +0530 Subject: [PATCH 06/11] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- M1/src/controllers/unsortedObjects/controller.ts | 3 ++- .../\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/M1/src/controllers/unsortedObjects/controller.ts b/M1/src/controllers/unsortedObjects/controller.ts index 6fc3dc9..bb2e5b4 100644 --- a/M1/src/controllers/unsortedObjects/controller.ts +++ b/M1/src/controllers/unsortedObjects/controller.ts @@ -1,8 +1,9 @@ import { Request, Response } from 'express'; -import sizeof from 'object-sizeof'; +// import sizeof from 'object-sizeof'; import { UnsortedObjectsRepository } from '../../repositories/​unsortedObjects'; import SystemResponse from '../../libs/SystemResponse'; import getObject from './helper'; +const sizeof = require('object-sizeof'); class UnsortedObjectsController { static instance: UnsortedObjectsController; diff --git "a/M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" "b/M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" index be835f8..e04d89d 100644 --- "a/M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" +++ "b/M1/src/repositories/\342\200\213unsortedObjects/UnsortedObjectsRepository.ts" @@ -1,6 +1,6 @@ import * as mongoose from 'mongoose'; import { default as IUnsortedObjectsDocument } from './IUnsortedObjectsDocument'; -import { unsortedObjectsModel } from './unsortedObjectsModel'; +import { unsortedObjectsModel } from './UnsortedObjectsModel'; class UnsortedObjectsRepository { protected unsortedObjectsModel: mongoose.Model; From 433215f0a6b4e171a5091b419a312fac87267556 Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Tue, 24 Mar 2020 13:24:49 +0530 Subject: [PATCH 07/11] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20server?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- M2/.editorconfig | 11 ++++ M2/.gitignore | 11 ++++ M2/.huskyrc | 6 ++ M2/README.md | 1 + M2/package.json | 46 ++++++++++++++ M2/src/Server.ts | 47 +++++++++++++++ M2/src/config/IConfig.ts | 4 ++ M2/src/config/configuration.ts | 13 ++++ M2/src/controllers/index.ts | 1 + M2/src/controllers/sortStats/controller.ts | 40 +++++++++++++ M2/src/controllers/sortStats/helper.ts | 0 M2/src/controllers/sortStats/index.ts | 2 + M2/src/controllers/sortStats/routes.ts | 11 ++++ M2/src/controllers/sortStats/validation.ts | 20 +++++++ M2/src/index.ts | 5 ++ M2/src/libs/SystemResponse.ts | 17 ++++++ M2/src/libs/constant.ts | 0 M2/src/libs/index.ts | 1 + M2/src/libs/routes/errorHandler.ts | 14 +++++ M2/src/libs/routes/index.ts | 3 + M2/src/libs/routes/notFoundRoute.ts | 8 +++ M2/src/libs/routes/validationHandler.ts | 67 +++++++++++++++++++++ M2/src/router.ts | 8 +++ M2/tsconfig.json | 31 ++++++++++ M2/tslint.json | 70 ++++++++++++++++++++++ 25 files changed, 437 insertions(+) create mode 100644 M2/.editorconfig create mode 100644 M2/.gitignore create mode 100644 M2/.huskyrc create mode 100644 M2/README.md create mode 100644 M2/package.json create mode 100644 M2/src/Server.ts create mode 100644 M2/src/config/IConfig.ts create mode 100644 M2/src/config/configuration.ts create mode 100644 M2/src/controllers/index.ts create mode 100644 M2/src/controllers/sortStats/controller.ts create mode 100644 M2/src/controllers/sortStats/helper.ts create mode 100644 M2/src/controllers/sortStats/index.ts create mode 100644 M2/src/controllers/sortStats/routes.ts create mode 100644 M2/src/controllers/sortStats/validation.ts create mode 100644 M2/src/index.ts create mode 100644 M2/src/libs/SystemResponse.ts create mode 100644 M2/src/libs/constant.ts create mode 100644 M2/src/libs/index.ts create mode 100644 M2/src/libs/routes/errorHandler.ts create mode 100644 M2/src/libs/routes/index.ts create mode 100644 M2/src/libs/routes/notFoundRoute.ts create mode 100644 M2/src/libs/routes/validationHandler.ts create mode 100644 M2/src/router.ts create mode 100644 M2/tsconfig.json create mode 100644 M2/tslint.json diff --git a/M2/.editorconfig b/M2/.editorconfig new file mode 100644 index 0000000..49c154d --- /dev/null +++ b/M2/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +end_of_line = lf +# editorconfig-tools is unable to ignore longs strings or urls +max_line_length = null diff --git a/M2/.gitignore b/M2/.gitignore new file mode 100644 index 0000000..c1497fd --- /dev/null +++ b/M2/.gitignore @@ -0,0 +1,11 @@ +#node_modules +node_modules + +#package-lock.json +package-lock.json + +#Package dist +dist + +#.env +.env diff --git a/M2/.huskyrc b/M2/.huskyrc new file mode 100644 index 0000000..97226ee --- /dev/null +++ b/M2/.huskyrc @@ -0,0 +1,6 @@ +{ + "hooks": { + "pre-commit": "npm run lint && npm run test:c", + "pre-push": "npm run lint && npm run test:c" + } +} diff --git a/M2/README.md b/M2/README.md new file mode 100644 index 0000000..b3b09bc --- /dev/null +++ b/M2/README.md @@ -0,0 +1 @@ +# training-task diff --git a/M2/package.json b/M2/package.json new file mode 100644 index 0000000..035be43 --- /dev/null +++ b/M2/package.json @@ -0,0 +1,46 @@ +{ + "name": "training-task", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "tsc-watch --project . --onSuccess \"npm run nodemon\"", + "nodemon": "nodemon ./dist/index.js", + "lint": "./node_modules/tslint/bin/tslint -c tslint.json -p tsconfig.json --exclude 'node_modules/**/*.{j,t}s'", + "lint:fix": "npm run lint --fix", + "commit": "npx git-cz" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/AryanSinghalGit/training-task.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/AryanSinghalGit/training-task/issues" + }, + "homepage": "https://github.com/AryanSinghalGit/training-task#readme", + "dependencies": { + "@types/express": "4.17.2", + "@types/node": "13.5.1", + "babel-node": "0.0.1-security", + "body-parser": "1.19.0", + "commitizen": "4.0.3", + "cz-conventional-changelog": "3.1.0", + "dotenv": "8.2.0", + "express": "4.17.1", + "git-cz": "4.2.0", + "husky": "4.2.1", + "mongoose": "5.8.11", + "nodemon": "2.0.2", + "tslint": "^6.0.0" + }, + "devDependencies": { + "@babel/core": "7.8.3", + "@babel/node": "7.8.3", + "@babel/preset-env": "7.8.3", + "tsc-watch": "4.1.0", + "typescript": "3.7.5" + } +} diff --git a/M2/src/Server.ts b/M2/src/Server.ts new file mode 100644 index 0000000..c510d87 --- /dev/null +++ b/M2/src/Server.ts @@ -0,0 +1,47 @@ +import * as express from 'express'; +import * as bodyParser from 'body-parser'; +import { notFoundRoute, errorHandler } from './libs/routes'; +import mainRouter from './router'; + +export class Server { + private app: express.Express; + constructor(protected config) { + this.app = express(); + } + + public bootstrap = (): Server => { + this.initBodyParser(); + this.setupRoutes(); + return this; + } + + public run = async (): Promise => { + try { + const { app, config: { port} }: Server = this; + app.listen(port, (err) => { + if (err) { + console.log(err); + } + console.log(`Express app Successfully started on port : ${port} `); + }); + } + catch (err) { + throw err; + } + return this; + } + + public initBodyParser = () => { + const { app } = this; + app.use(bodyParser.urlencoded({ extended: false })); + app.use(bodyParser.json()); + } + + public setupRoutes = (): void => { + const { app }: Server = this; + app.get('/health-check', (req: express.Request, res: express.Response) => res.send('I am OK')); + app.use('/api', mainRouter); + app.use(notFoundRoute); + app.use(errorHandler); + } +} diff --git a/M2/src/config/IConfig.ts b/M2/src/config/IConfig.ts new file mode 100644 index 0000000..9e8de77 --- /dev/null +++ b/M2/src/config/IConfig.ts @@ -0,0 +1,4 @@ +export interface IConfig { + port: string; + nodeEnv: string; +} diff --git a/M2/src/config/configuration.ts b/M2/src/config/configuration.ts new file mode 100644 index 0000000..b7cbe13 --- /dev/null +++ b/M2/src/config/configuration.ts @@ -0,0 +1,13 @@ +import { IConfig } from './IConfig'; +import { config } from 'dotenv'; + +config(); + +const configuration: IConfig = { + port : process.env.PORT, + nodeEnv : process.env.NODE_ENV, +}; + +Object.freeze(configuration); + +export default configuration; diff --git a/M2/src/controllers/index.ts b/M2/src/controllers/index.ts new file mode 100644 index 0000000..d512024 --- /dev/null +++ b/M2/src/controllers/index.ts @@ -0,0 +1 @@ +export { SortStatsRouter } from './sortStats'; diff --git a/M2/src/controllers/sortStats/controller.ts b/M2/src/controllers/sortStats/controller.ts new file mode 100644 index 0000000..cee73a1 --- /dev/null +++ b/M2/src/controllers/sortStats/controller.ts @@ -0,0 +1,40 @@ +import { Request, Response } from 'express'; +import SystemResponse from '../../libs/SystemResponse'; + +class SortStatsController { + static instance: SortStatsController; + + static getInstance = () => { + if (SortStatsController.instance) { + return SortStatsController.instance; + } + else { + SortStatsController.instance = new SortStatsController(); + return SortStatsController.instance; + } + } + + create = async (req, res: Response) => { + console.log('----------Create Object----------'); + try { + SystemResponse.success(res, 'Success'); + } + catch (err) { + SystemResponse.failure(res, err, err.message); + } + + }; + + list = async (req: Request, res: Response) => { + console.log('---------Object List----------'); + try { + SystemResponse.success(res, 'Success'); + } + catch (err) { + SystemResponse.failure(res, err, err.message); + } + }; + +} + +export default SortStatsController.getInstance(); diff --git a/M2/src/controllers/sortStats/helper.ts b/M2/src/controllers/sortStats/helper.ts new file mode 100644 index 0000000..e69de29 diff --git a/M2/src/controllers/sortStats/index.ts b/M2/src/controllers/sortStats/index.ts new file mode 100644 index 0000000..14e0f52 --- /dev/null +++ b/M2/src/controllers/sortStats/index.ts @@ -0,0 +1,2 @@ +export { default as sortStatsController } from './controller'; +export { default as SortStatsRouter } from './routes'; diff --git a/M2/src/controllers/sortStats/routes.ts b/M2/src/controllers/sortStats/routes.ts new file mode 100644 index 0000000..a061361 --- /dev/null +++ b/M2/src/controllers/sortStats/routes.ts @@ -0,0 +1,11 @@ +import { Router } from 'express'; +import controller from './controller'; +import { validationHandler } from '../../libs'; +import { default as validation } from './validation'; + +const SortStatsRouter: Router = Router(); +SortStatsRouter.route('/') + .get(validationHandler(validation.get), controller.list) + .post(validationHandler(validation.create), controller.create); + +export default SortStatsRouter; diff --git a/M2/src/controllers/sortStats/validation.ts b/M2/src/controllers/sortStats/validation.ts new file mode 100644 index 0000000..c85ca13 --- /dev/null +++ b/M2/src/controllers/sortStats/validation.ts @@ -0,0 +1,20 @@ +const validation = { + create: + { + object: { + required: true, + object: true, + in: ['body'], + errorMessage: 'object is required', + custom: (reqMethod, req) => { + if (typeof req[reqMethod] !== 'object') { + return { error: 'Error Occured', message: 'Not an Object' }; + } + } + } + }, + get: { + }, +}; + +export default validation; diff --git a/M2/src/index.ts b/M2/src/index.ts new file mode 100644 index 0000000..d99ddc6 --- /dev/null +++ b/M2/src/index.ts @@ -0,0 +1,5 @@ +import { Server } from './Server'; +import config from './config/configuration'; + +const server: Server = new Server(config); +server.bootstrap().run(); diff --git a/M2/src/libs/SystemResponse.ts b/M2/src/libs/SystemResponse.ts new file mode 100644 index 0000000..bc837b4 --- /dev/null +++ b/M2/src/libs/SystemResponse.ts @@ -0,0 +1,17 @@ +class SystemResponse { + static success = (res, data, message = 'Success') => { + return res.status(200).send({ + status: 'ok', + message, + data + }); + } + static failure = (res, err, message = 'Failure', status = 400) => { + return res.status(status).send({ + status: err.status || 'Bad Request', + message, + err + }); + } +} +export default SystemResponse; diff --git a/M2/src/libs/constant.ts b/M2/src/libs/constant.ts new file mode 100644 index 0000000..e69de29 diff --git a/M2/src/libs/index.ts b/M2/src/libs/index.ts new file mode 100644 index 0000000..6d1dd34 --- /dev/null +++ b/M2/src/libs/index.ts @@ -0,0 +1 @@ +export { validationHandler } from './routes'; diff --git a/M2/src/libs/routes/errorHandler.ts b/M2/src/libs/routes/errorHandler.ts new file mode 100644 index 0000000..ae8cdf9 --- /dev/null +++ b/M2/src/libs/routes/errorHandler.ts @@ -0,0 +1,14 @@ +import * as express from 'express'; + +const errorHandler = (err, req: express.Request, res: express.Response, next: express.NextFunction): void => { + const resp = { + message: err.message || err , + status: err.status || 500, + error: err.error || 'Error Occurred ', + timestamp: new Date() + }; + res.status(err.status).send(resp); + res.end('ok'); +}; + +export default errorHandler; diff --git a/M2/src/libs/routes/index.ts b/M2/src/libs/routes/index.ts new file mode 100644 index 0000000..5218f78 --- /dev/null +++ b/M2/src/libs/routes/index.ts @@ -0,0 +1,3 @@ +export { default as errorHandler } from './errorHandler'; +export { default as notFoundRoute } from './notFoundRoute'; +export { default as validationHandler } from './validationHandler'; diff --git a/M2/src/libs/routes/notFoundRoute.ts b/M2/src/libs/routes/notFoundRoute.ts new file mode 100644 index 0000000..f4f6986 --- /dev/null +++ b/M2/src/libs/routes/notFoundRoute.ts @@ -0,0 +1,8 @@ +import * as express from 'express'; + +const notFoundRoute = (req: express.Request, res: express.Response, next): express.ErrorRequestHandler => { + const err = {error: 'Not Found' , message: 'error', status: 404 }; + return next(err); +}; + +export default notFoundRoute; diff --git a/M2/src/libs/routes/validationHandler.ts b/M2/src/libs/routes/validationHandler.ts new file mode 100644 index 0000000..50be0ce --- /dev/null +++ b/M2/src/libs/routes/validationHandler.ts @@ -0,0 +1,67 @@ +import { Request, Response, NextFunction } from 'express'; + +export default (config) => { + return (req: Request, res: Response, next: NextFunction) => { + console.log('---------Validation Handler---------'); + console.log(config); + console.log(req.body); + const err = []; + Object.keys(config).forEach(key => { + console.log(`---------${key}---------`); + const { errorMessage } = config[key]; + const { in: reqType } = config[key]; + reqType.forEach(reqMethod => { + const keyValue = req[reqMethod][key]; + if (config[key].required === true) { + if (keyValue === undefined || keyValue === null) { + const obj = { + location: `${reqMethod}`, + msg: `${errorMessage}`, + param: `${key}`, + value: `${keyValue}` + }; + err.push(obj); + } + } + if (keyValue !== undefined) + if (config[key].regex !== undefined) { + console.log('inside regex'); + const { regex } = config[key]; + if (!regex.test(keyValue)) { + const obj = { + location: `${reqMethod}`, + msg: `${key} is invalid`, + param: `${key}`, + value: `${keyValue}` + }; + err.push(obj); + } + } + if (config[key].custom !== undefined) + if (config[key].custom(reqMethod, req)) { + const obj = { + location: `${reqMethod}`, + msg: `${errorMessage}`, + param: `${key}`, + value: `${keyValue}` + }; + obj[reqMethod] = obj.param; + delete obj.param; + err.push(obj); + } + }); + }); + if (err.length === 0) + return next(); + else { + console.log(err); + const error = { + message: 'Error Occurred', + status: 400, + error: err, + }; + console.log(error); + return next(error); + } + }; +}; diff --git a/M2/src/router.ts b/M2/src/router.ts new file mode 100644 index 0000000..cb8f85b --- /dev/null +++ b/M2/src/router.ts @@ -0,0 +1,8 @@ +import { Router } from 'express'; +import { SortStatsRouter } from './controllers'; + +const mainRouter: Router = Router(); + +mainRouter.use('/sort-stats', SortStatsRouter); + +export default mainRouter; diff --git a/M2/tsconfig.json b/M2/tsconfig.json new file mode 100644 index 0000000..2845fea --- /dev/null +++ b/M2/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es6", + "noImplicitAny": false, + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "esModuleInterop": false, + "allowJs": true /* Allow javascript files to be compiled. */, + "checkJs": false /* Report errors in .js files. */, + "sourceMap": true, + "outDir": "./dist", + "baseUrl": ".", + "paths": { + "*": [ + "node_modules/*", + "src/types/*" + ] + }, + }, + "exclude": [ + "dist" + ], + "include": [ + "src" + ], + "types": [ + "src/types" + ] +} \ No newline at end of file diff --git a/M2/tslint.json b/M2/tslint.json new file mode 100644 index 0000000..8627218 --- /dev/null +++ b/M2/tslint.json @@ -0,0 +1,70 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": { + "class-name": true, + "comment-format": [ + true, + "check-space" + ], + "indent": [ + true, + "spaces", + 2 + ], + "one-line": [ + true, + "check-open-brace", + "check-whitespace" + ], + "no-var-keyword": true, + "quotemark": [ + true, + "single", + "avoid-escape" + ], + "semicolon": [ + true, + "always", + "ignore-bound-class-methods" + ], + "whitespace": [ + true, + "check-branch", + "check-decl", + "check-operator", + "check-module", + "check-separator", + "check-type" + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ], + "no-internal-module": true, + "no-trailing-whitespace": true, + "no-null-keyword": true, + "prefer-const": true, + "jsdoc-format": true, + "no-console": [ + false + ] + }, + "rulesDirectory": [] +} \ No newline at end of file From 33c9f51c802870c0436ce05f9cb9e346a49740de Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Tue, 24 Mar 2020 16:32:35 +0530 Subject: [PATCH 08/11] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- M1/.gitignore | 11 ----------- M1/src/controllers/unsortedObjects/controller.ts | 3 +-- 2 files changed, 1 insertion(+), 13 deletions(-) delete mode 100644 M1/.gitignore diff --git a/M1/.gitignore b/M1/.gitignore deleted file mode 100644 index c1497fd..0000000 --- a/M1/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -#node_modules -node_modules - -#package-lock.json -package-lock.json - -#Package dist -dist - -#.env -.env diff --git a/M1/src/controllers/unsortedObjects/controller.ts b/M1/src/controllers/unsortedObjects/controller.ts index bb2e5b4..ce01fc5 100644 --- a/M1/src/controllers/unsortedObjects/controller.ts +++ b/M1/src/controllers/unsortedObjects/controller.ts @@ -1,9 +1,8 @@ import { Request, Response } from 'express'; -// import sizeof from 'object-sizeof'; +const sizeof = require('object-sizeof'); import { UnsortedObjectsRepository } from '../../repositories/​unsortedObjects'; import SystemResponse from '../../libs/SystemResponse'; import getObject from './helper'; -const sizeof = require('object-sizeof'); class UnsortedObjectsController { static instance: UnsortedObjectsController; From 76186afad93d2547fe91f568c92b66961785c02b Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Tue, 24 Mar 2020 16:37:22 +0530 Subject: [PATCH 09/11] add gitignore --- .gitignore | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8965fe5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +#node_modules +M1/node_modules +M2/node_modules + +#package-lock.json +package-lock.json + +#Package dist +dist + +#.env +.env \ No newline at end of file From 1c7de0bdf280e816ee1b37ff8e1f865704df3850 Mon Sep 17 00:00:00 2001 From: Aryan Singhal Date: Tue, 24 Mar 2020 18:42:54 +0530 Subject: [PATCH 10/11] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20controller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- M2/.gitignore | 11 ----- M2/package.json | 2 +- M2/src/controllers/sortStats/controller.ts | 24 +++++------ M2/src/controllers/sortStats/helper.ts | 40 +++++++++++++++++++ M2/src/controllers/sortStats/routes.ts | 3 +- .../sortStats/sortingAlgorithm/bubbleSort.ts | 16 ++++++++ .../sortStats/sortingAlgorithm/defaultSort.ts | 12 ++++++ .../sortStats/sortingAlgorithm/index.ts | 4 ++ .../sortStats/sortingAlgorithm/quickSort.ts | 38 ++++++++++++++++++ .../sortingAlgorithm/selectionSort.ts | 19 +++++++++ M2/src/controllers/sortStats/validation.ts | 26 +++++++++--- M2/src/libs/routes/validationHandler.ts | 4 +- 12 files changed, 162 insertions(+), 37 deletions(-) delete mode 100644 M2/.gitignore create mode 100644 M2/src/controllers/sortStats/sortingAlgorithm/bubbleSort.ts create mode 100644 M2/src/controllers/sortStats/sortingAlgorithm/defaultSort.ts create mode 100644 M2/src/controllers/sortStats/sortingAlgorithm/index.ts create mode 100644 M2/src/controllers/sortStats/sortingAlgorithm/quickSort.ts create mode 100644 M2/src/controllers/sortStats/sortingAlgorithm/selectionSort.ts diff --git a/M2/.gitignore b/M2/.gitignore deleted file mode 100644 index c1497fd..0000000 --- a/M2/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -#node_modules -node_modules - -#package-lock.json -package-lock.json - -#Package dist -dist - -#.env -.env diff --git a/M2/package.json b/M2/package.json index 035be43..90f0501 100644 --- a/M2/package.json +++ b/M2/package.json @@ -34,7 +34,7 @@ "husky": "4.2.1", "mongoose": "5.8.11", "nodemon": "2.0.2", - "tslint": "^6.0.0" + "tslint": "6.0.0" }, "devDependencies": { "@babel/core": "7.8.3", diff --git a/M2/src/controllers/sortStats/controller.ts b/M2/src/controllers/sortStats/controller.ts index cee73a1..e9cb37a 100644 --- a/M2/src/controllers/sortStats/controller.ts +++ b/M2/src/controllers/sortStats/controller.ts @@ -1,5 +1,6 @@ import { Request, Response } from 'express'; import SystemResponse from '../../libs/SystemResponse'; +import sortObject from './helper'; class SortStatsController { static instance: SortStatsController; @@ -14,21 +15,16 @@ class SortStatsController { } } - create = async (req, res: Response) => { - console.log('----------Create Object----------'); + sortStats = async (req: Request, res: Response) => { + console.log('---------Sort Stats----------'); try { - SystemResponse.success(res, 'Success'); - } - catch (err) { - SystemResponse.failure(res, err, err.message); - } - - }; - - list = async (req: Request, res: Response) => { - console.log('---------Object List----------'); - try { - SystemResponse.success(res, 'Success'); + const { object, sortingAlgorithm, id = 1 } = req.body; + const startTime = new Date().getTime(); + sortObject(object, sortingAlgorithm, startTime); + const endTime = new Date().getTime(); + const sortDuration = endTime - startTime; + const responseObject = { objectId: id, sortingAlgorithm, sortDuration } + SystemResponse.success(res, responseObject); } catch (err) { SystemResponse.failure(res, err, err.message); diff --git a/M2/src/controllers/sortStats/helper.ts b/M2/src/controllers/sortStats/helper.ts index e69de29..44665c0 100644 --- a/M2/src/controllers/sortStats/helper.ts +++ b/M2/src/controllers/sortStats/helper.ts @@ -0,0 +1,40 @@ +import { quickSort, bubbleSort, defaultSort, selectionSort } from './sortingAlgorithm'; + +const sortObject = (object: object, sortMethod, startTime): object => { + let sortedObj = {}; + let keys = Object.keys(object); + const endTime = new Date().getTime(); + if (endTime - startTime >= 5000) + return sortedObj; + + switch (sortMethod) { + case 'quickSort': + keys = quickSort(keys, 0, keys.length); + break; + case 'bubbleSort': + keys = bubbleSort(keys); + break; + case 'selectionSort': + keys = selectionSort(keys); + break; + case 'defaultSort': + keys = defaultSort(keys); + break; + default: + keys = defaultSort(keys); + } + + + for (const index in keys) { + const key = keys[index]; + if (typeof object[key] == 'object' && !(object[key] instanceof Array)) { + sortedObj[key] = sortObject(object[key], sortMethod, startTime); + } else { + sortedObj[key] = object[key]; + } + } + + return sortedObj; +} + +export default sortObject; diff --git a/M2/src/controllers/sortStats/routes.ts b/M2/src/controllers/sortStats/routes.ts index a061361..048a65e 100644 --- a/M2/src/controllers/sortStats/routes.ts +++ b/M2/src/controllers/sortStats/routes.ts @@ -5,7 +5,6 @@ import { default as validation } from './validation'; const SortStatsRouter: Router = Router(); SortStatsRouter.route('/') - .get(validationHandler(validation.get), controller.list) - .post(validationHandler(validation.create), controller.create); + .post(validationHandler(validation.create), controller.sortStats); export default SortStatsRouter; diff --git a/M2/src/controllers/sortStats/sortingAlgorithm/bubbleSort.ts b/M2/src/controllers/sortStats/sortingAlgorithm/bubbleSort.ts new file mode 100644 index 0000000..f98979a --- /dev/null +++ b/M2/src/controllers/sortStats/sortingAlgorithm/bubbleSort.ts @@ -0,0 +1,16 @@ +const bubbleSort = (keys) => { + const len = keys.length; + let temp; + for (let i = 0; i < len; i++) { + for (let j = 0, stop = len - i; j < stop; j++) { + if (keys[j] > keys[j + 1]) { + temp = keys[j]; + keys[j] = keys[j + 1]; + keys[j + 1] = temp; + } + } + } + return keys; +}; + +export default bubbleSort; diff --git a/M2/src/controllers/sortStats/sortingAlgorithm/defaultSort.ts b/M2/src/controllers/sortStats/sortingAlgorithm/defaultSort.ts new file mode 100644 index 0000000..ce81014 --- /dev/null +++ b/M2/src/controllers/sortStats/sortingAlgorithm/defaultSort.ts @@ -0,0 +1,12 @@ +const defaultSort = (keys) => { + keys.sort((key1, key2) => { + key1 = key1.toLowerCase(); + key2 = key2.toLowerCase(); + if (key1 < key2) return -1; + if (key1 > key2) return 1; + return 0; + }); + return keys; +}; + +export default defaultSort; diff --git a/M2/src/controllers/sortStats/sortingAlgorithm/index.ts b/M2/src/controllers/sortStats/sortingAlgorithm/index.ts new file mode 100644 index 0000000..05496ec --- /dev/null +++ b/M2/src/controllers/sortStats/sortingAlgorithm/index.ts @@ -0,0 +1,4 @@ +export { default as quickSort } from './quickSort'; +export { default as bubbleSort } from './bubbleSort'; +export { default as defaultSort } from './defaultSort'; +export { default as selectionSort } from './selectionSort'; diff --git a/M2/src/controllers/sortStats/sortingAlgorithm/quickSort.ts b/M2/src/controllers/sortStats/sortingAlgorithm/quickSort.ts new file mode 100644 index 0000000..163cb89 --- /dev/null +++ b/M2/src/controllers/sortStats/sortingAlgorithm/quickSort.ts @@ -0,0 +1,38 @@ +function partition(keys, left, right) { + const pivot = keys[Math.floor((right + left) / 2)]; + let temp; + let i = left; + let j = right; + while (i <= j) { + while (keys[i] < pivot) { + i++; + } + while (keys[j] > pivot) { + j--; + } + if (i <= j) { + temp = keys[j]; + keys[j] = keys[i]; + keys[i] = temp; + i++; + j--; + } + } + return i; + } + +function quickSort(keys, left, right) { + let index; + if (keys.length > 1) { + index = partition(keys, left, right); + if (left < index - 1) { + quickSort(keys, left, index - 1); + } + if (index < right) { + quickSort(keys, index, right); + } + } + return keys; + } + +export default quickSort; diff --git a/M2/src/controllers/sortStats/sortingAlgorithm/selectionSort.ts b/M2/src/controllers/sortStats/sortingAlgorithm/selectionSort.ts new file mode 100644 index 0000000..29bc0b9 --- /dev/null +++ b/M2/src/controllers/sortStats/sortingAlgorithm/selectionSort.ts @@ -0,0 +1,19 @@ +const selectionSort = (arr) => { + const len = arr.length; + for (let i = 0; i < len; i++) { + let min = i; + for (let j = i + 1; j < len; j++) { + if (arr[min] > arr[j]) { + min = j; + } + } + if (min !== i) { + const tmp = arr[i]; + arr[i] = arr[min]; + arr[min] = tmp; + } + } + return arr; +}; + +export default selectionSort; diff --git a/M2/src/controllers/sortStats/validation.ts b/M2/src/controllers/sortStats/validation.ts index c85ca13..d3355ea 100644 --- a/M2/src/controllers/sortStats/validation.ts +++ b/M2/src/controllers/sortStats/validation.ts @@ -6,15 +6,29 @@ const validation = { object: true, in: ['body'], errorMessage: 'object is required', - custom: (reqMethod, req) => { - if (typeof req[reqMethod] !== 'object') { - return { error: 'Error Occured', message: 'Not an Object' }; + custom: (key) => { + console.log(key); + if (typeof key !== 'object') { + return { error: 'Error Occurred', message: 'Not an Object' }; + } + } + }, + sortingAlgorithm: { + required: true, + string: true, + regex: /^[a-zA-Z]+/, + in: ['body'], + errorMessage: 'object is required', + custom: (key) => { + console.log(key); + const validationArray = ['quickSort', 'bubbleSort', 'selectionSort', 'defaultSort']; + if (! validationArray.includes(key)) { + return { error: 'Error Occurred', message: 'Not an Object' }; } } } - }, - get: { - }, + + } }; export default validation; diff --git a/M2/src/libs/routes/validationHandler.ts b/M2/src/libs/routes/validationHandler.ts index 50be0ce..35c36b8 100644 --- a/M2/src/libs/routes/validationHandler.ts +++ b/M2/src/libs/routes/validationHandler.ts @@ -38,15 +38,13 @@ export default (config) => { } } if (config[key].custom !== undefined) - if (config[key].custom(reqMethod, req)) { + if (config[key].custom(req[reqMethod][key])) { const obj = { location: `${reqMethod}`, msg: `${errorMessage}`, param: `${key}`, value: `${keyValue}` }; - obj[reqMethod] = obj.param; - delete obj.param; err.push(obj); } }); From bcbdd34fa5c414427a872597b0868403915b3c0d Mon Sep 17 00:00:00 2001 From: AryanSinghalGit <60099465+AryanSinghalGit@users.noreply.github.com> Date: Wed, 25 Mar 2020 11:39:00 +0530 Subject: [PATCH 11/11] Update controller.ts --- M2/src/controllers/sortStats/controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/M2/src/controllers/sortStats/controller.ts b/M2/src/controllers/sortStats/controller.ts index e9cb37a..0d8d642 100644 --- a/M2/src/controllers/sortStats/controller.ts +++ b/M2/src/controllers/sortStats/controller.ts @@ -15,7 +15,7 @@ class SortStatsController { } } - sortStats = async (req: Request, res: Response) => { + sortStats = (req: Request, res: Response) => { console.log('---------Sort Stats----------'); try { const { object, sortingAlgorithm, id = 1 } = req.body;