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.
Introducción
¿Qué es GraphQL?
Proyecto: tienda online con GraphQL
Análisis de la API REST (sin GraphQL)
Fundamentos de GraphQL
Tu primera API GraphQL
GraphQL desde Insomnia y Postman
Tipado en GraphQL
Sistema de tipado
Scalar types
Listas y non-null types
Object types and fields
Archivos .graphql (mejor developer experience)
GraphQL en la Tienda con Express.js
Product resolvers
Conectado a ProductService
Mutations and Inputs
Variables y alias
Update and Delete
Anidamiento
Autenticación con GraphQL y JSON Web Tokens
Login
Crear categoría
GraphQL con JWT
Validar roles
Custom Scalars
Bonus
Anidamiento dinámico
Conclusiones
GraphQL vs. API REST
Toma el Curso Avanzado de Node.js con GraphQL
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 3
Preguntas 0
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);
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}})
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.