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;