thebakeryio/parse-graphql-server

View on GitHub
src/server/lib/query.js

Summary

Maintainability
A
1 hr
Test Coverage
import Parse from 'parse/node';
import { create as createModel } from './model';

const buildOptions = (options, sessionToken) => Object.assign(options || {}, { sessionToken });

export function create(sessionToken) {
  if (!sessionToken) {
    class BasicQuery extends Parse.Query {
      constructor(objectClass) {
        super(objectClass);
        this.ObjectClass = objectClass;
      }

      create(attributes = {}) {
        return new this.ObjectClass(attributes);
      }
    }

    return BasicQuery;
  }

  class Query extends Parse.Query {
    constructor(objectClass) {
      super(createModel(objectClass, sessionToken));
      this.ObjectClass = createModel(objectClass, sessionToken);
    }

    create(attributes = {}) {
      return new this.ObjectClass(attributes);
    }

    count(options) {
      return super.count(buildOptions(options, sessionToken));
    }

    find(options) {
      return super.find(buildOptions(options, sessionToken));
    }

    first(options) {
      return super.first(buildOptions(options, sessionToken));
    }

    get(objectId, options) {
      return super.get(objectId, buildOptions(options, sessionToken));
    }
  }

  return Query;
}