8.1.3 Creando el query

Los objetos query nos van a permitir consultar la información de nuestros servicios.

Creando CaducidadDAO

Vamos a crear la clase para obtener los datos de las caducidades, con todas las funciones básicas

CaducidadDAO.cs
public class CaducidadDAO
{
private readonly CaducaContext contexto;
private readonly LocService localizacion;
private readonly AccesoDAO<Caducidad> caducidadDAO;
public CustomError customError;
public CaducidadDAO(CaducaContext context, LocService locService)
{
this.contexto = context;
this.localizacion = locService;
caducidadDAO = new AccesoDAO<Caducidad>(context, locService);
}
public async Task<List<Caducidad>> ObtenerTodoAsync()
{
return await caducidadDAO.ObtenerTodoAsync();
}
public async Task<Caducidad> ObtenerPorIdAsync(int id)
{
return await caducidadDAO.ObtenerPorIdAsync(id);
}
public async Task<bool> AgregarAsync(Caducidad caducidad)
{
List<IRegla> reglas = new List<Core.IRegla>();
if (await caducidadDAO
.AgregarAsync(caducidad, reglas))
return true;
else
{
customError = caducidadDAO.customError;
return false;
}
}
public async Task<bool> ModificarAsync(Cliente cliente)
{
List<IRegla> reglas = new List<Core.IRegla>();
if (await clienteDAO.ModificarAsync(cliente, reglas))
return true;
else
{
customError = clienteDAO.customError;
return false;
}
}
public async Task<bool> BorraAsync(int id)
{
var caducidad = await ObtenerPorIdAsync(id);
if (caducidad == null)
{
customError = new CustomError(404, String.
Format(this.localizacion
.GetLocalizedHtmlString("NotFound"),
"La Caducidad"), "Id");
return false;
}
contexto.Caducidad.Remove(caducidad);
await contexto.SaveChangesAsync();
return true;
}
}

Creando nuestro Objeto CaducidadQuery

Vamos a crear nuestro objeto CaducidadQuery el cual es muy parecido a nuestros objetos Type, la clase hereda deObjectGraphType, solo que aqui describimos nuestra tabla y no cada campo y obtenemos la información de la tabla con el método ObtenerTodo.

CaducidadQuery.cs
using CaducaRest.DAO;
using CaducaRest.GraphQL.Types;
using CaducaRest.Models;
using CaducaRest.Resources;
using GraphQL.Types;
using Microsoft.Extensions.DependencyInjection;
namespace CaducaRest.GraphQL.Query
{
/// <summary>
/// Los objetos query en GraphQL permiten consultar información
/// </summary>
public class CaducidadQuery: ObjectGraphType
{
/// <summary>
/// Constructor de la clase Query para consultar las caducidades
/// </summary>
/// <param name="caducaContext">Objeto para el acceso a la bd</param>
/// <param name="locService">Objeto para mensajes de error de acuerdo al idioma</param>
public CaducidadQuery( LocService locService)
{
Field<ListGraphType<CaducidadType>>(
"caducidades",
resolve: context =>
{
using var scope = context.RequestServices
.CreateScope();
var services = scope.ServiceProvider;
var caducaContext = services.
GetRequiredService<CaducaContext>();
CaducidadDAO caducidadDAO = new CaducidadDAO(caducaContext,
locService);
return caducidadDAO.ObtenerTodoAsync();
}
);
}
}
}

Puedes ver a continuación el link oficial