gqlify icon indicating copy to clipboard operation
gqlify copied to clipboard

How to make a many-to-many relation in default data for memory datasource

Open chanacol opened this issue 6 years ago • 0 comments

Describe the bug Hi!! I'm doing a demo of GQLify and I can't find an example of how to represent a many-to-many relation in the default data for a memory datasource. I have tried with the following options without luck:

To Reproduce

demo.graphql

enum Language {
  en_US,
  es_MX,
  de_DE
}
type User @GQLifyModel(dataSource: "memory", key: "users") {
  id: ID! @unique @autoGen
  username: String!
  email: String!
  preferedLanguage: Language!
  pokemons: [Pokemon!]!
  books: [Book!]!
}
type Book @GQLifyModel(dataSource: "memory", key: "books") {
  id: ID! @unique @autoGen
  name: String!
  author: User!
}
type Pokemon @GQLifyModel(dataSource: "memory", key: "pokemons") {
  id: ID! @unique
  name: String!
  base_experience: Int!
  order: Int!
  types: [String]
  moves: [String]
  owners: [User]
}

index.js

Option 1:

const defaultData = {
  users: [
    {id: '1', username: 'Alice', email: '[email protected]'},
    {id: '2', username: 'Bob', email: '[email protected]'},
  ],
  books: [
    {id: '1', name: 'book1', userId: '1'},
    {id: '2', name: 'book2', userId: '2'},
  ],
  pokemons: [
    {id: '1', name: 'bulbasaur', base_experience: 64, order: 1, types: ['poison', 'grass'], moves: ['razor-wind', 'swords-dance', 'vine-whip'], owners: ['2']}
  ],
};

Option 2:

const defaultData = {
  users: [
    {id: '1', username: 'Alice', email: '[email protected]'},
    {id: '2', username: 'Bob', email: '[email protected]'},
  ],
  books: [
    {id: '1', name: 'book1', userId: '1'},
    {id: '2', name: 'book2', userId: '2'},
  ],
  pokemons: [
    {id: '1', name: 'bulbasaur', base_experience: 64, order: 1, types: ['poison', 'grass'], moves: ['razor-wind', 'swords-dance', 'vine-whip'], userIds: ['2']}
  ],
};

Option 3:

const defaultData = {
  users: [
    {id: '1', username: 'Alice', email: '[email protected]', pokemons:[]},
    {id: '2', username: 'Bob', email: '[email protected]', pokemons:['1']},
  ],
  books: [
    {id: '1', name: 'book1', userId: '1'},
    {id: '2', name: 'book2', userId: '2'},
  ],
  pokemons: [
    {id: '1', name: 'bulbasaur', base_experience: 64, order: 1, types: ['poison', 'grass'], moves: ['razor-wind', 'swords-dance', 'vine-whip'], owners: ['2']}
  ],
};

Option 4:

const defaultData = {
  users: [
    {id: '1', username: 'Alice', email: '[email protected]', pokemonIds:[]},
    {id: '2', username: 'Bob', email: '[email protected]', pokemonIds:['1']},
  ],
  books: [
    {id: '1', name: 'book1', userId: '1'},
    {id: '2', name: 'book2', userId: '2'},
  ],
  pokemons: [
    {id: '1', name: 'bulbasaur', base_experience: 64, order: 1, types: ['poison', 'grass'], moves: ['razor-wind', 'swords-dance', 'vine-whip'], userIds: ['2']}
  ],
};

Error:

Query

query PokemonMasters{
  users{
    username
    pokemons{
      name
    }
  }
}

Result

{
  "data": {
    "users": [
      {
        "username": "Alice",
        "pokemons": []
      },
      {
        "username": "Bob",
        "pokemons": []
      }
    ]
  }
}

Expected behavior

Query

query PokemonMasters{
  users{
    username
    pokemons{
      name
      types
    }
  }
}

Result

{
  "data": {
    "users": [
      {
        "username": "Alice",
        "pokemons": []
      },
      {
        "username": "Bob",
        "pokemons": ["bulbasaur"]
      }
    ]
  }
}

Desktop (please complete the following information):

  • OS: OSX 10.14.4 (Mojave)
  • Browser: Chrome 73.0.3683.86
  • Version: GQLify 3.2.1 & graphql 14.1.1

Additional context Memory datasource

chanacol avatar Apr 26 '19 16:04 chanacol