From d4b91a7e05751fa0b71f4cb94815dff2dc536d85 Mon Sep 17 00:00:00 2001 From: Merhawi Fissehaye Date: Tue, 23 Jan 2018 12:16:29 +0300 Subject: [PATCH 1/5] moving files around --- Dockerfile | 2 +- docker-compose.test.yml | 4 ++-- docker-compose.yml | 4 ++-- server/controllers/ussd.controller.js | 2 +- server/routes/index.route.js | 2 +- server/{controllers => services/flow}/states/delivery.js | 0 server/{controllers => services/flow}/states/distribution.js | 0 server/{controllers => services/flow}/ussd-menu.js | 0 8 files changed, 7 insertions(+), 7 deletions(-) rename server/{controllers => services/flow}/states/delivery.js (100%) rename server/{controllers => services/flow}/states/distribution.js (100%) rename server/{controllers => services/flow}/ussd-menu.js (100%) diff --git a/Dockerfile b/Dockerfile index e4b7775..d59f245 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,5 +22,5 @@ COPY . /app/ # expose port 4040 EXPOSE 4040 -# cmd to start service +# cmd to start services CMD [ "yarn", "start" ] diff --git a/docker-compose.test.yml b/docker-compose.test.yml index cff969c..5b0ac7a 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -26,9 +26,9 @@ services: - MONGO_HOST=mongodb://mongo/express-mongoose-es6-rest-api-test - DEBUG=express-mongoose-es6-rest-api:* - # Link to containers in another service. + # Link to containers in another services. # Links also express dependency between services in the same way as depends_on, - # so they determine the order of service startup. + # so they determine the order of services startup. links: - mongo diff --git a/docker-compose.yml b/docker-compose.yml index 0707c47..070922e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -27,9 +27,9 @@ services: - MONGO_HOST=mongodb://mongo/smartface - DEBUG=smartface:* - # Link to containers in another service. + # Link to containers in another services. # Links also express dependency between services in the same way as depends_on, - # so they determine the order of service startup. + # so they determine the order of services startup. links: - mongo mongo: diff --git a/server/controllers/ussd.controller.js b/server/controllers/ussd.controller.js index 8e263c7..7c39c5a 100644 --- a/server/controllers/ussd.controller.js +++ b/server/controllers/ussd.controller.js @@ -1,4 +1,4 @@ -import menu from './ussd-menu' +import menu from '../services/flow/ussd-menu' import axios from 'axios' import moment from 'moment' diff --git a/server/routes/index.route.js b/server/routes/index.route.js index cbeaed0..68fe489 100644 --- a/server/routes/index.route.js +++ b/server/routes/index.route.js @@ -5,7 +5,7 @@ import ussdRoutes from './ussd.route'; const router = express.Router(); // eslint-disable-line new-cap -/** GET /health-check - Check service health */ +/** GET /health-check - Check services health */ router.get('/health-check', (req, res) => res.send('OK') ); diff --git a/server/controllers/states/delivery.js b/server/services/flow/states/delivery.js similarity index 100% rename from server/controllers/states/delivery.js rename to server/services/flow/states/delivery.js diff --git a/server/controllers/states/distribution.js b/server/services/flow/states/distribution.js similarity index 100% rename from server/controllers/states/distribution.js rename to server/services/flow/states/distribution.js diff --git a/server/controllers/ussd-menu.js b/server/services/flow/ussd-menu.js similarity index 100% rename from server/controllers/ussd-menu.js rename to server/services/flow/ussd-menu.js From 3e89d526aa514922663f55bff9a0d357cd2a3ec1 Mon Sep 17 00:00:00 2001 From: Merhawi Fissehaye Date: Tue, 23 Jan 2018 18:02:56 +0300 Subject: [PATCH 2/5] refactoring and introducing services --- .vscode/launch.json | 14 ++++++++ server/controllers/ussd.controller.js | 40 +++++++++------------ server/routes/ussd.route.js | 12 +++---- server/services/dispatch-service.js | 21 +++++++++++ server/services/flow/states/delivery.js | 18 +++++----- server/services/flow/states/distribution.js | 23 ++++++++---- server/services/flow/ussd-menu.js | 40 +++------------------ 7 files changed, 89 insertions(+), 79 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 server/services/dispatch-service.js diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..de9f759 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "attach", + "name": "Attach by Process ID", + "processId": "${command:PickProcess}" + } + ] +} \ No newline at end of file diff --git a/server/controllers/ussd.controller.js b/server/controllers/ussd.controller.js index 7c39c5a..e4402f4 100644 --- a/server/controllers/ussd.controller.js +++ b/server/controllers/ussd.controller.js @@ -1,35 +1,27 @@ -import menu from '../services/flow/ussd-menu' -import axios from 'axios' -import moment from 'moment' +import menu from '../services/flow/ussd-menu'; +import dispatchService from '../services/dispatch-service'; function start(req, res, next) { - menu.run(req.body, ussdResult => { - res.send(ussdResult) - }) + menu.run(req.body, (ussdResult) => { + res.send(ussdResult); + }); } -function getDispatchProxy(req, res, next) { - let gin = parseInt(req.query.gin) - let itemType = ['Wheat', 'Duket', 'Furno', 'Fafa', 'Endomi', 'Wetet'][gin] - itemType = itemType ? itemType : 'Wheat' - res.json({ - bags: gin + 1, - kg: gin * 100, - itemType, - date: moment().subtract(gin, 'days').calendar(), - truckPlateNumber: gin + '-38765', - }) +function getDispatchInfo(req, res, next) { + const gin = parseInt(req.query.gin, 10); + const info = dispatchService.getDispatchInfo(gin); + res.json(info); } -function getDispatch(req, res, next) { - axios.get('http://localhost:4040/api/ussd/dispatch-proxy?gin=' + req.query.gin).then((axiosResponse) => { - res.json(axiosResponse.data) - }) +function getDispatchViaProxy(req, res, next) { + dispatchService.getDispatchInfoViaProxy(req.query.gin).then((dispatch) => { + res.json(dispatch); + }); } function received(req, res, next) { - //TODO: store the received amount to the database - res.send({}) + // TODO: store the received amount to the database + res.send({}); } -export default {start, getDispatch, getDispatchProxy, received} +export default { start, getDispatchInfo, getDispatchViaProxy, received }; diff --git a/server/routes/ussd.route.js b/server/routes/ussd.route.js index 48e843a..4ea750a 100644 --- a/server/routes/ussd.route.js +++ b/server/routes/ussd.route.js @@ -1,6 +1,6 @@ -import express from 'express' -import validate from 'express-validation' -import ussdCtrl from '../controllers/ussd.controller.js' +import express from 'express'; +import validate from 'express-validation'; +import ussdCtrl from '../controllers/ussd.controller.js'; const router = express.Router() @@ -8,12 +8,12 @@ router.route('/') .post(ussdCtrl.start) router.route('/dispatch') - .get(ussdCtrl.getDispatch) + .get(ussdCtrl.getDispatchInfo) router.route('/dispatch-proxy') - .get(ussdCtrl.getDispatchProxy) + .get(ussdCtrl.getDispatchViaProxy) router.route('/received') .post(ussdCtrl.received) -export default router +export default router; diff --git a/server/services/dispatch-service.js b/server/services/dispatch-service.js new file mode 100644 index 0000000..7fae60c --- /dev/null +++ b/server/services/dispatch-service.js @@ -0,0 +1,21 @@ +import axios from 'axios'; +import moment from 'moment/moment'; + +// TODO demonstrates how to call an external API +const getDispatchInfoViaProxy = (gin) => axios.get(`http://localhost:4040/api/ussd/dispatch?gin=${gin}`).then(axiosResponse => axiosResponse.data); + +const getDispatchInfo = (gin) => { + let itemType = ['Wheat', 'Duket', 'Furno', 'Fafa', 'Endomi', 'Wetet'][gin]; + itemType = itemType || 'Wheat'; + return { + bags: gin + 1, + kg: gin * 100, + itemType, + date: moment().subtract(gin, 'days').calendar(), + truckPlateNumber: `${gin}-38765`, + }; +}; + +const receive = (val) => axios.post('http://localhost:4040/api/ussd/received/', {val}).then(response => response.data) + +export default { getDispatchInfoViaProxy, getDispatchInfo }; diff --git a/server/services/flow/states/delivery.js b/server/services/flow/states/delivery.js index 61960f4..52505b1 100644 --- a/server/services/flow/states/delivery.js +++ b/server/services/flow/states/delivery.js @@ -1,4 +1,6 @@ import axios from 'axios' +import ussdService from '../../dispatch-service' +import dispatchService from '../../dispatch-service'; export const register = (menu) => { menu.state('delivery', { @@ -11,11 +13,11 @@ export const register = (menu) => { .state('getDispatchInfo', { run: () => { // assuming response has keys bags, kg, itemType, date, truckPlateNumber - axios.get('http://localhost:4040/api/ussd/dispatch/?gin=' + menu.val).then((response) => { - menu.con(`${response.data.bags} bags (${response.data.kg} kg) of ${response.data.itemType} was dispatched to your FDP on ${response.data.date} with truck plate # ${response.data.truckPlateNumber}. Please type quantity quantity you have received in Quintal.`) + ussdService.getDispatchInfoViaProxy(menu.val).then(dispatch => { + menu.con(`${dispatch.bags} bags (${dispatch.kg} kg) of ${dispatch.itemType} was dispatched to your FDP on ${dispatch.date} with truck plate # ${dispatch.truckPlateNumber}. Please type quantity quantity you have received in Quintal.`); }).catch(err => { menu.end('You have errors in your input. Good bye!') - }) + }); }, defaultNext: 'deliveryInformationSubmitted' @@ -23,15 +25,15 @@ export const register = (menu) => { .state('deliveryInformationSubmitted', { run: () => { let val = menu.val - axios.post('http://localhost:4040/api/ussd/received/', {val}).then(response => { - //TODO: call Jasmin here - menu.end('Thank you for submitting your delivery information. You will receive a confirmation SMS containing your delivery record') - }) + dispatchService.receive(val).then(data => { + // TODO: call Jasmin here + menu.end('Thank you for submitting your delivery information. You will receive a confirmation SMS containing your delivery record'); + }); } }) .state('error', { run: () => { - menu.end('You have errors in your input. Good bye!') + menu.end('You have errors in your input. Good bye!'); } }) } diff --git a/server/services/flow/states/distribution.js b/server/services/flow/states/distribution.js index 9ed1eb3..6754876 100644 --- a/server/services/flow/states/distribution.js +++ b/server/services/flow/states/distribution.js @@ -1,11 +1,8 @@ export const register = (menu) => { menu.state('distribution', { run: () => { - menu.con('You are reporting to {fdp} FDP which is in {zone} Zone, {woreda} Woreda. Which round are you reporting for?', { - fdp: 'Ade', - zone: 'East Hararghie', - woreda: 'Gola Oda', - }) + let fdp = 'Ade', zone = 'East Hararghie', woreda = 'Gola Oda'; + menu.con(`You are reporting to ${fdp} FDP which is in ${zone} Zone, ${woreda} Woreda. Which round are you reporting for?`) }, defaultNext: 'getReportRound', @@ -14,9 +11,23 @@ export const register = (menu) => { .state('getReportRound', { run: () => { let val = menu.val - menubar.con('Please type the total number of beneficiaries which were provided assistance in 2009/2017 2nd round?') + menu.con('Please type the total number of beneficiaries which were provided assistance in 2009/2017 2nd round?') }, defaultNext: 'deliveryInformationSubmitted' }) + + .state('deliveryInformationSubmitted', { + run: () => { + menu.con('Total amount of [commodity] in quintal distributed?') + }, + + defaultNext: 'totalAmountOfCommoditySubmitted' + }) + + .state('totalAmountOfCommoditySubmitted', { + run: () => { + menu.end('Thank you for submitting distribution information. You will recieve a confirmation SMS containing your distribution record.') + } + }) } diff --git a/server/services/flow/ussd-menu.js b/server/services/flow/ussd-menu.js index 63dba85..55a0f2e 100644 --- a/server/services/flow/ussd-menu.js +++ b/server/services/flow/ussd-menu.js @@ -1,10 +1,8 @@ -import UssdMenu from 'ussd-menu-builder' -const menu = new UssdMenu() -import axios from 'axios' -import * as registerDeliveryStates from './states/delivery' -import * as registerDistributionStates from './states/distribution' +import UssdMenu from 'ussd-menu-builder'; +import * as registerDeliveryStates from './states/delivery'; +import * as registerDistributionStates from './states/distribution'; -let sessions = {} +const menu = new UssdMenu() menu.startState({ run: () => { @@ -21,35 +19,7 @@ menu.startState({ } }) -menu.sessionConfig({ - start: (sessionId, callback) => { - // initialize current session if it doesn't exist - // this is called by menu.run() - if(!(sessionId in sessions)) sessions[sessionId] = {}; - callback(); - }, - - end: (sessionId, callback) => { - // clear current session - // this is called by menu.end() - delete sessions[sessionId]; - callback(); - }, - - set: (sessionId, key, value, callback) => { - // store key-value pair in current session - sessions[sessionId][key] = value; - callback(); - }, - - get: (sessionId, key, callback) => { - // retrieve value by key in current session - let value = sessions[sessionId][key]; - callback(null, value); - } -}) - registerDeliveryStates.register(menu) registerDistributionStates.register(menu) -export default menu +export default menu; From 42eee14fd13b75d9bc245eb50d7364b963dbb2f6 Mon Sep 17 00:00:00 2001 From: Merhawi Fissehaye Date: Tue, 23 Jan 2018 18:13:01 +0300 Subject: [PATCH 3/5] Reading host and port information from environment variables --- config/config.js | 1 + server/services/dispatch-service.js | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/config/config.js b/config/config.js index 3ca2c9f..acae2c4 100644 --- a/config/config.js +++ b/config/config.js @@ -35,6 +35,7 @@ const config = { port: envVars.PORT, mongooseDebug: envVars.MONGOOSE_DEBUG, jwtSecret: envVars.JWT_SECRET, + baseUrl: envVars.BASE_URL, mongo: { host: envVars.MONGO_HOST, port: envVars.MONGO_PORT diff --git a/server/services/dispatch-service.js b/server/services/dispatch-service.js index 7fae60c..1ce1ca1 100644 --- a/server/services/dispatch-service.js +++ b/server/services/dispatch-service.js @@ -1,8 +1,13 @@ import axios from 'axios'; import moment from 'moment/moment'; +import config from '../../config/config' + +let ax = axios.create({ + baseURL: `${config.baseUrl}:${config.port}/api/ussd/` +}) // TODO demonstrates how to call an external API -const getDispatchInfoViaProxy = (gin) => axios.get(`http://localhost:4040/api/ussd/dispatch?gin=${gin}`).then(axiosResponse => axiosResponse.data); +const getDispatchInfoViaProxy = (gin) => ax.get(`dispatch?gin=${gin}`).then(axiosResponse => axiosResponse.data); const getDispatchInfo = (gin) => { let itemType = ['Wheat', 'Duket', 'Furno', 'Fafa', 'Endomi', 'Wetet'][gin]; @@ -16,6 +21,6 @@ const getDispatchInfo = (gin) => { }; }; -const receive = (val) => axios.post('http://localhost:4040/api/ussd/received/', {val}).then(response => response.data) +const receive = (val) => ax.post('received', {val}).then(response => response.data) export default { getDispatchInfoViaProxy, getDispatchInfo }; From 8a4dcdacd0cd787b62a4f64b1573dfeed4a2ed77 Mon Sep 17 00:00:00 2001 From: Merhawi Fissehaye Date: Wed, 21 Feb 2018 15:21:23 +0300 Subject: [PATCH 4/5] creating models and tests for operation --- package-lock.json | 13 ++ package.json | 8 +- server/controllers/operation.controller.js | 9 + server/models/base.schema.js | 10 ++ server/models/commodity-category.model.js | 33 ++++ server/models/commodity.model.js | 53 ++++++ server/models/dispatch.model.js | 66 +++++++ server/models/fdp.model.js | 43 +++++ server/models/fscd-annual-plan.model.js | 49 ++++++ server/models/hrd.model.js | 46 +++++ server/models/hub.model.js | 35 ++++ server/models/location.model.js | 30 ++++ server/models/operation.model.js | 92 ++++++++++ server/models/organization.model.js | 29 ++++ server/models/program.model.js | 34 ++++ server/models/ration.model.js | 32 ++++ server/models/regional-request.model.js | 38 ++++ server/models/requisition.model.js | 57 ++++++ server/models/season.model.js | 37 ++++ server/models/transporter.model.js | 44 +++++ server/models/uom-category.model.js | 22 +++ server/models/warehouse.model.js | 41 +++++ server/routes/index.route.js | 3 + server/routes/operation.route.js | 8 + server/tests/operations.test.js | 39 +++++ yarn.lock | 191 ++++++++++++++------- 26 files changed, 996 insertions(+), 66 deletions(-) create mode 100644 package-lock.json create mode 100644 server/controllers/operation.controller.js create mode 100644 server/models/base.schema.js create mode 100644 server/models/commodity-category.model.js create mode 100644 server/models/commodity.model.js create mode 100644 server/models/dispatch.model.js create mode 100644 server/models/fdp.model.js create mode 100644 server/models/fscd-annual-plan.model.js create mode 100644 server/models/hrd.model.js create mode 100644 server/models/hub.model.js create mode 100644 server/models/location.model.js create mode 100644 server/models/operation.model.js create mode 100644 server/models/organization.model.js create mode 100644 server/models/program.model.js create mode 100644 server/models/ration.model.js create mode 100644 server/models/regional-request.model.js create mode 100644 server/models/requisition.model.js create mode 100644 server/models/season.model.js create mode 100644 server/models/transporter.model.js create mode 100644 server/models/uom-category.model.js create mode 100644 server/models/warehouse.model.js create mode 100644 server/routes/operation.route.js create mode 100644 server/tests/operations.test.js diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..dee5e3e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13 @@ +{ + "name": "express-mongoose-es6-rest-api", + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + } + } +} diff --git a/package.json b/package.json index 086a2c0..22efcdd 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "build": "gulp", "lint": "esw *.js server config --color", "lint:watch": "yarn lint -- --watch", - "precommit": "yarn lint && yarn test", "test": "cross-env NODE_ENV=test ./node_modules/.bin/mocha --ui bdd --reporter spec --colors --compilers js:babel-core/register server/tests --recursive", "test:watch": "yarn test -- --watch", "test:coverage": "cross-env NODE_ENV=test ./node_modules/.bin/istanbul cover _mocha -- --ui bdd --reporter spec --colors --compilers js:babel-core/register server/tests --recursive", @@ -53,10 +52,12 @@ "express-jwt": "5.1.0", "express-validation": "1.0.1", "express-winston": "2.1.2", + "faker": "false4.1.0", "helmet": "3.1.0", "http-status": "^0.2.0", "joi": "10.0.6", "jsonwebtoken": "7.1.9", + "lodash": "^4.17.5", "method-override": "^2.3.5", "moment": "false2.20.1", "mongoose": "4.7.4", @@ -70,7 +71,8 @@ "babel-plugin-add-module-exports": "0.2.1", "babel-preset-es2015": "6.16.0", "babel-preset-stage-2": "6.18.0", - "chai": "^3.4.1", + "chai": "false4.1.2", + "chai-http": "false3.0.0", "commitizen": "^2.9.2", "coveralls": "^2.11.6", "cross-env": "3.1.3", @@ -89,7 +91,7 @@ "gulp-util": "^3.0.7", "husky": "^0.13.1", "istanbul": "1.1.0-alpha.1", - "mocha": "3.2.0", + "mocha": "false5.0.1", "run-sequence": "^1.1.5", "supertest": "2.0.1", "supertest-as-promised": "4.0.2", diff --git a/server/controllers/operation.controller.js b/server/controllers/operation.controller.js new file mode 100644 index 0000000..6a0b6fb --- /dev/null +++ b/server/controllers/operation.controller.js @@ -0,0 +1,9 @@ +import {Operation} from "../models/operation.model"; + +function get(req, res) { + Operation.find({}, (err, operations) => { + res.json(operations) + }) +} + +export default { get } \ No newline at end of file diff --git a/server/models/base.schema.js b/server/models/base.schema.js new file mode 100644 index 0000000..fa4d1a5 --- /dev/null +++ b/server/models/base.schema.js @@ -0,0 +1,10 @@ +const BaseSchema = { + id: Number, + created_at: Date, + updated_at: Date, + created_by: Number, + modified_by: Number, + deleted_at: Date, +} + +export default BaseSchema diff --git a/server/models/commodity-category.model.js b/server/models/commodity-category.model.js new file mode 100644 index 0000000..db98326 --- /dev/null +++ b/server/models/commodity-category.model.js @@ -0,0 +1,33 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import {UOMCategorySchema, UOMCategory} from './uom-category.model' +import BaseSchema from './base.schema' +import faker from 'faker' + +const CommodityCategorySchema = new Schema(_.extend(BaseSchema, { + name: String, + code: String, + code_am: String, + description: String, + UOM_category: UOMCategorySchema +})) + +CommodityCategorySchema.statics = { + fake() { + return new CommodityCategory({ + name: faker.name.findName(), + code: faker.random.uuid(), + code_am: faker.random.uuid(), + description: faker.lorem.sentence(), + UOM_category: UOMCategory.fake() + }) + } +} + +const CommodityCategory = mongoose.model('CommodityCategory', CommodityCategorySchema) + +export default { + CommodityCategorySchema, + CommodityCategory +} \ No newline at end of file diff --git a/server/models/commodity.model.js b/server/models/commodity.model.js new file mode 100644 index 0000000..3abf448 --- /dev/null +++ b/server/models/commodity.model.js @@ -0,0 +1,53 @@ +import mongoose, {Schema} from 'mongoose' +import {CommodityCategorySchema, CommodityCategory} from './commodity-category.model' +import {UOMCategorySchema, UOMCategory} from './uom-category.model' +import _ from 'lodash' +import BaseSchema from './base.schema' +import faker from 'faker' + +const CommoditySchema = new Schema(_.extend(BaseSchema, { + name: String, + name_am: String, + long_name: String, + code: String, + code_am: String, + description: String, + hazardous: Boolean, + cold_storage: Boolean, + min_temprature: Number, + max_temprature: Number, + commodity_category: { + type: CommodityCategorySchema, + default: () => {} + }, + uom_category: { + type: UOMCategorySchema, + default: () => {} + } +})) + +CommoditySchema.statics = { + fake() { + return new Commodity({ + name: faker.random.word(), + name_am: faker.random.word(), + long_name: faker.random.word(), + code: faker.random.uuid(), + code_am: faker.random.uuid(), + description: faker.lorem.sentence(), + hazardous: faker.random.boolean(), + cold_storage: faker.random.boolean(), + min_temprature: faker.random.number(), + max_temprature: faker.random.number(), + commodity_category: CommodityCategory.fake(), + uom_category: UOMCategory.fake() + }) + } +} + +const Commodity = mongoose.model('Commodity', CommoditySchema) + +export default { + CommoditySchema, + Commodity +} \ No newline at end of file diff --git a/server/models/dispatch.model.js b/server/models/dispatch.model.js new file mode 100644 index 0000000..ec442e6 --- /dev/null +++ b/server/models/dispatch.model.js @@ -0,0 +1,66 @@ +import mongoose from 'mongoose' +import _ from 'lodash' +const Schema = mongoose.Schema +import BaseSchema from './base.schema' +import {FdpSchema, Fdp} from './fdp.model' +import {HubSchema, Hub} from './hub.model' +import {WarehouseSchema, Warehouse} from './warehouse.model' +import {TransporterSchema, Transporter} from './transporter.model' +import faker from 'faker' + +const DispatchSchema = new Schema(_.extend(BaseSchema, { + gin_no: String, + requisition_number: String, + dispatch_date: Date, + fdp: FdpSchema, + weight_bridge_ticket_number: String, + transporter: TransporterSchema, + plate_number: String, + trailer_plate_number: String, + drivers_name: String, + remark: String, + draft: Boolean, + deleted: Boolean, + deleted_at: Date, + hub: HubSchema, + warehouse: WarehouseSchema, + storekeeper_name: String, + dispatch_id_guid: String, + dispatched_date_ec: String, + dispatch_type_id: Number, + dispatch_type: Number +})) + +DispatchSchema.statics = { + fake() { + return new Dispatch({ + gin_no: faker.random.uuid(), + requisition_number: faker.random.uuid(), + dispatch_date: faker.date.recent(), + fdp: Fdp.fake(), + weight_bridge_ticket_number: faker.random.word(), + transporter: Transporter.fake(), + plate_number: faker.random.uuid(), + trailer_plate_number: faker.random.uuid(), + drivers_name: faker.name.findName(), + remark: faker.lorem.words(), + draft: faker.random.boolean(), + deleted: faker.random.boolean(), + deleted_at: faker.date.recent(), + hub: Hub.fake(), + warehouse: Warehouse.fake(), + storekeeper_name: faker.name.findName(), + dispatch_id_guid: faker.random.word(), + dispatch_date_ec: faker.random.word(), + dispatch_type_id: faker.random.number(), + dispatch_type: faker.random.number() + }) + } +} + +const Dispatch = mongoose.model('Dispatch', DispatchSchema) + +export default { + Dispatch, + DispatchSchema +} \ No newline at end of file diff --git a/server/models/fdp.model.js b/server/models/fdp.model.js new file mode 100644 index 0000000..f033c42 --- /dev/null +++ b/server/models/fdp.model.js @@ -0,0 +1,43 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import BaseSchema from './base.schema' +import {LocationSchema, LocationModel} from './location.model' +import faker from 'faker' + +const FdpSchema = new Schema(_.extend(BaseSchema, { + name: String, + description: String, + lat: Number, + lon: Number, + active: Boolean, + location: LocationSchema, + address: String, + woreda: String, + zone: String, + region: String +})) + +FdpSchema.statics = { + fake() { + return Fdp({ + name: faker.name.findName(), + description: faker.lorem.sentence(), + lat: faker.random.number(), + lon: faker.random.number(), + active: faker.random.boolean(), + location: LocationModel.fake(), + address: faker.address.streetAddress(), + woreda: faker.random.word(), + zone: faker.random.word(), + region: faker.random.word() + }) + } +} + +const Fdp = mongoose.model('Fdp', FdpSchema) + +export default { + Fdp, + FdpSchema +} \ No newline at end of file diff --git a/server/models/fscd-annual-plan.model.js b/server/models/fscd-annual-plan.model.js new file mode 100644 index 0000000..b52518e --- /dev/null +++ b/server/models/fscd-annual-plan.model.js @@ -0,0 +1,49 @@ +import mongoose from 'mongoose' +import BaseSchema from './base.schema' +import {RationSchema, Ration} from './ration.model' +import _ from 'lodash' +import faker from 'faker' +const Schema = mongoose.Schema + +const FscdAnnualPlanSchema = new Schema(_.extend(BaseSchema, { + name: { + type: String, + }, + code: { + type: String, + }, + year: { + type: Number, + }, + duration: { + type: Number, + }, + status: { + type: Number, + }, + archive: { + type: Boolean, + }, + ration: { + type: RationSchema + } +})) + +FscdAnnualPlanSchema.statics = { + fake() { + return new FscdAnnualPlan({ + name: faker.name.findName(), + code: faker.random.word(), + year: faker.random.number(), + duration: faker.random.number(), + status: faker.random.number(), + archive: faker.random.boolean(), + ration: Ration.fake() + }) + } +} +const FscdAnnualPlan = mongoose.model('FscdAnnualPlan', FscdAnnualPlanSchema) +export default { + FscdAnnualPlanSchema, + FscdAnnualPlan +} \ No newline at end of file diff --git a/server/models/hrd.model.js b/server/models/hrd.model.js new file mode 100644 index 0000000..0c3bcd7 --- /dev/null +++ b/server/models/hrd.model.js @@ -0,0 +1,46 @@ +import mongoose from 'mongoose' +import _ from 'lodash' +import BaseSchema from './base.schema' +import {SeasonSchema, Season} from './season.model' +import {RationSchema, Ration} from './ration.model' +import faker from 'faker' +const Schema = mongoose.Schema + +const HRDSchema = new Schema(_.extend(BaseSchema, { + year_gc: { + type: Number, + }, + status: { + type: Number, + }, + month_from: { + type: Number, + }, + duration: { + type: Number, + }, + season: { + type: SeasonSchema + }, + ration: { + type: RationSchema + } +})) + +HRDSchema.statics = { + fake() { + return new HRD({ + year_gc: faker.random.number(), + status: faker.random.number(), + month_from: faker.random.number(), + duration: faker.random.number(), + season: Season.fake(), + ration: Ration.fake() + }) + } +} +const HRD = mongoose.model('HRD', HRDSchema) +export default { + HRDSchema, + HRD +} \ No newline at end of file diff --git a/server/models/hub.model.js b/server/models/hub.model.js new file mode 100644 index 0000000..e765c96 --- /dev/null +++ b/server/models/hub.model.js @@ -0,0 +1,35 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import BaseSchema from './base.schema' +import {LocationSchema, LocationModel} from './location.model' +import faker from 'faker' + +const HubSchema = new Schema(_.extend(BaseSchema, { + name: String, + description: String, + lat: Number, + lon: Number, + location: LocationSchema, + address: String +})) + +HubSchema.statics = { + fake() { + return new Hub({ + name: faker.name.findName(), + description: faker.lorem.sentence(), + lat: faker.random.number(), + lon: faker.random.number(), + location: LocationModel.fake(), + address: faker.address.streetAddress() + }) + } +} + +const Hub = mongoose.model('Hub', HubSchema) + +export default { + HubSchema, + Hub +} \ No newline at end of file diff --git a/server/models/location.model.js b/server/models/location.model.js new file mode 100644 index 0000000..c65c0f2 --- /dev/null +++ b/server/models/location.model.js @@ -0,0 +1,30 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import BaseSchema from './base.schema' +import faker from 'faker' + +const LocationSchema = new Schema(_.extend(BaseSchema, { + name: String, + code: String, + ancestry: String, + location_type: Number, +})) + +LocationSchema.statics = { + fake() { + return new LocationModel({ + name: faker.name.findName(), + code: faker.random.uuid(), + ancestry: faker.random.word(), + location_type: faker.random.number() + }) + } +} + +const LocationModel = mongoose.model('LocationModel', LocationSchema) + +export default { + LocationSchema, + LocationModel +} \ No newline at end of file diff --git a/server/models/operation.model.js b/server/models/operation.model.js new file mode 100644 index 0000000..f6ca55b --- /dev/null +++ b/server/models/operation.model.js @@ -0,0 +1,92 @@ +const mongoose = require('mongoose') +const Schema = require('mongoose').Schema +// import mongoose, {Schema, model} from 'mongoose' +import _ from 'lodash' +import faker from 'faker' +import BaseModelObject from './base.schema' +import {ProgramSchema, Program} from './program.model' +import {RationSchema, Ration} from './ration.model' +import {HRDSchema, HRD} from './hrd.model' +import {FscdAnnualPlanSchema, FscdAnnualPlan} from './fscd-annual-plan.model' +import {RequisitionSchema, Requisition} from './requisition.model' +import {Dispatch, DispatchSchema} from './dispatch.model' +import {RegionalRequestSchema, RegionalRequest} from './regional-request.model' + +const OperationSchema = new Schema(_.extend(BaseModelObject, { + program: { + type: ProgramSchema, + }, + hrd: { + type: HRDSchema + }, + fscd_annual_plan: { + type: FscdAnnualPlanSchema + }, + name: { + type: String, + }, + description: { + type: String, + }, + year: { + type: Number, + }, + round: { + type: Number, + }, + month: { + type: Number, + }, + expected_start: { + type: Date, + }, + expected_end: { + type: Date, + }, + actual_start: { + type: Date, + }, + actual_end: { + type: Date, + }, + status: { + type: Number, + }, + ration: { + type: RationSchema + }, + requisitions: [RequisitionSchema], + dispatches: [DispatchSchema], + regional_requests: [RegionalRequestSchema] +})) + +OperationSchema.statics = { + fake() { + return new Operation({ + program: Program.fake(), + hrd: HRD.fake(), + fscd_annual_plan: FscdAnnualPlan.fake(), + name: faker.name.findName(), + description: faker.lorem.sentence(), + year: faker.random.number(), + round: faker.random.number(), + month: faker.random.number(), + expected_start: faker.date.recent(), + expected_end: faker.date.future(), + actual_start: faker.date.recent(), + actual_end: faker.date.future(), + status: faker.random.number(), + ration: Ration.fake(), + requisitions: Requisition.fake(3), + dispatches: Dispatch.fake(3), + regional_requests: RegionalRequest.fake(3) + }) + } +} + +const Operation = mongoose.model('Operation', OperationSchema) + +export default { + OperationSchema, + Operation +} \ No newline at end of file diff --git a/server/models/organization.model.js b/server/models/organization.model.js new file mode 100644 index 0000000..e7975bc --- /dev/null +++ b/server/models/organization.model.js @@ -0,0 +1,29 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import BaseSchema from './base.schema' +import {LocationSchema, Location} from './location.model' +import faker from 'faker' + +const OrganizationSchema = new Schema(_.extend(BaseSchema, { + name: String, + long_name: String, + description: String, +})) + +OrganizationSchema.statics = { + fake() { + return Organization({ + name: faker.company.companySuffix(), + long_name: faker.company.companyName(), + description: faker.lorem.sentence() + }) + } +} + +const Organization = mongoose.model('Organization', OrganizationSchema) + +export default { + Organization, + OrganizationSchema +} \ No newline at end of file diff --git a/server/models/program.model.js b/server/models/program.model.js new file mode 100644 index 0000000..8c7c36d --- /dev/null +++ b/server/models/program.model.js @@ -0,0 +1,34 @@ +const mongoose = require('mongoose') +const Schema = mongoose.Schema +import BaseSchema from './base.schema' +import _ from 'lodash' +import faker from 'faker' + +const ProgramSchema = new Schema(_.extend(BaseSchema, { + name: { + type: String + }, + code: { + type: String, + }, + description: { + type: String, + } +})) + +ProgramSchema.statics = { + fake() { + return new Program({ + name: faker.name.findName(), + code: faker.random.word(), + description: faker.lorem.sentence() + }) + } +} + +const Program = mongoose.model('Program', ProgramSchema) + +export default { + ProgramSchema, + Program +} \ No newline at end of file diff --git a/server/models/ration.model.js b/server/models/ration.model.js new file mode 100644 index 0000000..9d78f97 --- /dev/null +++ b/server/models/ration.model.js @@ -0,0 +1,32 @@ +import mongoose from 'mongoose' +import _ from 'lodash' +import BaseSchema from './base.schema' +import faker from 'faker' +const Schema = mongoose.Schema + +const RationSchema = new Schema(_.extend(BaseSchema, { + reference_no: { + type: String, + }, + description: { + type: String, + }, + current: { + type: Boolean, + } +})) + +RationSchema.statics = { + fake() { + return new Ration({ + reference_no: faker.random.uuid(), + description: faker.lorem.sentence(), + current: faker.random.boolean() + }) + } +} +const Ration = mongoose.model('Ration', RationSchema) +export default { + RationSchema, + Ration +} \ No newline at end of file diff --git a/server/models/regional-request.model.js b/server/models/regional-request.model.js new file mode 100644 index 0000000..1f9babb --- /dev/null +++ b/server/models/regional-request.model.js @@ -0,0 +1,38 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import faker from 'faker' +import {RationSchema, Ration} from './ration.model' +import {ProgramSchema, Program} from './program.model' +import BaseSchema from './base.schema' + +const RegionalRequestSchema = new Schema(_.extend(BaseSchema, { + reference_number: String, + region_id: Number, + ration: RationSchema, + requested_date: Date, + program: ProgramSchema, + remark: String, + generated: Boolean +})) + +RegionalRequestSchema.statics = { + fake() { + return new RegionalRequest({ + reference_number: faker.random.uuid(), + region_id: faker.random.number(), + ration: Ration.fake(), + requested_date: faker.date.recent(), + program: Program.fake(), + remark: faker.lorem.words(), + generated: faker.random.boolean() + }) + } +} + +const RegionalRequest = mongoose.model('RegionalRequest', RegionalRequestSchema) + +export default { + RegionalRequest, + RegionalRequestSchema +} \ No newline at end of file diff --git a/server/models/requisition.model.js b/server/models/requisition.model.js new file mode 100644 index 0000000..d215877 --- /dev/null +++ b/server/models/requisition.model.js @@ -0,0 +1,57 @@ +import mongoose, {Schema} from 'mongoose' +import {OperationSchema} from './operation.model' +import {CommoditySchema, Commodity} from './commodity.model' +import {RationSchema, Ration} from './ration.model' +import BaseSchema from './base.schema' +import faker from 'faker' +import _ from 'lodash' + +const RequisitionSchema = new Schema(_.extend(BaseSchema, { + id: Number, + requisition_no: String, + commodity: { + type: CommoditySchema, + default: () => {} + }, + region_id: Number, + zone_id: Number, + ration: { + type: RationSchema + }, + requested_by: String, + requested_on: Date, + status: Number, +})) + +RequisitionSchema.statics = { + fake(n) { + let _f = () => { + return new Requisition({ + requisition_no: faker.random.uuid(), + commodity: Commodity.fake(), + region_id: faker.random.number(), + zone_id: faker.random.number(), + ration: Ration.fake(), + requested_by: faker.name.findName(), + requested_on: faker.date.recent(), + status: faker.random.number(), + }) + } + + if(n) { + let fakes = [] + for(let i = 0; i < n; i++) { + fakes.push(_f()) + } + return fakes; + } + + } +} + +const Requisition = mongoose.model('Requisition', RequisitionSchema) + +export default { + RequisitionSchema, + Requisition +} \ No newline at end of file diff --git a/server/models/season.model.js b/server/models/season.model.js new file mode 100644 index 0000000..d85e026 --- /dev/null +++ b/server/models/season.model.js @@ -0,0 +1,37 @@ +import mongoose from 'mongoose' +import _ from 'lodash' +import BaseSchema from './base.schema' +import faker from 'faker' +const Schema = mongoose.Schema + +const SeasonSchema = new Schema(_.extend(BaseSchema, { + name: { + type: String, + }, + description: { + type: String, + }, + month_from: { + type: Date, + }, + month_to: { + type: Date, + } +})) + +SeasonSchema.statics = { + fake() { + return { + name: faker.name.findName(), + description: faker.lorem.sentence(), + month_from: faker.date.recent(), + month_to: faker.date.future() + } + } +} + +const Season = mongoose.model('Season', SeasonSchema) +export default { + SeasonSchema, + Season +} \ No newline at end of file diff --git a/server/models/transporter.model.js b/server/models/transporter.model.js new file mode 100644 index 0000000..48055be --- /dev/null +++ b/server/models/transporter.model.js @@ -0,0 +1,44 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import BaseSchema from './base.schema' +import faker from 'faker' + +const TransporterSchema = new Schema(_.extend(BaseSchema, { + name: String, + code: String, + vehicle_count: Number, + lift_capacity: Number, + capital: Number, + employees: Number, + contact: String, + contact_phone: String, + remark: String, + status: Number, + ownership_type_id: Number +})) + +TransporterSchema.statics = { + fake() { + return new Transporter({ + name: faker.name.findName(), + code: faker.random.uuid(), + vehicle_count: faker.random.number(), + lift_capacity: faker.random.number(), + capital: faker.random.number(), + employees: faker.random.number(), + contact: faker.name.findName(), + contact_phone: faker.phone.phoneNumber(), + remark: faker.lorem.words(), + status: faker.random.number(), + ownership_type_id: faker.random.number(), + }) + } +} + +const Transporter = mongoose.model('Transporter', TransporterSchema) + +export default { + Transporter, + TransporterSchema +} \ No newline at end of file diff --git a/server/models/uom-category.model.js b/server/models/uom-category.model.js new file mode 100644 index 0000000..fc3c861 --- /dev/null +++ b/server/models/uom-category.model.js @@ -0,0 +1,22 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import BaseSchema from './base.schema' +import faker from 'faker' + +const UOMCategorySchema = new Schema(_.extend(BaseSchema, { + name: String +})) + +UOMCategorySchema.statics = { + fake() { + return new UOMCategory({ + name: faker.name.findName() + }) + } +} +const UOMCategory = mongoose.model('UOMCategory', UOMCategorySchema) +export default { + UOMCategorySchema, + UOMCategory +} \ No newline at end of file diff --git a/server/models/warehouse.model.js b/server/models/warehouse.model.js new file mode 100644 index 0000000..c1af85c --- /dev/null +++ b/server/models/warehouse.model.js @@ -0,0 +1,41 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import BaseSchema from './base.schema' +import {HubSchema, Hub} from './hub.model' +import {LocationSchema, LocationModel} from './location.model' +import {OrganizationSchema, Organization} from './organization.model' +import faker from 'faker' + +const WarehouseSchema = new Schema(_.extend(BaseSchema, { + name: String, + description: String, + hub: HubSchema, + location: LocationSchema, + organization: OrganizationSchema, + lat: Number, + lon: Number, + address: String +})) + +WarehouseSchema.statics = { + fake() { + return Warehouse({ + name: faker.name.findName(), + description: faker.lorem.sentence(), + hub: Hub.fake(), + location: LocationModel.fake(), + organization: Organization.fake(), + lat: faker.random.number(), + lon: faker.random.number(), + address: faker.address.streetAddress() + }) + } +} + +const Warehouse = mongoose.model('Warehouse', WarehouseSchema) + +export default { + Warehouse, + WarehouseSchema +} \ No newline at end of file diff --git a/server/routes/index.route.js b/server/routes/index.route.js index 68fe489..36d26e8 100644 --- a/server/routes/index.route.js +++ b/server/routes/index.route.js @@ -2,6 +2,7 @@ import express from 'express'; import userRoutes from './user.route'; import authRoutes from './auth.route'; import ussdRoutes from './ussd.route'; +import operationRoutes from './operation.route' const router = express.Router(); // eslint-disable-line new-cap @@ -19,4 +20,6 @@ router.use('/auth', authRoutes); // mount ussd routes at /ussd router.use('/ussd', ussdRoutes) +router.use('/v1/operations', operationRoutes) + export default router; diff --git a/server/routes/operation.route.js b/server/routes/operation.route.js new file mode 100644 index 0000000..e40156b --- /dev/null +++ b/server/routes/operation.route.js @@ -0,0 +1,8 @@ +import express from 'express' +import operationCtrl from '../controllers/operation.controller.js' + +const router = express.Router() + +router.get('/', operationCtrl.get) + +export default router \ No newline at end of file diff --git a/server/tests/operations.test.js b/server/tests/operations.test.js new file mode 100644 index 0000000..c4e2b24 --- /dev/null +++ b/server/tests/operations.test.js @@ -0,0 +1,39 @@ +import chai, { expect } from 'chai' +import request from 'supertest-as-promised' +import httpStatus from 'http-status' +import app from '../../index' +import {Operation, OperationSchema} from '../models/operation.model' +import chaiHttp from 'chai-http' +import mongoose from 'mongoose' + +chai.config.includeStack = true; +chai.use(chaiHttp) +const should = chai.should() + +describe('Operation APIS', () => { + + beforeEach(done => { + Operation.remove({}, err => { + done() + }) + }) + + describe('# GET /api/v1/operations', () => { + it('should get all operations', (done) => { + let op = Operation.fake() + op.save((err, op) => { + if(err) throw err + + chai.request(app) + .get('/api/v1/operations') + .end((err, res) => { + res.should.have.status(200) + res.body.should.be.a('array') + res.body.length.should.be.eql(1) + + done() + }) + }) + }) + }) +}) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 587ea7a..1eb0f19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -809,6 +809,10 @@ balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + base64url@2.0.0, base64url@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" @@ -879,6 +883,13 @@ brace-expansion@^1.0.0: balanced-match "^0.4.1" concat-map "0.0.1" +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" @@ -954,13 +965,26 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chai@^3.4.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" +chai-http@false3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chai-http/-/chai-http-3.0.0.tgz#5460d8036e1f1a12b0b5b5cbd529e6dc1d31eb4b" + dependencies: + cookiejar "2.0.x" + is-ip "1.0.0" + methods "^1.1.2" + qs "^6.2.0" + superagent "^2.0.0" + +chai@false4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" dependencies: assertion-error "^1.0.1" - deep-eql "^0.1.3" - type-detect "^1.0.0" + check-error "^1.0.1" + deep-eql "^3.0.0" + get-func-name "^2.0.0" + pathval "^1.0.0" + type-detect "^4.0.0" chalk@*, chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" @@ -980,6 +1004,10 @@ chalk@~0.4.0: has-color "~0.1.0" strip-ansi "~0.1.0" +check-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + chokidar@^1.0.0, chokidar@^1.4.3: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" @@ -1055,7 +1083,11 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.9.0, commander@^2.8.1, commander@^2.9.0: +commander@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +commander@^2.8.1, commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -1185,6 +1217,10 @@ cookie@0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" +cookiejar@2.0.x: + version "2.0.6" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.0.6.tgz#0abf356ad00d1c5a219d88d44518046dd026acfe" + cookiejar@^2.0.6: version "2.1.0" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.0.tgz#86549689539b6d0e269b6637a304be508194d898" @@ -1306,7 +1342,7 @@ debug@2.X, debug@^2.1.1, debug@^2.2.0, debug@^2.4.5: dependencies: ms "0.7.2" -debug@^3.1.0: +debug@3.1.0, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: @@ -1320,11 +1356,11 @@ dedent@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.6.0.tgz#0e6da8f0ce52838ef5cec5c8f9396b0c1b64a3cb" -deep-eql@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" +deep-eql@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" dependencies: - type-detect "0.1.1" + type-detect "^4.0.0" deep-extend@~0.4.0: version "0.4.1" @@ -1394,9 +1430,9 @@ detect-newline@2.X: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" -diff@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" +diff@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" dns-prefetch-control@0.1.0: version "0.1.0" @@ -1791,6 +1827,10 @@ eyes@0.1.x: version "0.1.8" resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" +faker@false4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f" + fancy-log@^1.1.0, fancy-log@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" @@ -2078,6 +2118,10 @@ generate-object-property@^1.1.0: dependencies: is-property "^1.0.0" +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + getpass@^0.1.1: version "0.1.6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" @@ -2120,9 +2164,9 @@ glob2base@^0.0.12: dependencies: find-index "^0.1.1" -glob@7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" +glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -2131,14 +2175,14 @@ glob@7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" +glob@7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.2" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" @@ -2247,9 +2291,9 @@ graceful-fs@~1.2.0: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" +growl@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" gulp-babel@6.1.2: version "6.1.2" @@ -2386,6 +2430,10 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + has-gulplog@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" @@ -2411,6 +2459,10 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + helmet-csp@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.1.0.tgz#c0fbff8d9e8f3bbff2b83dc7fed3d47143184040" @@ -2596,6 +2648,10 @@ invariant@^2.2.0: dependencies: loose-envify "^1.0.0" +ip-regex@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd" + ipaddr.js@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.2.0.tgz#8aba49c9192799585bdd643e0ccb50e8ae777ba4" @@ -2667,6 +2723,12 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" +is-ip@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-ip/-/is-ip-1.0.0.tgz#2bb6959f797ccd6f9fdc812758bcbc87c4c59074" + dependencies: + ip-regex "^1.0.0" + is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: version "2.15.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" @@ -2935,10 +2997,6 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json3@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -3075,10 +3133,6 @@ lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" - lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" @@ -3139,14 +3193,6 @@ lodash.cond@^4.3.0: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" - dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.defaults@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" @@ -3257,6 +3303,10 @@ lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0, lod version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^4.17.5: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + lodash@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" @@ -3323,7 +3373,7 @@ method-override@^2.3.5: parseurl "~1.3.1" vary "~1.1.0" -methods@1.x, methods@^1.1.1, methods@~1.1.2: +methods@1.x, methods@^1.1.1, methods@^1.1.2, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -3371,6 +3421,12 @@ minimatch@^2.0.1: dependencies: brace-expansion "^1.0.0" +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + minimatch@~0.2.11: version "0.2.14" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" @@ -3392,21 +3448,20 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" -mocha@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" +mocha@false5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.1.tgz#759b62c836b0732382a62b6b1fb245ec1bc943ac" dependencies: browser-stdout "1.3.0" - commander "2.9.0" - debug "2.2.0" - diff "1.4.0" + commander "2.11.0" + debug "3.1.0" + diff "3.3.1" escape-string-regexp "1.0.5" - glob "7.0.5" - growl "1.9.2" - json3 "3.3.2" - lodash.create "3.1.1" + glob "7.1.2" + growl "1.10.3" + he "1.1.1" mkdirp "0.5.1" - supports-color "3.1.2" + supports-color "4.4.0" moment@2.x.x: version "2.17.1" @@ -3773,6 +3828,10 @@ path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" +pathval@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -3866,6 +3925,10 @@ qs@6.2.0, qs@^6.1.0, qs@~6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" +qs@^6.2.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" @@ -4491,11 +4554,11 @@ supertest@2.0.1: methods "1.x" superagent "^2.0.0" -supports-color@3.1.2, supports-color@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" +supports-color@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" dependencies: - has-flag "^1.0.0" + has-flag "^2.0.0" supports-color@^0.2.0: version "0.2.0" @@ -4505,6 +4568,12 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" +supports-color@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + table@^3.7.8: version "3.8.3" resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" @@ -4625,13 +4694,9 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" - -type-detect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" +type-detect@^4.0.0: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" type-is@~1.6.13: version "1.6.14" From 81a9bee8e1362b7fede0ab5ff227188ae40d56e1 Mon Sep 17 00:00:00 2001 From: Merhawi Fissehaye Date: Thu, 18 Oct 2018 14:53:20 +0300 Subject: [PATCH 5/5] commit before backup --- config/mongoose-faker-plugin.js | 9 +++ index.js | 4 ++ package.json | 1 + server/controllers/bid.controller.js | 7 ++ server/controllers/operation.controller.js | 6 +- server/controllers/posting.controller.js | 7 ++ server/models/account.model.js | 32 +++++++++ server/models/base.schema.js | 5 +- server/models/bid.model.js | 47 +++++++++++++ server/models/commodity-category.model.js | 9 +-- server/models/commodity.model.js | 9 +-- server/models/contract.model.js | 33 ++++++++++ server/models/dispatch.model.js | 9 +-- server/models/fdp.model.js | 9 +-- server/models/fscd-annual-plan.model.js | 8 +-- server/models/hrd.model.js | 9 +-- server/models/hub.model.js | 9 +-- server/models/id-name.model.js | 30 +++++++++ server/models/journal.model.js | 32 +++++++++ server/models/location.model.js | 9 +-- server/models/offer.model.js | 35 ++++++++++ server/models/operation.model.js | 64 +++++------------- server/models/organization.model.js | 9 +-- server/models/posting.model.js | 77 ++++++++++++++++++++++ server/models/program.model.js | 9 +-- server/models/quote.model.js | 40 +++++++++++ server/models/ration.model.js | 8 +-- server/models/regional-request.model.js | 9 +-- server/models/requisition.model.js | 9 +-- server/models/season.model.js | 8 +-- server/models/transporter.model.js | 9 +-- server/models/uom-category.model.js | 8 +-- server/models/warehouse.model.js | 40 ++++++----- server/routes/bid.route.js | 8 +++ server/routes/index.route.js | 8 ++- server/routes/operation.route.js | 6 +- server/routes/posting.route.js | 8 +++ server/tests/bids.test.js | 39 +++++++++++ server/tests/operations.test.js | 2 +- server/tests/postings.test.js | 39 +++++++++++ test.js | 10 +++ yarn.lock | 4 ++ 42 files changed, 549 insertions(+), 184 deletions(-) create mode 100644 config/mongoose-faker-plugin.js create mode 100644 server/controllers/bid.controller.js create mode 100644 server/controllers/posting.controller.js create mode 100644 server/models/account.model.js create mode 100644 server/models/bid.model.js create mode 100644 server/models/contract.model.js create mode 100644 server/models/id-name.model.js create mode 100644 server/models/journal.model.js create mode 100644 server/models/offer.model.js create mode 100644 server/models/posting.model.js create mode 100644 server/models/quote.model.js create mode 100644 server/routes/bid.route.js create mode 100644 server/routes/posting.route.js create mode 100644 server/tests/bids.test.js create mode 100644 server/tests/postings.test.js create mode 100644 test.js diff --git a/config/mongoose-faker-plugin.js b/config/mongoose-faker-plugin.js new file mode 100644 index 0000000..2b76f3a --- /dev/null +++ b/config/mongoose-faker-plugin.js @@ -0,0 +1,9 @@ +import mongoose from 'mongoose' + +export function fakerPlugin(schema, options) { + schema.static('fake', function (modelName) { + let m = mongoose.model(modelName); + console.log(schema.path('requisitions').casterConstructor) + return m; + }) +} \ No newline at end of file diff --git a/index.js b/index.js index 01e808c..e07d75c 100644 --- a/index.js +++ b/index.js @@ -4,6 +4,7 @@ import util from 'util'; // config should be imported before importing any other file import config from './config/config'; import app from './config/express'; +import {fakePlugin} from './config/mongoose-faker-plugin' const debug = require('debug')('express-mongoose-es6-rest-api:index'); @@ -27,6 +28,8 @@ if (config.MONGOOSE_DEBUG) { }); } +mongoose.plugin(fakePlugin) + // module.parent check is required to support mocha watch // src: https://github.com/mochajs/mocha/issues/1912 if (!module.parent) { @@ -36,4 +39,5 @@ if (!module.parent) { }); } + export default app; diff --git a/package.json b/package.json index 22efcdd..44c6eb4 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "method-override": "^2.3.5", "moment": "false2.20.1", "mongoose": "4.7.4", + "mongoose-fakery": "false0.1.7", "morgan": "1.7.0", "ussd-menu-builder": "false1.0.0", "winston": "2.3.0" diff --git a/server/controllers/bid.controller.js b/server/controllers/bid.controller.js new file mode 100644 index 0000000..ae50301 --- /dev/null +++ b/server/controllers/bid.controller.js @@ -0,0 +1,7 @@ +import {Bid} from "../models/bid.model"; + +export function get(req, res) { + Bid.find({}, (err, bids) => { + res.json(bids) + }) +} \ No newline at end of file diff --git a/server/controllers/operation.controller.js b/server/controllers/operation.controller.js index 6a0b6fb..92f6a67 100644 --- a/server/controllers/operation.controller.js +++ b/server/controllers/operation.controller.js @@ -1,9 +1,7 @@ import {Operation} from "../models/operation.model"; -function get(req, res) { +export function get(req, res) { Operation.find({}, (err, operations) => { res.json(operations) }) -} - -export default { get } \ No newline at end of file +} \ No newline at end of file diff --git a/server/controllers/posting.controller.js b/server/controllers/posting.controller.js new file mode 100644 index 0000000..b4775ca --- /dev/null +++ b/server/controllers/posting.controller.js @@ -0,0 +1,7 @@ +import {Posting} from "../models/posting.model"; + +export function get(req, res) { + Posting.find({}, (err, postings) => { + res.json(postings) + }) +} \ No newline at end of file diff --git a/server/models/account.model.js b/server/models/account.model.js new file mode 100644 index 0000000..86e3668 --- /dev/null +++ b/server/models/account.model.js @@ -0,0 +1,32 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import BaseSchema from './base.schema' +import _ from 'lodash' +import faker from 'faker' + +export const AccountSchema = new Schema(_.extend(BaseSchema, { + name: String, + code: Number, + description: String, +})) + +AccountSchema.statics = { + fake(n = 1) { + let _faker = () => { + return new Account({ + name: faker.name.findName(), + code: faker.random.number(), + description: faker.lorem.sentences + }) + } + + if(n == 1) return _faker() + let accounts = [] + for(let i = 0; i < n; i++) { + accounts.push(_faker()) + } + return accounts + } +} + +export const Account = mongoose.model('Account', AccountSchema) \ No newline at end of file diff --git a/server/models/base.schema.js b/server/models/base.schema.js index fa4d1a5..72dc655 100644 --- a/server/models/base.schema.js +++ b/server/models/base.schema.js @@ -1,10 +1,9 @@ -const BaseSchema = { +export const BaseSchema = { id: Number, created_at: Date, updated_at: Date, created_by: Number, modified_by: Number, + deleted: Boolean, deleted_at: Date, } - -export default BaseSchema diff --git a/server/models/bid.model.js b/server/models/bid.model.js new file mode 100644 index 0000000..64c43e0 --- /dev/null +++ b/server/models/bid.model.js @@ -0,0 +1,47 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import faker from 'faker' +import BaseSchema from './base.schema' +import {Quote, QuoteSchema} from './quote.model' + +export const BidSchema = new Schema(_.extend(BaseSchema, { + framework_tender_id: Number, + region_id: Number, + bid_number: Number, + bid_bond_format: Number, + start_date: Date, + closing_date: Date, + opening_date: Date, + status: Number, + remark: String, + quotes: [QuoteSchema] +})) + +BidSchema.statics = { + fake(n = 1) { + let _fake = () => { + return new Bid({ + framework_tender_id: faker.random.number(), + region_id: faker.random.number(), + bid_number: faker.random.number(), + bid_bond_format: faker.random.number(), + start_date: faker.date.recent(), + closing_date: faker.date.recent(), + opening_date: faker.date.recent(), + status: faker.random.number(), + remark: faker.lorem.sentences(), + quotes: Quote.fake(3) + }) + } + + if(n == 1) return _fake() + let bids = [] + for(let i = 0; i < n; i++) { + bids.push(_fake()) + } + return bids + } +} + +export const Bid = mongoose.model('Bid', BidSchema) \ No newline at end of file diff --git a/server/models/commodity-category.model.js b/server/models/commodity-category.model.js index db98326..77114c9 100644 --- a/server/models/commodity-category.model.js +++ b/server/models/commodity-category.model.js @@ -5,7 +5,7 @@ import {UOMCategorySchema, UOMCategory} from './uom-category.model' import BaseSchema from './base.schema' import faker from 'faker' -const CommodityCategorySchema = new Schema(_.extend(BaseSchema, { +export const CommodityCategorySchema = new Schema(_.extend(BaseSchema, { name: String, code: String, code_am: String, @@ -25,9 +25,4 @@ CommodityCategorySchema.statics = { } } -const CommodityCategory = mongoose.model('CommodityCategory', CommodityCategorySchema) - -export default { - CommodityCategorySchema, - CommodityCategory -} \ No newline at end of file +export const CommodityCategory = mongoose.model('CommodityCategory', CommodityCategorySchema) \ No newline at end of file diff --git a/server/models/commodity.model.js b/server/models/commodity.model.js index 3abf448..bda3205 100644 --- a/server/models/commodity.model.js +++ b/server/models/commodity.model.js @@ -5,7 +5,7 @@ import _ from 'lodash' import BaseSchema from './base.schema' import faker from 'faker' -const CommoditySchema = new Schema(_.extend(BaseSchema, { +export const CommoditySchema = new Schema(_.extend(BaseSchema, { name: String, name_am: String, long_name: String, @@ -45,9 +45,4 @@ CommoditySchema.statics = { } } -const Commodity = mongoose.model('Commodity', CommoditySchema) - -export default { - CommoditySchema, - Commodity -} \ No newline at end of file +export const Commodity = mongoose.model('Commodity', CommoditySchema) \ No newline at end of file diff --git a/server/models/contract.model.js b/server/models/contract.model.js new file mode 100644 index 0000000..7548193 --- /dev/null +++ b/server/models/contract.model.js @@ -0,0 +1,33 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import faker from 'faker' +import BaseSchema from './base.schema' +import {IdName, IdNameSchema} from './id-name.model' + +export const ContractSchema = new Schema(_.extend(BaseSchema, { + contract_no: Number, + transporter: IdNameSchema, + description: String +})) + +ContractSchema.statics = { + fake(n = 1) { + let _fake = () => { + return new Contract({ + contract_no: faker.random.number(), + transporter: IdName.fake(), + description: faker.lorem.sentences() + }) + } + + if(n == 1) return _fake() + let contracts = [] + for(let i = 0; i < n; i++) { + contracts.push(_fake()) + } + return contracts + } +} + +export const Contract = mongoose.model('Contract', ContractSchema) \ No newline at end of file diff --git a/server/models/dispatch.model.js b/server/models/dispatch.model.js index ec442e6..5d11a71 100644 --- a/server/models/dispatch.model.js +++ b/server/models/dispatch.model.js @@ -8,7 +8,7 @@ import {WarehouseSchema, Warehouse} from './warehouse.model' import {TransporterSchema, Transporter} from './transporter.model' import faker from 'faker' -const DispatchSchema = new Schema(_.extend(BaseSchema, { +export const DispatchSchema = new Schema(_.extend(BaseSchema, { gin_no: String, requisition_number: String, dispatch_date: Date, @@ -58,9 +58,4 @@ DispatchSchema.statics = { } } -const Dispatch = mongoose.model('Dispatch', DispatchSchema) - -export default { - Dispatch, - DispatchSchema -} \ No newline at end of file +export const Dispatch = mongoose.model('Dispatch', DispatchSchema) \ No newline at end of file diff --git a/server/models/fdp.model.js b/server/models/fdp.model.js index f033c42..84333fd 100644 --- a/server/models/fdp.model.js +++ b/server/models/fdp.model.js @@ -5,7 +5,7 @@ import BaseSchema from './base.schema' import {LocationSchema, LocationModel} from './location.model' import faker from 'faker' -const FdpSchema = new Schema(_.extend(BaseSchema, { +export const FdpSchema = new Schema(_.extend(BaseSchema, { name: String, description: String, lat: Number, @@ -35,9 +35,4 @@ FdpSchema.statics = { } } -const Fdp = mongoose.model('Fdp', FdpSchema) - -export default { - Fdp, - FdpSchema -} \ No newline at end of file +export const Fdp = mongoose.model('Fdp', FdpSchema) \ No newline at end of file diff --git a/server/models/fscd-annual-plan.model.js b/server/models/fscd-annual-plan.model.js index b52518e..c037ea7 100644 --- a/server/models/fscd-annual-plan.model.js +++ b/server/models/fscd-annual-plan.model.js @@ -5,7 +5,7 @@ import _ from 'lodash' import faker from 'faker' const Schema = mongoose.Schema -const FscdAnnualPlanSchema = new Schema(_.extend(BaseSchema, { +export const FscdAnnualPlanSchema = new Schema(_.extend(BaseSchema, { name: { type: String, }, @@ -42,8 +42,4 @@ FscdAnnualPlanSchema.statics = { }) } } -const FscdAnnualPlan = mongoose.model('FscdAnnualPlan', FscdAnnualPlanSchema) -export default { - FscdAnnualPlanSchema, - FscdAnnualPlan -} \ No newline at end of file +export const FscdAnnualPlan = mongoose.model('FscdAnnualPlan', FscdAnnualPlanSchema) \ No newline at end of file diff --git a/server/models/hrd.model.js b/server/models/hrd.model.js index 0c3bcd7..e3676d6 100644 --- a/server/models/hrd.model.js +++ b/server/models/hrd.model.js @@ -6,7 +6,7 @@ import {RationSchema, Ration} from './ration.model' import faker from 'faker' const Schema = mongoose.Schema -const HRDSchema = new Schema(_.extend(BaseSchema, { +export const HRDSchema = new Schema(_.extend(BaseSchema, { year_gc: { type: Number, }, @@ -39,8 +39,5 @@ HRDSchema.statics = { }) } } -const HRD = mongoose.model('HRD', HRDSchema) -export default { - HRDSchema, - HRD -} \ No newline at end of file + +export const HRD = mongoose.model('HRD', HRDSchema) \ No newline at end of file diff --git a/server/models/hub.model.js b/server/models/hub.model.js index e765c96..1c57425 100644 --- a/server/models/hub.model.js +++ b/server/models/hub.model.js @@ -5,7 +5,7 @@ import BaseSchema from './base.schema' import {LocationSchema, LocationModel} from './location.model' import faker from 'faker' -const HubSchema = new Schema(_.extend(BaseSchema, { +export const HubSchema = new Schema(_.extend(BaseSchema, { name: String, description: String, lat: Number, @@ -27,9 +27,4 @@ HubSchema.statics = { } } -const Hub = mongoose.model('Hub', HubSchema) - -export default { - HubSchema, - Hub -} \ No newline at end of file +export const Hub = mongoose.model('Hub', HubSchema) \ No newline at end of file diff --git a/server/models/id-name.model.js b/server/models/id-name.model.js new file mode 100644 index 0000000..9b6ce8e --- /dev/null +++ b/server/models/id-name.model.js @@ -0,0 +1,30 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import BaseSchema from './base.schema' +import _ from 'lodash' +import faker from 'faker' + +export const IdNameSchema = new Schema(_.extend(BaseSchema, { + id: Number, + name: String +})) + +IdNameSchema.statics = { + fake(n = 1) { + let _fake = () => { + return new IdName({ + id: faker.random.number(), + name: faker.name.findName() + }) + } + + if(n == 1) return _fake() + let idNames = [] + for(let i = 0; i < n; i++) { + idNames.push(_fake()) + } + return idNames + } +} + +export const IdName = mongoose.model('IdName', IdNameSchema) \ No newline at end of file diff --git a/server/models/journal.model.js b/server/models/journal.model.js new file mode 100644 index 0000000..b310ff9 --- /dev/null +++ b/server/models/journal.model.js @@ -0,0 +1,32 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import BaseSchema from './base.schema' +import _ from 'lodash' +import faker from 'faker' + +export const JournalSchema = new Schema(_.extend(BaseSchema, { + name: String, + description: String, + code: Number +})) + +JournalSchema.statics = { + fake(n = 1) { + let _faker = () => { + return new Journal({ + name: faker.name.findName(), + description: faker.lorem.sentences(), + code: faker.random.number() + }) + } + + if(n == 1) return _faker() + let journals = [] + for(let i = 0; i < n; i++) { + journals.push(_faker()) + } + return journals + } +} + +export const Journal = mongoose.model('Journal', JournalSchema) \ No newline at end of file diff --git a/server/models/location.model.js b/server/models/location.model.js index c65c0f2..58925d4 100644 --- a/server/models/location.model.js +++ b/server/models/location.model.js @@ -4,7 +4,7 @@ import _ from 'lodash' import BaseSchema from './base.schema' import faker from 'faker' -const LocationSchema = new Schema(_.extend(BaseSchema, { +export const LocationSchema = new Schema(_.extend(BaseSchema, { name: String, code: String, ancestry: String, @@ -22,9 +22,4 @@ LocationSchema.statics = { } } -const LocationModel = mongoose.model('LocationModel', LocationSchema) - -export default { - LocationSchema, - LocationModel -} \ No newline at end of file +export const LocationModel = mongoose.model('LocationModel', LocationSchema) \ No newline at end of file diff --git a/server/models/offer.model.js b/server/models/offer.model.js new file mode 100644 index 0000000..b1b8874 --- /dev/null +++ b/server/models/offer.model.js @@ -0,0 +1,35 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import faker from 'faker' +import BaseSchema from './base.schema' +import {IdName, IdNameSchema} from './id-name.model' + +export const OfferSchema = new Schema(_.extend(BaseSchema, { + transporter: IdNameSchema, + store: IdNameSchema, + destination_id: Number, + tarrif_amount: Number +})) + +OfferSchema.statics = { + fake(n = 1) { + let _fake = () => { + return new Offer({ + transporter: IdName.fake(), + store: IdName.fake(), + destination_id: faker.random.number(), + tarrif_amount: faker.random.number() + }) + } + + if(n == 1) return _fake() + let offers = [] + for(let i = 0; i < n; i++) { + offers.push(_fake()) + } + return offers + } +} + +export const Offer = mongoose.model('Offer', OfferSchema) \ No newline at end of file diff --git a/server/models/operation.model.js b/server/models/operation.model.js index f6ca55b..ad0f38e 100644 --- a/server/models/operation.model.js +++ b/server/models/operation.model.js @@ -3,6 +3,7 @@ const Schema = require('mongoose').Schema // import mongoose, {Schema, model} from 'mongoose' import _ from 'lodash' import faker from 'faker' +import {fakerPlugin} from '../../config/mongoose-faker-plugin' import BaseModelObject from './base.schema' import {ProgramSchema, Program} from './program.model' import {RationSchema, Ration} from './ration.model' @@ -12,52 +13,26 @@ import {RequisitionSchema, Requisition} from './requisition.model' import {Dispatch, DispatchSchema} from './dispatch.model' import {RegionalRequestSchema, RegionalRequest} from './regional-request.model' -const OperationSchema = new Schema(_.extend(BaseModelObject, { +export const OperationSchema = new Schema(_.extend(BaseModelObject, { program: { type: ProgramSchema, }, - hrd: { - type: HRDSchema - }, - fscd_annual_plan: { - type: FscdAnnualPlanSchema - }, - name: { - type: String, - }, - description: { - type: String, - }, - year: { - type: Number, - }, - round: { - type: Number, - }, - month: { - type: Number, - }, - expected_start: { - type: Date, - }, - expected_end: { - type: Date, - }, - actual_start: { - type: Date, - }, - actual_end: { - type: Date, - }, - status: { - type: Number, - }, - ration: { - type: RationSchema - }, + hrd: HRDSchema, + fscd_annual_plan: FscdAnnualPlanSchema, + name: String, + description: String, + year: Number, + round: Number, + month: Number, + expected_start: Date, + expected_end: Date, + actual_start: Date, + actual_end: Date, + status: Number, + ration: RationSchema, requisitions: [RequisitionSchema], dispatches: [DispatchSchema], - regional_requests: [RegionalRequestSchema] + regional_requests: [RegionalRequestSchema], })) OperationSchema.statics = { @@ -84,9 +59,4 @@ OperationSchema.statics = { } } -const Operation = mongoose.model('Operation', OperationSchema) - -export default { - OperationSchema, - Operation -} \ No newline at end of file +export const Operation = mongoose.model('Operation', OperationSchema) diff --git a/server/models/organization.model.js b/server/models/organization.model.js index e7975bc..c9f5102 100644 --- a/server/models/organization.model.js +++ b/server/models/organization.model.js @@ -5,7 +5,7 @@ import BaseSchema from './base.schema' import {LocationSchema, Location} from './location.model' import faker from 'faker' -const OrganizationSchema = new Schema(_.extend(BaseSchema, { +export const OrganizationSchema = new Schema(_.extend(BaseSchema, { name: String, long_name: String, description: String, @@ -21,9 +21,4 @@ OrganizationSchema.statics = { } } -const Organization = mongoose.model('Organization', OrganizationSchema) - -export default { - Organization, - OrganizationSchema -} \ No newline at end of file +export const Organization = mongoose.model('Organization', OrganizationSchema) \ No newline at end of file diff --git a/server/models/posting.model.js b/server/models/posting.model.js new file mode 100644 index 0000000..eef7257 --- /dev/null +++ b/server/models/posting.model.js @@ -0,0 +1,77 @@ +import mongoose from 'mongoose' +import _ from 'lodash' +import {BaseSchema} from './base.schema' +import faker from 'faker' +import {Warehouse, WarehouseSchema} from './warehouse.model' +import {Account, AccountSchema} from './account.model' +import {Journal, JournalSchema} from './journal.model' +import {IdName, IdNameSchema} from './id-name.model' +const Schema = mongoose.Schema + +export const PostingSchema = new Schema(_.extend(BaseSchema, { + posting_code: String, + document_type: Number, + document_id: Number, + posted: Boolean, + reveresed_posting_id: Number, + posting_type: Number, + warehouse: WarehouseSchema, + account: AccountSchema, + journal: JournalSchema, + donor: IdNameSchema, + hub: IdNameSchema, + store: IdNameSchema, + // stack: // todo: understand this + project: IdNameSchema, + batch_id: Number, + program: IdNameSchema, + operation: IdNameSchema, + commodity: IdNameSchema, + commodity_category: IdNameSchema, + quantity: Number, + region_id: Number, + zone_id: Number, + woreda_id: Number, + fdp: IdNameSchema, +})) + +PostingSchema.statics = { + fake(n = 1) { + let _faker = () => { + return new Posting({ + posting_code: faker.random.uuid(), + document_type: faker.random.number(), + document_id: faker.random.number(), + posted: faker.random.boolean(), + reversed_posting_id: faker.random.number(), + posting_type: faker.random.number(), + warehouse: Warehouse.fake(), + account: Account.fake(), + journal: Journal.fake(), + donor: IdName.fake(), + hub: IdName.fake(), + store: IdName.fake(), + project: IdName.fake(), + batch_id: faker.random.number(), + program: IdName.fake(), + operation: IdName.fake(), + commodity: IdName.fake(), + commodity_category: IdName.fake(), + quantity: faker.random.number(), + region_id: faker.random.number(), + zone_id: faker.random.number(), + woreda_id: faker.random.number(), + fdp: IdName.fake() + }) + } + + if(n == 1) return _faker() + let postings = [] + for(let i = 0; i < n; i++) { + postings.push(_faker()) + } + return postings + } +} + +export const Posting = mongoose.model('Posting', PostingSchema) \ No newline at end of file diff --git a/server/models/program.model.js b/server/models/program.model.js index 8c7c36d..9c3df00 100644 --- a/server/models/program.model.js +++ b/server/models/program.model.js @@ -4,7 +4,7 @@ import BaseSchema from './base.schema' import _ from 'lodash' import faker from 'faker' -const ProgramSchema = new Schema(_.extend(BaseSchema, { +export const ProgramSchema = new Schema(_.extend(BaseSchema, { name: { type: String }, @@ -26,9 +26,4 @@ ProgramSchema.statics = { } } -const Program = mongoose.model('Program', ProgramSchema) - -export default { - ProgramSchema, - Program -} \ No newline at end of file +export const Program = mongoose.model('Program', ProgramSchema) \ No newline at end of file diff --git a/server/models/quote.model.js b/server/models/quote.model.js new file mode 100644 index 0000000..bae0f9e --- /dev/null +++ b/server/models/quote.model.js @@ -0,0 +1,40 @@ +import mongoose from 'mongoose' +const Schema = mongoose.Schema +import _ from 'lodash' +import faker from 'faker' +import BaseSchema from './base.schema' +import {Contract, ContractSchema} from './contract.model' +import {Offer, OfferSchema} from './offer.model' + +export const QuoteSchema = new Schema(_.extend(BaseSchema, { + store_id: Number, + destination_id: Number, + tarrif_quote: Number, + remark: String, + contracts: [ContractSchema], + offer: OfferSchema, +})) + +QuoteSchema.statics = { + fake(n = 1) { + let _fake = () => { + return new Quote({ + store_id: faker.random.number(), + destination_id: faker.random.number(), + tarrif_quote: faker.random.number(), + remark: faker.lorem.sentences(), + contracts: Contract.fake(3), + offer: Offer.fake() + }) + } + + if(n == 1) return _fake() + let quotes = [] + for(let i = 1; i < n; i++) { + quotes.push(_fake()) + } + return quotes + } +} + +export const Quote = mongoose.model('Quote', QuoteSchema) \ No newline at end of file diff --git a/server/models/ration.model.js b/server/models/ration.model.js index 9d78f97..809fa5a 100644 --- a/server/models/ration.model.js +++ b/server/models/ration.model.js @@ -4,7 +4,7 @@ import BaseSchema from './base.schema' import faker from 'faker' const Schema = mongoose.Schema -const RationSchema = new Schema(_.extend(BaseSchema, { +export const RationSchema = new Schema(_.extend(BaseSchema, { reference_no: { type: String, }, @@ -25,8 +25,4 @@ RationSchema.statics = { }) } } -const Ration = mongoose.model('Ration', RationSchema) -export default { - RationSchema, - Ration -} \ No newline at end of file +export const Ration = mongoose.model('Ration', RationSchema) \ No newline at end of file diff --git a/server/models/regional-request.model.js b/server/models/regional-request.model.js index 1f9babb..06153b5 100644 --- a/server/models/regional-request.model.js +++ b/server/models/regional-request.model.js @@ -6,7 +6,7 @@ import {RationSchema, Ration} from './ration.model' import {ProgramSchema, Program} from './program.model' import BaseSchema from './base.schema' -const RegionalRequestSchema = new Schema(_.extend(BaseSchema, { +export const RegionalRequestSchema = new Schema(_.extend(BaseSchema, { reference_number: String, region_id: Number, ration: RationSchema, @@ -30,9 +30,4 @@ RegionalRequestSchema.statics = { } } -const RegionalRequest = mongoose.model('RegionalRequest', RegionalRequestSchema) - -export default { - RegionalRequest, - RegionalRequestSchema -} \ No newline at end of file +export const RegionalRequest = mongoose.model('RegionalRequest', RegionalRequestSchema) \ No newline at end of file diff --git a/server/models/requisition.model.js b/server/models/requisition.model.js index d215877..86c4f26 100644 --- a/server/models/requisition.model.js +++ b/server/models/requisition.model.js @@ -6,7 +6,7 @@ import BaseSchema from './base.schema' import faker from 'faker' import _ from 'lodash' -const RequisitionSchema = new Schema(_.extend(BaseSchema, { +export const RequisitionSchema = new Schema(_.extend(BaseSchema, { id: Number, requisition_no: String, commodity: { @@ -49,9 +49,4 @@ RequisitionSchema.statics = { } } -const Requisition = mongoose.model('Requisition', RequisitionSchema) - -export default { - RequisitionSchema, - Requisition -} \ No newline at end of file +export const Requisition = mongoose.model('Requisition', RequisitionSchema) \ No newline at end of file diff --git a/server/models/season.model.js b/server/models/season.model.js index d85e026..8665369 100644 --- a/server/models/season.model.js +++ b/server/models/season.model.js @@ -4,7 +4,7 @@ import BaseSchema from './base.schema' import faker from 'faker' const Schema = mongoose.Schema -const SeasonSchema = new Schema(_.extend(BaseSchema, { +export const SeasonSchema = new Schema(_.extend(BaseSchema, { name: { type: String, }, @@ -30,8 +30,4 @@ SeasonSchema.statics = { } } -const Season = mongoose.model('Season', SeasonSchema) -export default { - SeasonSchema, - Season -} \ No newline at end of file +export const Season = mongoose.model('Season', SeasonSchema) \ No newline at end of file diff --git a/server/models/transporter.model.js b/server/models/transporter.model.js index 48055be..2cbb7f8 100644 --- a/server/models/transporter.model.js +++ b/server/models/transporter.model.js @@ -4,7 +4,7 @@ import _ from 'lodash' import BaseSchema from './base.schema' import faker from 'faker' -const TransporterSchema = new Schema(_.extend(BaseSchema, { +export const TransporterSchema = new Schema(_.extend(BaseSchema, { name: String, code: String, vehicle_count: Number, @@ -36,9 +36,4 @@ TransporterSchema.statics = { } } -const Transporter = mongoose.model('Transporter', TransporterSchema) - -export default { - Transporter, - TransporterSchema -} \ No newline at end of file +export const Transporter = mongoose.model('Transporter', TransporterSchema) \ No newline at end of file diff --git a/server/models/uom-category.model.js b/server/models/uom-category.model.js index fc3c861..2637604 100644 --- a/server/models/uom-category.model.js +++ b/server/models/uom-category.model.js @@ -4,7 +4,7 @@ import _ from 'lodash' import BaseSchema from './base.schema' import faker from 'faker' -const UOMCategorySchema = new Schema(_.extend(BaseSchema, { +export const UOMCategorySchema = new Schema(_.extend(BaseSchema, { name: String })) @@ -15,8 +15,4 @@ UOMCategorySchema.statics = { }) } } -const UOMCategory = mongoose.model('UOMCategory', UOMCategorySchema) -export default { - UOMCategorySchema, - UOMCategory -} \ No newline at end of file +export const UOMCategory = mongoose.model('UOMCategory', UOMCategorySchema) \ No newline at end of file diff --git a/server/models/warehouse.model.js b/server/models/warehouse.model.js index c1af85c..8f8bef1 100644 --- a/server/models/warehouse.model.js +++ b/server/models/warehouse.model.js @@ -7,7 +7,7 @@ import {LocationSchema, LocationModel} from './location.model' import {OrganizationSchema, Organization} from './organization.model' import faker from 'faker' -const WarehouseSchema = new Schema(_.extend(BaseSchema, { +export const WarehouseSchema = new Schema(_.extend(BaseSchema, { name: String, description: String, hub: HubSchema, @@ -19,23 +19,27 @@ const WarehouseSchema = new Schema(_.extend(BaseSchema, { })) WarehouseSchema.statics = { - fake() { - return Warehouse({ - name: faker.name.findName(), - description: faker.lorem.sentence(), - hub: Hub.fake(), - location: LocationModel.fake(), - organization: Organization.fake(), - lat: faker.random.number(), - lon: faker.random.number(), - address: faker.address.streetAddress() - }) + fake(n = 1) { + let _faker = () => { + return Warehouse({ + name: faker.name.findName(), + description: faker.lorem.sentence(), + hub: Hub.fake(), + location: LocationModel.fake(), + organization: Organization.fake(), + lat: faker.random.number(), + lon: faker.random.number(), + address: faker.address.streetAddress() + }) + } + + if(n == 1) return _faker() + let warehouses = [] + for(let i = 0; i < n; i++) { + warehouses.push(_faker()) + } + return warehouses } } -const Warehouse = mongoose.model('Warehouse', WarehouseSchema) - -export default { - Warehouse, - WarehouseSchema -} \ No newline at end of file +export const Warehouse = mongoose.model('Warehouse', WarehouseSchema) \ No newline at end of file diff --git a/server/routes/bid.route.js b/server/routes/bid.route.js new file mode 100644 index 0000000..d47ceca --- /dev/null +++ b/server/routes/bid.route.js @@ -0,0 +1,8 @@ +import express from 'express' +import {get} from '../controllers/bid.controller.js' + +const router = express.Router() + +router.get('/', get) + +export const bidRoutes = router \ No newline at end of file diff --git a/server/routes/index.route.js b/server/routes/index.route.js index 36d26e8..d10516e 100644 --- a/server/routes/index.route.js +++ b/server/routes/index.route.js @@ -2,7 +2,9 @@ import express from 'express'; import userRoutes from './user.route'; import authRoutes from './auth.route'; import ussdRoutes from './ussd.route'; -import operationRoutes from './operation.route' +import {operationRoutes} from './operation.route' +import {postingRoutes} from './posting.route' +import {bidRoutes} from './bid.route' const router = express.Router(); // eslint-disable-line new-cap @@ -22,4 +24,8 @@ router.use('/ussd', ussdRoutes) router.use('/v1/operations', operationRoutes) +router.use('/v1/postings', postingRoutes) + +router.use('/v1/bids', bidRoutes) + export default router; diff --git a/server/routes/operation.route.js b/server/routes/operation.route.js index e40156b..9ac9bd6 100644 --- a/server/routes/operation.route.js +++ b/server/routes/operation.route.js @@ -1,8 +1,8 @@ import express from 'express' -import operationCtrl from '../controllers/operation.controller.js' +import {get} from '../controllers/operation.controller.js' const router = express.Router() -router.get('/', operationCtrl.get) +router.get('/', get) -export default router \ No newline at end of file +export const operationRoutes = router \ No newline at end of file diff --git a/server/routes/posting.route.js b/server/routes/posting.route.js new file mode 100644 index 0000000..320463c --- /dev/null +++ b/server/routes/posting.route.js @@ -0,0 +1,8 @@ +import express from 'express' +import {get} from '../controllers/posting.controller.js' + +const router = express.Router() + +router.get('/', get) + +export const postingRoutes = router \ No newline at end of file diff --git a/server/tests/bids.test.js b/server/tests/bids.test.js new file mode 100644 index 0000000..840b84a --- /dev/null +++ b/server/tests/bids.test.js @@ -0,0 +1,39 @@ +import chai, { expect } from 'chai' +import request from 'supertest-as-promised' +import httpStatus from 'http-status' +import app from '../../index' +import {Bid, BidSchema} from '../models/bid.model' +import chaiHttp from 'chai-http' +import mongoose from 'mongoose' + +chai.config.includeStack = true; +chai.use(chaiHttp) +const should = chai.should() + +describe('Bid APIS', () => { + + beforeEach(done => { + Bid.remove({}, err => { + done() + }) + }) + + describe('# GET /api/v1/bids', () => { + it('should get all bids', (done) => { + let bid = Bid.fake() + bid.save((err, bid) => { + if(err) throw err + + chai.request(app) + .get('/api/v1/bids') + .end((err, res) => { + res.should.have.status(200) + res.body.should.be.a('array') + res.body.length.should.be.eql(1) + + done() + }) + }) + }) + }) +}) \ No newline at end of file diff --git a/server/tests/operations.test.js b/server/tests/operations.test.js index c4e2b24..4b70756 100644 --- a/server/tests/operations.test.js +++ b/server/tests/operations.test.js @@ -20,7 +20,7 @@ describe('Operation APIS', () => { describe('# GET /api/v1/operations', () => { it('should get all operations', (done) => { - let op = Operation.fake() + let op = Operation.fake('Operation') op.save((err, op) => { if(err) throw err diff --git a/server/tests/postings.test.js b/server/tests/postings.test.js new file mode 100644 index 0000000..e2ecd6f --- /dev/null +++ b/server/tests/postings.test.js @@ -0,0 +1,39 @@ +import chai, { expect } from 'chai' +import request from 'supertest-as-promised' +import httpStatus from 'http-status' +import app from '../../index' +import {Posting, PostingSchema} from '../models/posting.model' +import chaiHttp from 'chai-http' +import mongoose from 'mongoose' + +chai.config.includeStack = true; +chai.use(chaiHttp) +const should = chai.should() + +describe('Posting APIS', () => { + + beforeEach(done => { + Posting.remove({}, err => { + done() + }) + }) + + describe('# GET /api/v1/postings', () => { + it('should get all postings', (done) => { + let po = Posting.fake() + po.save((err, po) => { + if(err) throw err + + chai.request(app) + .get('/api/v1/postings') + .end((err, res) => { + res.should.have.status(200) + res.body.should.be.a('array') + res.body.length.should.be.eql(1) + + done() + }) + }) + }) + }) +}) \ No newline at end of file diff --git a/test.js b/test.js new file mode 100644 index 0000000..4d43c8b --- /dev/null +++ b/test.js @@ -0,0 +1,10 @@ +import mongoose from 'mongoose' +let fakery = require('mongoose-fakery') +const Schema = mongoose.Schema +let MySchema = new Schema({ + name: String +}) + +let MyModel = mongoose.model('MyModel', MySchema) +let fake = fakery.make('MyModel') +console.log(fake) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 1eb0f19..4303992 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3486,6 +3486,10 @@ mongodb@2.2.16: mongodb-core "2.1.2" readable-stream "2.1.5" +mongoose-fakery@false0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/mongoose-fakery/-/mongoose-fakery-0.1.7.tgz#3ebb0141b0fdd5518d041d3979890a5544770792" + mongoose@4.7.4: version "4.7.4" resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.7.4.tgz#e92e16ec75ad62f3b56f7209612d65dd25b3f0bd"