beforeEach(async () => {
        // Generate a business network definition from the project directory.
        let businessNetworkDefinition = await BusinessNetworkDefinition.fromDirectory(path.resolve(__dirname, '..'));
        businessNetworkName = businessNetworkDefinition.getName();
        await adminConnection.install(businessNetworkDefinition);
        const startOptions = {
            networkAdmins: [
                {
                    userName: '******',
                    enrollmentSecret: 'adminpw'
                }
            ]
        };
        const adminCards = await adminConnection.start(businessNetworkName, businessNetworkDefinition.getVersion(), startOptions);
        await adminConnection.importCard(adminCardName, adminCards.get('admin'));

        // Create and establish a business network connection
        businessNetworkConnection = new BusinessNetworkConnection({ cardStore: cardStore });
        events = [];
        businessNetworkConnection.on('event', event => {
            events.push(event);
        });
        await businessNetworkConnection.connect(adminCardName);

        // Get the factory for the business network.
        factory = businessNetworkConnection.getBusinessNetwork().getFactory();

        const participantRegistry = await businessNetworkConnection.getParticipantRegistry(participantNS);
        // Create the participants.
        const alice = factory.newResource(namespace, participantType, '*****@*****.**');
        alice.firstName = 'Alice';
        alice.lastName = 'A';

        const bob = factory.newResource(namespace, participantType, '*****@*****.**');
        bob.firstName = 'Bob';
        bob.lastName = 'B';

        participantRegistry.addAll([alice, bob]);

        const assetRegistry = await businessNetworkConnection.getAssetRegistry(assetNS);
        // Create the assets.
        const asset1 = factory.newResource(namespace, assetType, '1');
        asset1.owner = factory.newRelationship(namespace, participantType, '*****@*****.**');
        asset1.value = '10';

        const asset2 = factory.newResource(namespace, assetType, '2');
        asset2.owner = factory.newRelationship(namespace, participantType, '*****@*****.**');
        asset2.value = '20';

        assetRegistry.addAll([asset1, asset2]);

        // Issue the identities.
        let identity = await businessNetworkConnection.issueIdentity(participantNS + '#alice@email.com', 'alice1');
        await importCardForIdentity(aliceCardName, identity);
        identity = await businessNetworkConnection.issueIdentity(participantNS + '#bob@email.com', 'bob1');
        await importCardForIdentity(bobCardName, identity);
    });
Пример #2
0
    .then(() => {
        factory = businessNetworkConnection.getBusinessNetwork().getFactory();
        let order = factory.newResource(NS, 'Order', orderNo);
        order = svc.createOrderTemplate(order);
        order.amount = 0;
        order.orderNumber = orderNo;
        order.buyer = factory.newRelationship(NS, 'Buyer', req.body.buyer);
        order.seller = factory.newRelationship(NS, 'Seller', req.body.seller);
        order.provider = factory.newRelationship(NS, 'Provider', 'noop@dummy');
        order.shipper = factory.newRelationship(NS, 'Shipper', 'noop@dummy');
        order.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID);
        for (let each in req.body.items)
        {(function(_idx, _arr)
            {   _arr[_idx].description = _arr[_idx].itemDescription;
            order.items.push(JSON.stringify(_arr[_idx]));
            order.amount += parseInt(_arr[_idx].extendedPrice);
        })(each, req.body.items);
        }
        // create the buy transaction
        const createNew = factory.newTransaction(NS, 'CreateOrder');

        createNew.order = factory.newRelationship(NS, 'Order', order.$identifier);
        createNew.buyer = factory.newRelationship(NS, 'Buyer', req.body.buyer);
        createNew.seller = factory.newRelationship(NS, 'Seller', req.body.seller);
        createNew.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID);
        createNew.amount = order.amount;
        // add the order to the asset registry.
        return businessNetworkConnection.getAssetRegistry(NS+'.Order')
        .then((assetRegistry) => {
            return assetRegistry.add(order)
                .then(() => {
                    return businessNetworkConnection.submitTransaction(createNew)
                    .then(() => {console.log(' order '+orderNo+' successfully added');
                        res.send({'result': ' order '+orderNo+' successfully added'});
                    })
                    .catch((error) => {
                        if (error.message.search('MVCC_READ_CONFLICT') !== -1)
                            {console.log(orderNo+' retrying assetRegistry.add for: '+orderNo);
                            svc.loadTransaction(req.app.locals, createNew, orderNo, businessNetworkConnection);
                        }
                        else
                        {console.log(orderNo+' submitTransaction failed with text: ',error.message);}
                    });
                })
                .catch((error) => {
                    if (error.message.search('MVCC_READ_CONFLICT') !== -1)
                        {console.log(orderNo+' retrying assetRegistry.add for: '+orderNo);
                        svc.loadTransaction(req.app.locals, createNew, orderNo, businessNetworkConnection);
                    }
                    else
                    {
                        console.log(orderNo+' assetRegistry.add failed: ',error.message);
                        res.send({'result': 'failed', 'error':' order '+orderNo+' getAssetRegistry failed '+error.message});
                    }
                });
        })
        .catch((error) => {
            console.log(orderNo+' getAssetRegistry failed: ',error.message);
            res.send({'result': 'failed', 'error':' order '+orderNo+' getAssetRegistry failed '+error.message});
        });
    })
Пример #3
0
    .then(() => {
        return businessNetworkConnection.getAssetRegistry(NS+'.Order')
        .then((assetRegistry) => {
            return assetRegistry.get(req.body.orderNo)
            .then((order) => {
                let factory = businessNetworkConnection.getBusinessNetwork().getFactory();
                order.status = req.body.action;
                switch (req.body.action)
                {
                case 'Pay':
                    console.log('Pay entered');
                    updateOrder = factory.newTransaction(NS, 'Pay');
                    updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID);
                    updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier);
                    break;
                case 'Dispute':
                    console.log('Dispute entered');
                    updateOrder = factory.newTransaction(NS, 'Dispute');
                    updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID);
                    updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier);
                    updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier);
                    updateOrder.dispute = req.body.reason;
                    break;
                case 'Purchase':
                    console.log('Purchase entered');
                    updateOrder = factory.newTransaction(NS, 'Buy');
                    updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier);
                    updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier);
                    break;
                case 'Order From Supplier':
                    console.log('Order from Supplier entered for '+order.orderNumber+ ' inbound id: '+ req.body.participant+' with order.seller as: '+order.seller.$identifier);
                    updateOrder = factory.newTransaction(NS, 'OrderFromSupplier');
                    updateOrder.provider = factory.newRelationship(NS, 'Provider', req.body.provider);
                    updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier);
                    break;
                case 'Request Payment':
                    console.log('Request Payment entered');
                    updateOrder = factory.newTransaction(NS, 'RequestPayment');
                    updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier);
                    updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID);
                    break;
                case 'Refund':
                    console.log('Refund Payment entered');
                    updateOrder = factory.newTransaction(NS, 'Refund');
                    updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier);
                    updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID);
                    updateOrder.refund = req.body.reason;
                    break;
                case 'Resolve':
                    console.log('Resolve entered');
                    updateOrder = factory.newTransaction(NS, 'Resolve');
                    updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier);
                    updateOrder.shipper = factory.newRelationship(NS, 'Shipper', order.shipper.$identifier);
                    updateOrder.provider = factory.newRelationship(NS, 'Provider', order.provider.$identifier);
                    updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier);
                    updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID);
                    updateOrder.resolve = req.body.reason;
                    break;
                case 'Request Shipping':
                    console.log('Request Shipping entered');
                    updateOrder = factory.newTransaction(NS, 'RequestShipping');
                    updateOrder.shipper = factory.newRelationship(NS, 'Shipper', req.body.shipper);
                    updateOrder.provider = factory.newRelationship(NS, 'Provider', order.provider.$identifier);
                    break;
                case 'Update Delivery Status':
                    console.log('Update Delivery Status');
                    updateOrder = factory.newTransaction(NS, 'Delivering');
                    updateOrder.shipper = factory.newRelationship(NS, 'Shipper', req.body.participant);
                    updateOrder.deliveryStatus = req.body.delivery;
                    break;
                case 'Delivered':
                    console.log('Delivered entered');
                    updateOrder = factory.newTransaction(NS, 'Deliver');
                    updateOrder.shipper = factory.newRelationship(NS, 'Shipper', req.body.participant);
                    break;
                case 'BackOrder':
                    console.log('BackOrder entered');
                    updateOrder = factory.newTransaction(NS, 'BackOrder');
                    updateOrder.backorder = req.body.reason;
                    updateOrder.provider = factory.newRelationship(NS, 'Provider', order.provider.$identifier);
                    updateOrder.backorder = req.body.reason;
                    break;
                case 'Authorize Payment':
                    console.log('Authorize Payment entered');
                    updateOrder = factory.newTransaction(NS, 'AuthorizePayment');
                    updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier);
                    updateOrder.financeCo = factory.newRelationship(NS, 'FinanceCo', financeCoID);
                    break;
                case 'Cancel':
                    console.log('Cancel entered');
                    updateOrder = factory.newTransaction(NS, 'OrderCancel');
                    updateOrder.buyer = factory.newRelationship(NS, 'Buyer', order.buyer.$identifier);
                    updateOrder.seller = factory.newRelationship(NS, 'Seller', order.seller.$identifier);
                    break;
                default :
                    console.log('default entered for action: '+req.body.action);
                    res.send({'result': 'failed', 'error':' order '+req.body.orderNo+' unrecognized request: '+req.body.action});
                }
                updateOrder.order = factory.newRelationship(NS, 'Order', order.$identifier);
                return businessNetworkConnection.submitTransaction(updateOrder)
                .then(() => {
                    console.log(' order '+req.body.orderNo+' successfully updated to '+req.body.action);
                    res.send({'result': ' order '+req.body.orderNo+' successfully updated to '+req.body.action});
                })
                .catch((error) => {
                    if (error.message.search('MVCC_READ_CONFLICT') !== -1)
                        {console.log(' retrying assetRegistry.update for: '+req.body.orderNo);
                        svc.loadTransaction(req.app.locals, updateOrder, req.body.orderNo, businessNetworkConnection);
                    }
                    else
                    {console.log(req.body.orderNo+' submitTransaction to update status to '+req.body.action+' failed with text: ',error.message);}
                });

            })
            .catch((error) => {
                console.log('Registry Get Order failed: '+error.message);
                res.send({'result': 'failed', 'error': 'Registry Get Order failed: '+error.message});
            });
        })
        .catch((error) => {console.log('Get Asset Registry failed: '+error.message);
            res.send({'result': 'failed', 'error': 'Get Asset Registry failed: '+error.message});
        });
    })