github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/blockapps-ba-master/server/api/v1/projects/projects.controller.js (about) 1 const co = require('co'); 2 const ba = require('blockapps-rest'); 3 const rest = ba.rest; 4 const common = ba.common; 5 const config = common.config; 6 const util = common.util; 7 const path = require('path'); 8 const serverPath = './server'; 9 const dappJs = require(`${path.join(process.cwd(), serverPath)}/dapp/dapp.js`); 10 11 const projectsController = { 12 create: function(req, res) { 13 const deploy = req.app.get('deploy'); 14 const projectArgs = req.body; 15 16 co(function* () { 17 const dapp = yield dappJs.setContract(deploy.admin, deploy.contract); 18 const result = yield dapp.createProject(projectArgs); 19 util.response.status200(res, { 20 project: result, 21 }); 22 }).catch(err => { 23 console.log('Create Project Error:', err); 24 util.response.status500(res, 'Unable to create project'); 25 }); 26 }, 27 28 get: function(req, res) { 29 const deploy = req.app.get('deploy'); 30 const projectName = decodeURIComponent(req.params['name']); 31 32 co(function* () { 33 const dapp = yield dappJs.setContract(deploy.admin, deploy.contract); 34 const result = yield dapp.getProject(projectName); 35 util.response.status200(res, { 36 project: result, 37 }); 38 }).catch(err => { 39 console.log('Get Projects Error:', err); 40 util.response.status500(res, 'Cannot fetch projects'); 41 }); 42 }, 43 44 list: function(req, res) { 45 const deploy = req.app.get('deploy'); 46 47 let listCallback, listParam; 48 switch (req.query['filter']) { 49 case 'buyer': 50 listCallback = 'getProjectsByBuyer'; 51 listParam = req.query['buyer']; 52 break; 53 case 'state': 54 listCallback = 'getProjectsByState'; 55 listParam = req.query['state']; 56 break; 57 case 'supplier': 58 listCallback = 'getProjectsBySupplier'; 59 listParam = req.query['supplier']; 60 break; 61 default: 62 listCallback = 'getProjects' 63 } 64 65 co(function* () { 66 const dapp = yield dappJs.setContract(deploy.admin, deploy.contract); 67 const projects = yield dapp[listCallback](listParam); 68 util.response.status200(res, { 69 projects: projects, 70 }); 71 }).catch(err => { 72 console.log('List Projects Error', err); 73 util.response.status500(res, 'Error occurred while trying to list projects'); 74 }); 75 }, 76 77 bid: function(req, res) { 78 const deploy = req.app.get('deploy'); 79 80 co(function* () { 81 const dapp = yield dappJs.setContract(deploy.admin, deploy.contract); 82 const bid = yield dapp.createBid( 83 req.params.name, 84 req.body.supplier, 85 req.body.amount); 86 util.response.status200(res, { 87 bid: bid, 88 }); 89 }).catch(err => { 90 console.log('Bid Error:', err); 91 util.response.status500(res, 'Error occurred while trying to submit bid'); 92 }); 93 }, 94 95 getBids: function(req, res) { 96 const deploy = req.app.get('deploy'); 97 98 co(function* () { 99 const dapp = yield dappJs.setContract(deploy.admin, deploy.contract); 100 const bids = yield dapp.getBids(req.params.name); 101 util.response.status200(res, { 102 bids: bids, 103 }); 104 }).catch(err => { 105 console.log('Get Bids Error:', err); 106 util.response.status500(res, 'Error occurred while trying to fetch bids'); 107 }); 108 }, 109 110 handleEvent: function(req, res) { 111 const deploy = req.app.get('deploy'); 112 const username = req.body.username; 113 114 co(function* () { 115 const dapp = yield dappJs.setContract(deploy.admin, deploy.contract); 116 // this transaction requires transfer of funds from the buyer to the bid contract 117 // IRL this will require to prompt the user for a password 118 const password = deploy.users.filter(function(user) { 119 return user.username === username; 120 })[0].password; 121 122 const args = { 123 projectEvent: req.body.projectEvent, 124 projectName: req.params.name, 125 username : username, 126 password: password, 127 bidId: req.body.bidId, // required for ProjectEvent.ACCEPT 128 }; 129 130 const result = yield dapp.handleEvent(args); 131 // got it 132 util.response.status200(res, { 133 bid: result, 134 state: result, 135 }); 136 }).catch(err => { 137 console.log('Handle Event Error:', err); 138 util.response.status500(res, err); 139 }); 140 }, 141 }; 142 143 module.exports = projectsController;