8.1.4 Creando la Mutation

Para realizar las operaciones POST, PUT y DELETE se realizan mediante Mutations, agregamos una carpeta Mutation a nuestro proyecto y ahi agregamos una clase CaducidadMutation

Método para agregar

En graphQL los servicios para agregar se realizan de la siguiente manera:

mutation {
createCaducidad(input: {
id: 1,
clienteId: 1,
productoId: 1,
cantidad: 10,
fecha: "2019-07-01"
})
}

Para el método agregar vamos a realizar lo siguiente a nuestra clase CaducidadMutation

  • Agregamos la palabra Field e indicamos que tipo de dato va a regresar la función para este ejemplo en el método crear, voy a regresar el objeto que se creó. Agrego CadudicadType como tipo de dato a devolver.

  • Se agrega el nombre con el que se va a llamar nuestro servicio en este caso "createCaducidad"

  • Los parámetros de nuestros servicios los agregamos como QueryArguments el cual podemos pasarle una lista de argumentos, para el serivicio de agregar solo necesitamos el objeto de tipo InputObjectGraphType (se usa este tipo cuando deseamos como parámetro un objeto) y como nombre para la variable para el método POST le llamamos caducidad.

  • Se agrega un método resolve donde obtenemos los argumentos del servicio, pasando como tipo de dato un objeto de nuestro clase del modelo, en este caso Caducidad y el código para agregar en la base de datos

CaducidadMutation.cs
using CaducaRest.DAO;
using CaducaRest.GraphQL.Types;
using CaducaRest.Models;
using CaducaRest.Resources;
using GraphQL;
using GraphQL.Types;
using Microsoft.Extensions.DependencyInjection;
public class CaducidadMutation : ObjectGraphType
{
public CaducidadMutation(LocService locService)
{
Field<CaducidadType>
(
"createCaducidad",
arguments: new QueryArguments(
new QueryArgument
<NonNullGraphType<CaducidadInputType>>
{ Name = "caducidad" }
),
resolve: context =>
{
using var scope = context.RequestServices.CreateScope();
var services = scope.ServiceProvider;
var caducaContext = services.GetRequiredService<CaducaContext>();
CaducidadDAO caducidadDAO = new CaducidadDAO(caducaContext,
locService);
var caducidad = context.GetArgument<Caducidad>
("caducidad");
var correcto = caducidadDAO
.AgregarAsync(caducidad)
.Result;
return caducidad;
});
}
}

Método para borrar

Para borrar es bastante similar, en este caso regresare un mensaje indicando que la información se borro correctamente, por lo que regresare un string (StringGraphType), y se recibe como parámetro el id qu es del tipo entero (IntGraphType) del registro a borrar.

CaducidadMutation.cs
public class CaducidadMutation : ObjectGraphType
{
public CaducidadMutation(CaducaContext caducaContext,
LocService locService)
{
//Código para agregar
Field<StringGraphType>(
"deleteCaducidad",
arguments: new QueryArguments(
new QueryArgument<NonNullGraphType<IntGraphType>>
{ Name = "id" }),
resolve: context =>
{
var id = context.GetArgument<int>("id");
var caducidad = caducidadDAO.BorraAsync(id).Result;
return $"La caducidad con el id: {id} fue borrada " +
"correctamente";
}
);

Método para actualizar

El método actualizar es una combinación de los métodos anteriores para pasar como parámetros el id del registro que deseamos modificar y los datos del registro a modificar

CaducidadMutation.cs
public class CaducidadMutation : ObjectGraphType
{
public CaducidadMutation(CaducaContext caducaContext,
LocService locService)
{
//Código para agregar y borrar
Field<CaducidadType>(
"updateCaducidad",
arguments: new QueryArguments(
new QueryArgument
<NonNullGraphType<CaducidadInputType>>
{ Name = "caducidad" },
new QueryArgument
<NonNullGraphType<IntGraphType>>
{ Name = "id" }),
resolve: context =>
{
var caducidad = context.GetArgument<Caducidad>("caducidad");
var id = context.GetArgument<int>("id");
var correcto = caducidadDAO.ModificarAsync(caducidad).Result;
return caducidad;
}
);