controllers/ComboItemController.js

/**
 * Controller for combo items.
 */
class ComboItemController {
    constructor(app){
        this.app = app;
        // ADD BINDINGS BELOW
        this.add = this.add.bind(this);
        this.delete = this.delete.bind(this);
    }

    // ADD MUTATION METHODS BELOW

    /**
     * Create a new combo item
     * @param  {string} name - Name of Combo Item
     * @param  {int} discount - Discount Applied to Original Value of Items
     * @param  {string} availableFrom - Starting Date of Availability
     * @param  {string} availableUntil - Ending Date of Availability
     * @param  {Object} menuItems
     * @param  {int} recurringType=null - Weekly, Monthly etc
     * @param  {string} dayOfWeek=null - The days of the week in which the combo is active (Monday or Tuesday etc)
     * @returns {Promise<any>} - Returns the id of the combo item object added
     */
    add(name, discount, availableFrom, availableUntil, menuItems, recurringType = null, dayOfWeek = null){
        // addComboItem(name: String!, discount: Int!, availableFrom: String, availableUntil: String, menuItems: [ComboItemInput]!, recurringType: Int, dayOfWeek: String): ComboItem
        return new Promise((resolve, reject) => {
            let mutationString = `
                mutation addComboItemMutation ($name: String!, $discount: Int!, $availableFrom: String!, $availableUntil: String!, $menuItems: [ComboItemInput]!, $recurringType: Int, $dayOfWeek: String) {
                    addComboItem(name: $name, discount: $discount, availableFrom: $availableFrom, availableUntil: $availableUntil, menuItems: $menuItems, recurringType: $recurringType, dayOfWeek: $dayOfWeek) {
                        id
                    }
                }
            `;
            this.app.getAdaptor().mutate(mutationString, {
                name, discount, availableFrom, availableUntil, menuItems, recurringType, dayOfWeek
            }).then(result => {
                resolve(result.addComboItem.id);
            }).catch(e => {
                reject(e);
            });
        });
    }

    /**
     * Delete a combo item
     * @param {int} id - The unique identifier of the combo item object
     * @returns {Promise<any>}
     */
    delete(id){
        // deleteComboItem(id: Int!): Int
        return new Promise((resolve, reject) => {
            let mutationString = `
                mutation deleteComboItemMutation ($id: Int!) {
                    deleteComboItem(id: $id)
                }
            `;
            this.app.getAdaptor().mutate(mutationString, {
                id
            }).then(() => {
                resolve();
            }).catch(e => {
                reject(e);
            });
        });
    }

}

module.exports = ComboItemController;