Video Transcript
Nesta aula nós vamos aprender a criar mutações.
Mutation, como é chamada no inglês, é uma operação especial do GraphQL que a gente
usa para poder criar recursos, atualizar recursos ou deletar recursos.
Você já aprendeu a query.
A query é usada para obter dados, seja de um recurso individual ou de vários recursos,
múltiplos recursos.
Então nesta aula vamos aprender a criar um recurso usando a mutation.
Então vamos lá.
Então estou aqui no arquivo index.js, usando o middleware do GraphQL, express GraphQL.
Vamos dar uma olhada no esquema, vamos lá para o arquivo schema.js.
Lá no final, cadê?
Módulo.exports aqui, a gente define um novo GraphQL esquema.
Esse esquema tem a propriedade query, que é um objeto type.
A gente vai criar outra propriedade aqui chamada mutation.
Depois de query vamos definir mutation.
Note que tem muita coisa aqui, então recomendo depois como re-fatorização você extrair
essas partes em um arquivo separado.
Então vamos continuar.
A gente vai fazer a mesma coisa, quase a mesma coisa que a gente fez para query, só
muda a propriedade, agora se chama mutation.
New GraphQL ObjectType, passo um object.
Não precisa de motivi-la.
E da mesma maneira que a gente fez anteriormente, nós vamos ter propriedade name para o nome
da object e os fields, os campos.
Vamos lá.
Nem vamos mudar mutation type, fields.
Agora a gente tem que adicionar as fields para as operações que a gente quer fazer.
Por exemplo, se eu quiser criar uma companhia, adicionar uma companhia, então a gente pode
adicionar essa operação aqui.
E você chama o nome da operação, adicionar companhia.
Aí você diz o tipo.
Nesse caso vai ser o tipo de object que você espera ser retornado dessa chamada aqui,
dessa mutation.
Normalmente quando você cria uma nova companhia, você recebe de volta o object da companhia
com o ID, então você pode usar companhia type.
Se você olha aqui, é bem parecido com as anteriormente que temos companhia para pegar
todos os companhias, companhia para pegar uma única companhia.
Então a gente vai ter, depois do type, você tem que dizer quando você cria companhia,
você precisa saber do cliente os dados da companhia.
Então para isso você vai usar args para receber argumentos com os dados da companhia.
Eu vou começar de maneira simples, eu vou por cada argumento aqui da companhia e depois
a gente ver como melhorar isso.
Então para a companhia, se você lembrar, se eu explico, olha aqui, companhia tem um nome
fundado em inside, então vamos adicionar isso.
Nome, nome vai ser type o quê?
Nome é tipo, vamos fazer de outra coisa aqui.
Vai ser graph que é o string, mas vamos deixar assim depois a gente ver se é um campo
requerido ou não.
Então nome tem um nome fundado em, também é um string, graph que é o string e tem
também o site, mesma coisa, tudo é string, graph que é o string.
Você pode determinar se esses campos aqui são requeridos ou não.
Vamos dizer que todos os campos são requeridos, então você tem que dizer aquela mesma técnica
que a gente fez anteriormente, se lembra do no no para dizer que você não pode ser
no esse campo.
Então vai usar isso para cada um desses caras.
Então vou dizer no, não, opa, graph que é o no no e passa o tipo como argumento.
Então isso significa que, vou ter essa viva aqui, que esse, por exemplo, esse próprio
propriedade nome não pode ser não.
Então definindo os argumentos para receber, para criar a nova campanha, não precisa de
id que id é criado pelo backhand.
Com isso a gente faz depois de args.
Tem a resolve, resolve que vai dizer como fazer operação para o graphical.
Então vamos lá.
Depois de args, você vai escrever resolve.
Primeiro argumento para value, segundo args.
Agora para poder criar um novo recorde, se lembra que lá no companhia .js a gente criou
aquele methodo create.
Então se você falar cria, companhia.create e passar o objeto com os dados da companhia,
ele vai criar a nova campanha e retornar no resolve.
Dá promessa.
Então vamos fazer isso.
Vamos lá.
Você fala companhia e já está querido lá em cima, ponto create.
Agora você tem que passar o objeto da companhia.
Onde é que está esse cara?
A companhia tem um nome, a companhia tem um dado em, a companhia tem que mais.
Onde estão esses caras?
Você se lembra que a gente definiu args?
Esses são os argumentos que você pode passar quando você fizer essa query pelo companhia
para adicionar companhia.
Então você pode passar o nome, fundar em e o site.
Então esses caras aqui vão aparecer dentro do objeto args na metade resolve.
Então você pode falar args?nome, args?fundada em e assim por diante.
Args.site.
Tá bom?
Então esse vai passar o objeto, aí você retorna do resolve.
E com isso ele vai criar companhia e retornar no objeto resolve.
E ver se isso vai funcionar.
Vamos lá.
Voltando ao navegador, localhost 3000 barra.
Vamos fazer o seguinte, vê dizem query, você agora vai dizer mutation.
Aí você abre aqui as chaves.
Agora diz o nome do campo, né?
Nesse caso aqui o campo da mutation que a gente adicionou é adicionar companhia.
Agora adicionar companhia, abre as chaves, mas você tem argumentos.
Então você adiciona os parentes aqui e adiciona cada argumento.
Primeiro vai ser o quê?
O nome da companhia.
Por exemplo, o nome...
Vamos usar companhia aqui.
Vamos usar Oracle.
Aí adapta de fundação.
Eu nem sei.
Então vou botar qualquer data aqui, tá certo?
Tá errado.
Então...
E o site.
Oracle.com.
A gente tem que usar aspas duplas, tá?
Isso que quer dizer isso, cara.
Em vez de só uma...
Vamos usar aspas aqui.
Tá bom.
Então tá aqui, ó.
Esse que é o nome da field que a gente adicionou a mutation, se lembra?
E aqui são os args, argumentos, nome, fundada em e o site.
Então dentro dos chaves você vai passar aos campos que você quer que seja retornado
do back end.
Então tem que ser pelo menos um, por exemplo, só o ID.
Ou se você quiser receber tudo, só adicionar mais nome, fundada em site.
Tá?
Então vamos fazer isso.
Play.
Você note aqui que ele retorna dessa mutation, a mutação.
Um objeto com o ID 4.
Se lembra que a gente tinha três campanhas, uma com o ID 1, 2 e 3.
Agora tem o ID 4, que é o novo recorde com Oracle.
Data de fundação que tá provavelmente errado.
E o site.
Pra você ver que isso realmente funcionou, olha aqui.
Vou comentar essa, na verdade eu vou adicionar a query aqui e vou dar query pra todos os
companhias.
E eu quero o ID, nome, fundada em e site.
Você pode criar um fragmento aqui pra poder reutilizar esses caras, tá?
Se lembra?
Então deixa eu ver aqui.
Vamos dar o nome a query pra poder identificar no play, obter companhias, companhias e
mutação.
Também posso dar o nome, a mutação.
Vou dar o mesmo nome, adicionar companhia.
Então eu posso escolher qual pra rodar.
Vou rodar a mutação ou rodar a query.
Quer a query agora?
Pra ver se realmente criou.
Então você note que a query de obter companhias.
Agora tem um novo objeto que é a oracle, tá?
Então essa é a mutação.
Vamos revisar o que a gente fez.
Então a gente já tinha aqui no nosso companhia, outro JTS, aquela função create pra criar
companhia no nosso backend simulado, no ORM.
Vamos fechar isso.
Aí o que a gente fez aqui?
Dentro do schema.js a gente criou um novo GraphQL que já tinha a propriedade query,
que é um novo GraphQL object type.
Aí o que você faz?
Adiciona nova propriedade e suba o nome pra mutation.
Aí vai ser bem similar ao que a gente já tinha feito pra query.
Então você diz o nome desse cara, só diz mutation type e as fields que são os campos.
E eu adicionei o campo chamar adicionar companhia que a gente usou aqui.
Olha aqui no lado esquerdo, primeira código.
Então o type aqui é o tipo de objeto que vai ser retornado depois de executar essa
mutação, nesse caso o companhia type.
Você passa os orgs pra poder passar os argumentos pra criar uma nova companhia.
A gente passou aqui, olha aqui, nome fundado em insight nos parênteses ali, depois o nome
do field, do campo que adiciona a companhia.
Aí tem o resolve que você pode pegar e chama a companhia create com um objeto da nova
companhia e cada argumento, cada propriedade vem do orgs.
Tá bom?
E se lembra que a gente passou o new graph, no, no pra dizer que cada argumento é obrigatório,
ou se não pode ometer.
Tá bom?
Então por essa aula é só e até a próxima.