Я хотел бы знать, как я могу выполнить "глобальную" мутацию с GraphQL.
В настоящее время у меня есть 6 таблиц:
Sequence [id | is_active]
Bucket [id | код | fk_sequence_id | fk_language_id]
Bucket_Block_Linker [id | fk_bucket_id | fk_block_id]
Блок [id | код | is_active]
Block_Element_Linker [id | fk_block_id | fk_element_id]
Элемент [id | название | субтитры | текст | is_active]
Для возобновления: Последовательность> Ведра> Блоки> Элемент
Я хотел бы создать saveSequence и editSequence, чтобы отправить в мой API последовательность с Bucket с блоком с элементом.
Мне не до того, чтобы получить «философию graphQl», как я могу это выполнить, я должен связать различные мутации? Я должен создать новую мутацию?
schema.js
# Sequence
type Sequence {
id: Int!,
code: String,
buckets: [Bucket],
sequence_types : [SequenceType]
is_active: Boolean,
}
# SequenceInput
input SequenceInput {
is_active: Boolean
}
# Bucket
type Bucket {
id: Int!,
code: String
language(id: Int): Language
blocks: [Block],
is_active: Boolean
}
# BucketInput
input BucketInput {
fk_language_id: Int!,
fk_sequence_id: Int!,
is_active: Boolean
}
# Block
type Block {
id: Int!,
code: String,
is_active: Boolean,
position: Int
elements: [Element]
}
# BlockInput
input BlockInput {
is_active: Boolean
}
# Element
type Element {
id: Int!,
title: String,
subtitle: String,
text: String,
is_active: Boolean
}
# ElementInput
input ElementInput {
title: String,
subtitle: String,
text: String,
is_active: Boolean
}
...
##############
## MUTATION ##
##############
type Mutation {
createSequence(input: SequenceInput): Sequence,
createBucket(input: BucketInput): Bucket,
createBlock(input: BlockInput): Block,
createElement(input: ElementInput): Element,
}
schema {
query: Query,
mutation: Mutation
}
resolvers.js
...
Mutation : {
createSequence(_, {input}) {
return models.Sequence.create(input);
},
createBucket(_, {input}) {
console.log(input);
return models.Bucket.create(input);
},
createBlock(_, {input}) {
return models.Block.create(input);
},
createElement(_, {input}) {
return models.Element.create(input);
}
}
...