controllers/RemoteConfigurationController.js

/**
 * Controller for remote configuration.
 */
class RemoteConfigurationController {
    constructor(app) {
        this.app                    = app;
        // ADD BINDINGS BELOW
        this.fetch                  = this.fetch.bind(this);
        this.deleteRawConfiguration = this.deleteRawConfiguration.bind(this);
        this.updateRawConfiguration = this.updateRawConfiguration.bind(this);
        this.createRawConfiguration = this.createRawConfiguration.bind(this);
    }

    // ADD MUTATION METHODS BELOW

    fetch(name, version) {
        return new Promise((resolve, reject) => {
            let mutationString = `
                query ($name: String!, $version: String!) {
                    merged_configuration(name: $name, version: $version) {
                        name
                        data
                    }
                }
            `;
            this.app.getAdaptor().mutate(mutationString, {
                name, version,
            }).then((result) => {
                resolve(JSON.parse(result.merged_configuration.data));
            }).catch(e => {
                reject(e);
            });
        });
    }

    deleteRawConfiguration(id) {
        return new Promise((resolve, reject) => {
            let mutationString = `
                mutation ($id: String!) {
                    deleteRawConfiguration(id: $id)
                }
            `;
            this.app.getAdaptor().mutate(mutationString, {
                id
            }).then((result) => {
                resolve(result.deleteRawConfiguration);
            }).catch(e => {
                reject(e);
            });
        });
    }

    updateRawConfiguration(id, rawConfiguration) {
        return new Promise((resolve, reject) => {
            let mutationString = `
                mutation ($id: String!, $rawConfiguration: UpdateRawConfigurationInput!) {
                    updateRawConfiguration(id: $id, raw_configuration: $rawConfiguration) {
                        _id
                    }
                }
            `;
            this.app.getAdaptor().mutate(mutationString, {
                id, rawConfiguration
            }).then((result) => {
                resolve(result.updateRawConfiguration);
            }).catch(e => {
                reject(e);
            });
        });
    }

    createRawConfiguration(rawConfiguration) {
        return new Promise((resolve, reject) => {
            let mutationString = `
                mutation ($rawConfiguration: CreateRawConfigurationInput!) {
                    createRawConfiguration(raw_configuration: $rawConfiguration) {
                        _id
                    }
                }
            `;
            this.app.getAdaptor().mutate(mutationString, {
                rawConfiguration
            }).then((result) => {
                resolve(result.createRawConfiguration);
            }).catch(e => {
                reject(e);
            });
        });
    }


}

module.exports = RemoteConfigurationController;