Сохранение и редактирование мутаций с типом в типе с GraphQL - PullRequest
0 голосов
/ 29 марта 2019

Я хотел бы знать, как я могу выполнить "глобальную" мутацию с 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);
    }
}
...
...