From 8c299b4dbcb927da440742fe326b8bc995e77262 Mon Sep 17 00:00:00 2001 From: deepakrkris Date: Fri, 10 Mar 2017 18:38:23 -0800 Subject: [PATCH] Aggregate calls using bluebird add all results and return --- docker-compose.yml | 26 ++++--- services/facade/package.json | 1 + services/facade/server/models/account.js | 99 +++++++++++++++++------- 3 files changed, 87 insertions(+), 39 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 2eb2010..6d3d1a5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,17 +1,5 @@ version: '3' services: - facade: - build: ./services/facade - image: loopback-example-facade/facade - ports: - - "3000:80" - links: - - customer - networks: - app-net: - aliases: - - facade - - account-service customer: build: ./services/customer-service image: loopback-example-facade/customer-service @@ -39,6 +27,20 @@ services: app-net: aliases: - transaction-service + facade: + build: ./services/facade + image: loopback-example-facade/facade + ports: + - "3000:80" + links: + - customer + - account + - transaction + networks: + app-net: + aliases: + - facade + - account-facade networks: app-net: diff --git a/services/facade/package.json b/services/facade/package.json index ea09272..eb0f517 100644 --- a/services/facade/package.json +++ b/services/facade/package.json @@ -8,6 +8,7 @@ "posttest": "npm run lint && nsp check" }, "dependencies": { + "bluebird": "latest", "compression": "^1.0.3", "cors": "^2.5.2", "helmet": "^1.3.0", diff --git a/services/facade/server/models/account.js b/services/facade/server/models/account.js index 12ac0ac..4f63f44 100644 --- a/services/facade/server/models/account.js +++ b/services/facade/server/models/account.js @@ -1,11 +1,44 @@ 'use strict'; const app = require('../server'); +const promise = require('bluebird'); module.exports = function(Account) { - let accountService, customerService, transactionService; + let customerService, accountService, transactionService; - app.on('started', function() { + Account.getAccountSummary = function(accountNumber) { + let accountSummary = {}; + return findAccountSummary({id: accountNumber, accountNumber: accountNumber}) + .then(function(data) { + accountSummary = data.obj; + console.log("summary", accountSummary); + }) + .then(function() { + return findAccount({id: accountNumber, accountNumber: accountNumber}) + }) + .then(function(data) { + accountSummary.account = data.obj; + console.log("account" , data.obj); + }) + .then(function() { + return findCustomer({id: accountSummary.account.customerNumber, customerNumber: accountSummary.account.customerNumber}) + }) + .then(function(data) { + console.log(data); + accountSummary.customer = data.obj; + return accountSummary; + }); + } + + Account.listAllAccounts = function(customerNumber, cb) { + let findAccount = accountService.getFunction('Account', 'find'); + findAccount({}, function(err, account) { + if (err) return cb(err); + cb(null, account.obj); + }); + }; + + app.on('started', function(){ customerService = app.dataSources.Customer; accountService = app.dataSources.Account; transactionService = app.dataSources.Transaction; @@ -14,36 +47,48 @@ module.exports = function(Account) { transactionService.getFunction = getFunction; }); - function getFunction(model, method) { - let functionName = model + '_' + method; - return this.createModel(model, {})[functionName]; + function findTransaction(input) { + let find = transactionService.getFunction('Transaction', 'findById'); + return new Promise(function (resolve, reject) { + find(input, function(err, data) { + if (err) return reject(new Error(err)); + resolve(data); + }); + }); } - Account.getAccountSummary = function(accountNumber, cb) { - let findCustomer = customerService.getFunction('Customer', 'findById'); - let findAccount = accountService.getFunction('Account', 'findById'); - let findAccountSummary = accountService.getFunction('AccountSummary', 'findById'); - let findTransaction = transactionService.getFunction('Transaction', 'findById'); - findAccountSummary({id: accountNumber, accountNumber: accountNumber}, function(err, accountSummary) { - if (err) return cb(err); - accountSummary = accountSummary.obj; - findAccount({id: accountNumber, accountNumber: accountNumber}, function(err, account) { - if (err) return cb(err); - findCustomer({id: account.obj.customerNumber, customerNumber: account.obj.customerNumber}, function(err, customer) { - if (err) return cb(err); - accountSummary.customer = customer.obj; - accountSummary.account = account.obj; - cb(null, accountSummary); - }); + function findAccountSummary(input) { + let find = accountService.getFunction('AccountSummary', 'findById'); + return new Promise(function (resolve, reject) { + find(input, function(err, data) { + if (err) return reject(new Error(err)); + resolve(data); }); }); } - Account.listAllAccounts = function(customerNumber, cb) { - let findAccount = accountService.getFunction('Account', 'find'); - findAccount({}, function(err, account) { - if (err) return cb(err); - cb(null, account.obj); + function findAccount(input) { + let find = accountService.getFunction('Account', 'findById'); + return new Promise(function (resolve, reject) { + find(input, function(err, data) { + if (err) return reject(new Error(err)); + resolve(data); + }); }); - }; + } + + function findCustomer(input) { + let find = customerService.getFunction('Customer', 'findById'); + return new Promise(function (resolve, reject) { + find(input, function(err, data) { + if (err) return reject(new Error(err)); + resolve(data); + }); + }); + } + + function getFunction(model, method) { + let functionName = model + '_' + method; + return this.createModel(model, {})[functionName]; + } };