-
-
Notifications
You must be signed in to change notification settings - Fork 68
Description
I have this piece of graphql schema (from Hasura):
input UserLogins_insert_input {
User: Users_obj_rel_insert_input
created: timestamptz
deleted: Boolean
timestamp: Int
updated: timestamptz
userId: String
}Hasura should made those fields required, since they are indeed required (they are all NOT NULL in the database).
Then, I need to insert that entity:
mutation PushUserData(
$userLogins: [UserLogins_insert_input!]!
) {
insert_UserLogins(objects: $userLogins, on_conflict: {constraint: UserLogins_pkey}) {
affected_rows
}
}When Variables$Mutation$PushUserData is created, the Input$UserLogins_insert_input is created with all fields as not required:
class Input$UserLogins_insert_input {
factory Input$UserLogins_insert_input({
Input$Users_obj_rel_insert_input? User,
DateTime? created,
bool? deleted,
int? timestamp,
DateTime? updated,
String? userId,
})
...This is a problem, because when we create a new field in our local database, there is no compiler warning at all if we forget to add that field on the graphql.
So, a solution for this would be a build option that make the required keyword to be generated on these Input$ types, if we configure it with that option.
So, in build.yaml
targets:
$default:
builders:
graphql_codegen:
options:
input_type_primitives_gen_required: bool # only primitives, not nested inputs
...Would generate that class as:
class Input$UserLogins_insert_input {
factory Input$UserLogins_insert_input({
Input$Users_obj_rel_insert_input? User,
required DateTime? created,
required bool? deleted,
required int? timestamp,
required DateTime? updated,
required String? userId,
})
...That would make the compiler useful to alert us when something has changed on the query and we forget to specify those new fields in the mutations/queries.