dataset.prototype.processPackageDatasetManifest = function()

in source/api/services/package/lib/dataset.js [176:247]


    dataset.prototype.processPackageDatasetManifest = function(packageId, datasetId, token, ticket, cb) {

        accessValidator.validate(packageId, ticket, 'dataset:processPackageDatasetManifest', function(err, data) {
            if (err) {
                return cb(err, null);
            }

            let params = {
                TableName: ddbTable,
                Key: {
                    package_id: packageId,
                    dataset_id: datasetId
                }
            };

            let docClient = new AWS.DynamoDB.DocumentClient(dynamoConfig);
            docClient.get(params, function(err, dataset) {
                if (err) {
                    console.log(err);
                    return cb({code: 502, message: "Failed to validade if the user permission."}, null);
                }

                if (_.isEmpty(dataset)) {
                    let message;
                    return cb({code: 404, message: 'The manifest file requested for processing is not found.'}, null);
                }

                let _dataset = dataset.Item;
                if (_dataset.type != 'manifest' || _dataset.state_desc != 'Pending Upload') {
                    return cb({code: 400, message: 'Invalid request. Dataset is not a manifest file or is in ivalid state.'},null);
                }

                _dataset.state_desc = 'Processing';

                let params = {
                    TableName: ddbTable,
                    Item: _dataset
                };

                docClient.put(params, function(err, data) {
                    if (err) {
                        console.log(err);
                        return cb({code: 502, message: "Failed to save manifest."}, null);
                    }

                    let _payload = {
                        dataset: _dataset,
                        operation: 'import',
                        authorizationToken: token
                    };

                    // add async invocation to lambda function that processes manifest file
                    let params = {
                        FunctionName: 'data-lake-manifest-service',
                        InvocationType: 'Event',
                        LogType: 'None',
                        Payload: JSON.stringify(_payload)
                    };
                    let lambda = new AWS.Lambda();
                    lambda.invoke(params, function(err, data) {
                        if (err) {
                            console.log(err);
                            return cb({code: 502, message: "Error occured when triggering manifest import."}, null);
                        }

                        return cb(null, _dataset);
                    });
                });
            });
        });

    };