// global_config.js

var Parse = require('parse/node').Parse;

import PromiseRouter from '../PromiseRouter';
import * as middleware from "../middlewares";

export class GlobalConfigRouter extends PromiseRouter {
  getGlobalConfig(req) {
    return req.config.database.rawCollection('_GlobalConfig')
      .then(coll => coll.findOne({'_id': 1}))
      .then(globalConfig => ({response: { params: globalConfig.params }}))
      .catch(() => ({
        status: 404,
        response: {
          code: Parse.Error.INVALID_KEY_NAME,
          error: 'config does not exist',
        }
      }));
  }
  updateGlobalConfig(req) {
    return req.config.database.rawCollection('_GlobalConfig')
      .then(coll => coll.findOneAndUpdate({ _id: 1 }, { $set: req.body }))
      .then(response => {
        return { response: { result: true } }
      })
      .catch(() => ({
        status: 404,
        response: {
          code: Parse.Error.INVALID_KEY_NAME,
          error: 'config cannot be updated',
        }
     }));
  }
  
  mountRoutes() {
    this.route('GET', '/config', req => { return this.getGlobalConfig(req) });
    this.route('PUT', '/config', middleware.promiseEnforceMasterKeyAccess, req => { return this.updateGlobalConfig(req) });
  }
}

export default GlobalConfigRouter;

// global_config.js

import PromiseRouter from '../PromiseRouter';
import * as middleware from "../middlewares";

export class GlobalConfigRouter extends PromiseRouter {
  getGlobalConfig(req) {
    return req.config.database.adaptiveCollection('_GlobalConfig')
      .then(coll => coll.find({ '_id': 1 }, { limit: 1 }))
      .then(results => {
        if (results.length != 1) {
          // If there is no config in the database - return empty config.
          return { response: { params: {} } };
        }
        let globalConfig = results[0];
        return { response: { params: globalConfig.params } };
      });
  }

  updateGlobalConfig(req) {
    return req.config.database.adaptiveCollection('_GlobalConfig')
      .then(coll => coll.upsertOne({ _id: 1 }, { $set: req.body }))
      .then(() => ({ response: { result: true } }));
  }

  mountRoutes() {
    this.route('GET', '/config', req => { return this.getGlobalConfig(req) });
    this.route('PUT', '/config', middleware.promiseEnforceMasterKeyAccess, req => { return this.updateGlobalConfig(req) });
  }
}

export default GlobalConfigRouter;

Migrate and fix GlobalConfig database storage.
Migrate and fix GlobalConfig database storage.
