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 una clase CaducidadMutation

Método para agregar

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

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

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

  • Agrega un método AddCaducidad que recibirá igual como [Service] nuestro contexto (caducaContext) el LocService y un parámetro llamado caducidad del Modelo Caducidad y regresará un Objeto de la clase Caducidad.

  • Inicializamos nuestro objeto CaducidadDAO y llamamos al método AgregarAsync.

  • Si todo es correcto regresamos el objeto caducidad.

CaducidadMutation.cs
using System.Threading.Tasks;
using CaducaRest.DAO;
using CaducaRest.Models;
using CaducaRest.Resources;
using HotChocolate;

namespace CaducaRest.GraphQL.HotChocolate;

/// <summary>
/// Funciones para agregar, borrar o modificar
/// </summary>
public class CaducidadMutation
{
    public async Task<Caducidad> AddCaducidad(
                    [Service] CaducaContext caducaContext,
                    [Service] LocService locService, 
                    Caducidad caducidad)
    {
        CaducidadDAO caducidadDAO = new CaducidadDAO(caducaContext, locService);
        var correcto = await caducidadDAO.AgregarAsync(caducidad);
        if (correcto)
            return caducidad;
        else
            return new Caducidad();
    }
}

Método para borrar

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

CaducidadMutation.cs
public async Task<string> DeleteCaducidad(
                [Service] CaducaContext caducaContext, 
                [Service] LocService locService, 
                int id)
    {
        CaducidadDAO caducidadDAO = new CaducidadDAO(caducaContext, locService);
        var correcto = await caducidadDAO.BorraAsync(id);
        if (correcto)
            return $"La caducidad con el id: {id} fue borrada correctamente";
        else
           return caducidadDAO.customError.Message;
    }
}

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 async Task<Caducidad> UpdateCaducidad(
                      [Service] CaducaContext caducaContext,
                      [Service] LocService locService,
                      Caducidad caducidad,
                      int id)
{
    if (id != caducidad.Id)
    {
        return null;
    }
    CaducidadDAO caducidadDAO = new CaducidadDAO(caducaContext, locService);
    var correcto = await caducidadDAO.ModificarAsync(caducidad);
    if (correcto)
        return caducidad;
    else
        return null;
}

Configurando GraphQL

Por último lo agregamos a nuestra clase Startup con la función AddMutation

Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    services.AddGraphQLServer()
            .AddQueryType<Query>().AddProjections().AddFiltering().AddSorting()
            .AddMutationType<GraphQL.HotChocolate.CaducidadMutation>();

Last updated