graphql-compose-mongoose
Version:
Plugin for `graphql-compose` which derive a graphql types from a mongoose model.
52 lines (50 loc) • 1.82 kB
JavaScript
import { mongoose, Schema, Types } from '../../__mocks__/mongooseCommon';
import { DroidSchema } from './droidSchema';
import { PersonSchema } from './personSchema';
const enumCharacterType = {
PERSON: 'Person',
DROID: 'Droid'
};
export const CharacterObject = {
_id: {
type: String,
default: () => new Types.ObjectId()
},
name: String,
type: {
type: String,
require: true,
enum: Object.keys(enumCharacterType)
},
kind: {
type: String,
require: true,
enum: Object.keys(enumCharacterType)
},
friends: [String],
// another Character
appearsIn: [String] // movie
};
const CharacterSchema = new Schema(CharacterObject);
const ACharacterSchema = new Schema(Object.assign({}, CharacterObject));
export function getCharacterModels(DKey) {
CharacterSchema.set('discriminatorKey', DKey);
const CharacterModel = mongoose.models.Character ? mongoose.models.Character : mongoose.model('Character', CharacterSchema);
const PersonModel = mongoose.models[enumCharacterType.PERSON] ? mongoose.models[enumCharacterType.PERSON] : CharacterModel.discriminator(enumCharacterType.PERSON, PersonSchema);
const DroidModel = mongoose.models[enumCharacterType.DROID] ? mongoose.models[enumCharacterType.DROID] : CharacterModel.discriminator(enumCharacterType.DROID, DroidSchema);
return {
CharacterModel,
PersonModel,
DroidModel
};
}
export function getCharacterModelClone() {
const NoDKeyCharacterModel = mongoose.model('NoDKeyCharacter', ACharacterSchema);
/*
const APersonModel = ACharacterModel.discriminator('A' + enumCharacterType.PERSON, PersonSchema.clone());
const ADroidModel = ACharacterModel.discriminator('A' + enumCharacterType.DROID, DroidSchema.clone());
*/
return {
NoDKeyCharacterModel
}; // APersonModel, ADroidModel };
}