I'm beginner in GraphQL and use it with Node and graphql-compose to create schemas.
I'm not sure if is the correct way to do that: AddressTC is reusable Type, when UserTC or another Type is created or updated, I want to trigger validation automatically of AddressTC. If you know a better way to do that, I'll take it.
// userType.js
// In this example we'll use UserTC but this can another type which also use AdressTC.
const UserTC = schemaComposer.createObjectTC({
name: 'User',
fields: {
id: 'String',
name: 'String',
slug: 'String',
actived: 'Boolean',
registered: 'Boolean',
address: AddressTC,
}
});
const UserITC = UserTC.getInputTypeComposer()
UserTC.addResolver({
kind: 'mutation',
name: 'create',
args: {
data: UserITC
},
type: UserTC,
resolve: async ({args: {data}, context}) => {
// Need to trigger validation and geocode of AddressTC
// do something...
// save in database
},
})
// addressType.js
// reusable Address Type
const AddressTC = schemaComposer.createObjectTC({
name: 'Address',
description: 'Type of address',
fields: {
street: 'String',
number: 'String',
postcode: 'String',
city: 'String',
comment: 'String',
country: 'String',
quality: QualityETC
}
});
const AddressITC = AddressTC.getInputTypeComposer()
AddressTC.addResolver({
kind: 'mutation',
name: 'validation',
args: {
data: AddressITC
},
type: AddressTC,
resolve: async ({args: {data}, context}) => {
// When address is puted or updated :
// Make validation
// Geocode {Lat,Lng} with map provider
// Save in DB
},
})
As your question, You can use a validation library such as joi, and inside your resolver apply your validation schema.