> For the complete documentation index, see [llms.txt](https://abi.gitbook.io/net-core/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://abi.gitbook.io/net-core/6.3-agregar-graphql/6.3.4-creando-la-mutation.md).

# 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:

```graphql
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.

{% code title="CaducidadMutation.cs" %}

```csharp
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();
    }
}
```

{% endcode %}

### 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.&#x20;

{% code title="CaducidadMutation.cs" %}

```csharp
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;
    }
}
```

{% endcode %}

### 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.

{% code title="CaducidadMutation.cs" %}

```csharp
  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;
}
```

{% endcode %}

### Configurando GraphQL

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

{% code title="Startup.cs" %}

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

{% endcode %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://abi.gitbook.io/net-core/6.3-agregar-graphql/6.3.4-creando-la-mutation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
