let getCartItemDetails = function()

in source/api/services/cart/lib/cart.js [82:173]


    let getCartItemDetails = function(ticket, cart, index, cb) {

        let accessValidator = new AccessValidator();
        accessValidator.getUserGroups(ticket.userid, function(err, data) {
            if (err) {
                console.log(err);
                cb({error: {message: 'No valid permission.'}}, null);
                return;
            }

            let _results = {
                Items: []
            };

            if (index < cart.Items.length) {
                let params = {
                    TableName: 'data-lake-packages',
                    KeyConditionExpression: 'package_id = :pid',
                    ExpressionAttributeValues: {
                        ':pid': cart.Items[index].package_id
                    }
                };

                docClient.query(params, function(err, resp) {
                    if (err) {
                        console.log(err);
                        return cb(err, null);
                    }

                    for (let i = 0; i < resp.Items.length; i++) {

                        // Skip if the package is deleted
                        if (resp.Items[i].deleted) {
                            continue;
                        }

                        // Skip if the user does not have access to the package
                        if (ticket.role.toLowerCase() != 'admin') {
                            let user_groups = [];
                            data.Groups.map(group => {user_groups.push(group.GroupName);});
                            if (ticket.userid != resp.Items[i].owner && _.intersection(user_groups, resp.Items[i].groups).length == 0) {
                                continue;
                            }
                        }

                        if (moment(cart.Items[index].expires) > moment.utc() ||
                            cart.Items[index].cart_item_status == 'pending' ||
                            cart.Items[index].cart_item_status == 'unable_to_process') {
                            _results.Items.push({
                                user_id: cart.Items[index].user_id,
                                package_id: cart.Items[index].package_id,
                                cart_item_status: cart.Items[index].cart_item_status,
                                created_at: cart.Items[index].created_at,
                                item_id: cart.Items[index].item_id,
                                status_details: cart.Items[index].status_details,
                                expires: cart.Items[index].expires,
                                url: cart.Items[index].url,
                                name: resp.Items[i].name,
                                format: cart.Items[index].format,
                                description: resp.Items[i].description
                            });
                        }
                    }

                    let _index = index + 1;
                    if (_index < cart.Items.length) {

                        getCartItemDetails(ticket, cart, _index, function(err, data) {
                            if (err) {
                                console.log(err);
                                return cb(err, null);
                            }

                            for (let i = 0; i < data.Items.length; i++) {
                                _results.Items.push(data.Items[i]);
                            }

                            return cb(null, _results);

                        });

                    } else {
                        return cb(null, _results);
                    }

                });
            } else {
                return cb(null, _results);
            }

        });
    };