No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Anidamiento dinámico

22/24
Recursos

Aportes 3

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Excelente característica, incentiva a la reutilización de consultas simples y reduce el números de consultas complejas que surgen usando inner join en las consultas sql.

si en el resultado final les arroja un error
es porque en el video no se alcanza a ver que el id va dentro y no fuera

  return service.getByCategory(id);

Anidamiento dinamico

se crea un type que rotorne otro type que este relacionado en la base de datos

type Category {
  id: ID
  name: String,
  image: String,
  createdAt: String
  products:[Product!]! 
 }
 type Query {
  allCategories: [Category]
  categoryById(id:ID): Category

 }
 type Product {
  id:ID!
  name:String!
  price:Float!
  description:String!
  createdAt:String!
  image:URL!
  category:Category
 }

definimos ese type en nuestros resolvers, por lo tanto el type debe llamarse igual al definido

const { login } = require("./auth/auth.resolver")
const { allCategories, categoryById , addCategory} = require("./categories.resolver")
const { product, products ,createProduct,deleteProduct,updateProduct, getProductByCategory} = require("./product.resolver")
const { getPersons , findPerson, createPerson} = require("./resolver.person")

const {RegularExpression} = require('graphql-scalars')

const CategoryNameType= new RegularExpression('CategoryNameType', /^[a-zA-Z0-9]{3,8}$/);

const resolvers= {
  Query:{
    saludo: ()=> 'hola mundillo de internet',
    persons:getPersons,
    findPerson,
    allCategories,
    categoryById,
    product,
    products
  },
  Mutation:{
    createPerson,
    createProduct,
    deleteProduct,
    updateProduct,
    addCategory,
    login
  },
  CategoryNameType,
  Category: {
    products: getProductByCategory
  }
}

module.exports = resolvers

getProductByCategory hace la peticion a la base de datos

const getProductByCategory =async(root,_)=>{
// root es el objeto padre del cual ha sido llamado el resolver es decir: Category
  return await service.getByCategory(root.dataValues.id)
// creamos un metodo en el servicio que retorne los productos relacionados a la categoria
// por medio del id 
// asi solo el resolver se ejecuta si en la consulta son requeridos los productos
}

metodo del servicio

async getByCategory(idCategory){
    return await models.Product.findAll({where:{categoryId:idCategory}})
  }