I am trying to create a Schema, however is going to get too long and confusing, what are the best practices to split the different queries, mutations and inputs so I can just require them and organize them to make it easy to read.
I have tried to find information online but there is nothing clear at all and I am trying not to use Apollo.
const { buildSchema } = require('graphql');
module.exports = buildSchema(`
type Region {
_id: ID!
name: String!
countries: [Country!]
}
type Country {
_id: ID!
name: String!
region: [Region!]!
}
type City {
_id: ID!
name: String!
country: [Country!]!
}
type Attraction {
_id: ID!
name: String!
price: Float!
description: String!
city: [City!]!
}
type Eatery {
_id: ID!
name: String!
cuisine: String!
priceRange: String!
location: [Location!]!
typeOfEatery: String!
city: [City!]!
}
type Location {
_id: ID!
latitude: String!
longitude: String!
address: Float
}
type User {
_id: ID!
email: String!
password: String!
}
type AuthData {
userId: ID!
token: String!
tokenExpiration: String!
}
type RegionInput {
name: String!
}
type CountryInput {
name: String!
}
type CityInput {
name: String!
}
type RootQuery {
regions: [Region!]!
countries: [Country!]!
login(email: String!, password: String!): AuthData!
}
type RootMutation {
createRegion(regionInput: RegionInput): Region
createCountry(countryInput: CountryInput): Country
createCity(cityInput: CityInput): City
}
schema {
query: RootQuery
mutation: RootMutation
}
`);
I need something that is very organized and allows me to get everything in order and clear, merge all files in one index is the best solution.
There are multiple options, here are three of them:
You can take a look at Apollo's blog - they show a way to modularize the schema: Modularizing your GraphQL schema code If you want an example, you can take a look at this github repository
Of course you can always just use the template literals to embed parts of the schema as strings:
const countryType = `
type Country {
_id: ID!
name: String!
region: [Region!]!
}
`
const regionType = `
type Region {
_id: ID!
name: String!
countries: [Country!]
}
`
const schema = `
${countryType}
${regionType}
# ... more stuff ...
`
module.exports = buildSchema(schema);