CursosEmpresasBlogLiveConfPrecios

Scalars, filtros y queries avanzadas

Clase 4 de 23 • Curso Avanzado de Node.js con GraphQL, Apollo Server y Prisma

Clase anteriorSiguiente clase

Contenido del curso

Introducción
  • 1
    ¿Por qué GraphQL?

    ¿Por qué GraphQL?

    03:40
  • 2
    Arquitectura backend con Node.js y GraphQL

    Arquitectura backend con Node.js y GraphQL

    03:06
  • 3
    Construyendo una query simple con Apollo Server

    Construyendo una query simple con Apollo Server

    14:49
  • 4
    Scalars, filtros y queries avanzadas

    Scalars, filtros y queries avanzadas

    18:57
Base de datos y ORM
  • 5
    ORMs, Prisma y automatización

    ORMs, Prisma y automatización

    02:53
  • 6
    Modelando la base datos y schema

    Modelando la base datos y schema

    12:57
  • 7
    Resolvers para mutaciones y filtros

    Resolvers para mutaciones y filtros

    20:28
  • 8
    Filtros en Prisma

    Filtros en Prisma

    13:24
  • 9
    Paginación y filtros avanzados

    Paginación y filtros avanzados

    10:46
  • 10
    Archivos estáticos

    Archivos estáticos

    07:14
  • 11
    Archivos estáticos con Express.js y Apollo Server

    Archivos estáticos con Express.js y Apollo Server

    09:18
Producción
  • 12
    Protección de recursos en GraphQL

    Protección de recursos en GraphQL

    20:57
  • 13
    Testing

    Testing

    17:12
  • 14

    Pruebas End to End: Estrategias y Herramientas Efectivas

    01:54
  • 15
    Preparando la app para producción

    Preparando la app para producción

    15:54
  • 16
    Preparando el servidor para Heroku

    Preparando el servidor para Heroku

    05:56
  • 17
    Introspección

    Introspección

    03:56
  • 18
    Bases de datos en producción

    Bases de datos en producción

    08:37
  • 19
    Deploying

    Deploying

    15:52
Próximos pasos
  • 20
    Reto: guestbook

    Reto: guestbook

    02:53
  • 21
    Desventajas de GraphQL

    Desventajas de GraphQL

    08:18
  • 22
    Frameworks de GraphQL

    Frameworks de GraphQL

    05:11
  • 23
    Conectemos el frontend

    Conectemos el frontend

    01:26

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
      Favio Amarilla Miño

      Favio Amarilla Miño

      student•
      hace 4 años
        Andres Leonardo Arevalo

        Andres Leonardo Arevalo

        student•
        hace 4 años
        Sergio Leonardo González Fonseca

        Sergio Leonardo González Fonseca

        student•
        hace 4 años
      Mauricio Combariza

      Mauricio Combariza

      student•
      hace 4 años
        Luis Berenguer

        Luis Berenguer

        student•
        hace 4 años
      Andres Leonardo Arevalo

      Andres Leonardo Arevalo

      student•
      hace 4 años
        Esteban Obilinovic

        Esteban Obilinovic

        student•
        hace 4 años
      Daniel Elías Ángel Barreto

      Daniel Elías Ángel Barreto

      student•
      hace 3 años
      Steve Anthony Luzquiños Agama

      Steve Anthony Luzquiños Agama

      student•
      hace 4 años
        Steve Anthony Luzquiños Agama

        Steve Anthony Luzquiños Agama

        student•
        hace 4 años
      Miguel Hernández

      Miguel Hernández

      student•
      hace 4 años
      Omar Jalil Fierro López

      Omar Jalil Fierro López

      student•
      hace 4 años
        Miguel Hernández

        Miguel Hernández

        student•
        hace 4 años
      Francisco Ponce

      Francisco Ponce

      student•
      hace 4 años
        Marcelo J. Gracia

        Marcelo J. Gracia

        student•
        hace 4 años
        Emmanuel Rodríguez

        Emmanuel Rodríguez

        student•
        hace 4 años
      Cesar González Caballero

      Cesar González Caballero

      student•
      hace 2 años
        Alexander Coronell

        Alexander Coronell

        student•
        hace 9 meses
      José Antonio Sánchez Aguilar

      José Antonio Sánchez Aguilar

      student•
      hace 4 años
      David Rodriguez

      David Rodriguez

      student•
      hace 4 años
      Juan Camilo Cortes

      Juan Camilo Cortes

      student•
      hace 4 años
        Jonathan 🦑 Alvarez

        Jonathan 🦑 Alvarez

        teacher•
        hace 4 años
        Juan Camilo Cortes

        Juan Camilo Cortes

        student•
        hace 4 años
      Irving Juárez

      Irving Juárez

      student•
      hace 5 meses
      Stiven Castillo Montero

      Stiven Castillo Montero

      student•
      hace 3 años
      Miguel Hernández

      Miguel Hernández

      student•
      hace 4 años
      Andres Alvarez Becerra

      Andres Alvarez Becerra

      student•
      hace 3 años
        Jonathan 🦑 Alvarez

        Jonathan 🦑 Alvarez

        teacher•
        hace 3 años
      José Luis Encastin Flores

      José Luis Encastin Flores

      student•
      hace 3 años
      Alexander Valencia

      Alexander Valencia

      student•
      hace 3 años
        Joalin Pineda

        Joalin Pineda

        student•
        hace 3 años
      Alfonso Hernández Montoya

      Alfonso Hernández Montoya

      student•
      hace 4 años
      Alexander Coronell

      Alexander Coronell

      student•
      hace 9 meses

      Al ver un curso espero aprender cosas no a escuchar explicaciones de codigos y/o proyectos que ya estan todos desarrollados... Cual seria el objetivo de este curso si solo me pongo a leer codigo Para otros cursos mejor ponte a programar desde cero y explicar, no te pongas a explicar codigo que ya esta escrito :)

      Totalmente de acuerdo!

      La mayor cantidad de tiempo como programador, vas a estar leyendo código de otros y no escribiendolo. La explicación me pareció muy valiosa

      Me gusta mucho la metodología para enseñar que usa este profesor. Es dificil, pero genera un gran reto en cada clase

      Si, mediante los retos se aprende haciendo, de verdad tienes que pensar por tu cuenta como resolverlo.

      Me perdonaran pero que sentido tiene venir a una clase a leer el 30% del total del código agregado y ver al profesor copiar y pegar, no es que no quiera tomarme el tiempo de entender pero se trata de una clase

      Yo tampoco entiendo la verdad, de una clase a otra tiene medio proyecto listo y lo muestra por encima sin explicar bien qué y por qué hace cada cosa. :/

      Para los próximos cursos seria bueno que hiciera todo paso a paso se entiende más así, la mayoría de los videos de programación en platzi tienen ya archivos creados y no se si lo hacen para que el curso sea más corto, pero la verdad le baja calidad y no se aprende como es debido, por eso prefiero los cursos de udemy en cuanto a programación ya que puedes encontrarlos de ese tipo paso a paso

      Por si alguien se pregunta de dónde sacó el profesor la definición del scalar (al menos yo no la sabía, ni la entendía), la tomó de esta documentación de Apollo, creo que esta otra docu de GraphQL también les resultará útil.

      Por otro lado, les comparto mi propia implementación del scalar DateTime:

      import { GraphQLScalarType, Kind } from 'graphql' const DateTime = new GraphQLScalarType({ name: 'DateTime', description: 'Represents a date time object', serialize(value: unknown): string { if (!(value instanceof Date)) throw new Error('DateTime can only serialize Date objects') return value.toISOString() }, parseValue(value: unknown): Date { if (typeof value !== 'string' && typeof value !== 'number') throw new Error('DateTime can only parse string values or timestamps') const date = new Date(value) if (isNaN(date.getTime())) throw new Error( 'DateTime can only parse valid string dates or timestamps' ) return date }, parseLiteral(ast): Date { if (ast.kind !== Kind.STRING && ast.kind !== Kind.INT) throw new Error('DateTime can only parse string values or timestamps') const date = new Date( ast.kind === Kind.INT ? ast.value : parseInt(ast.value) ) if (isNaN(date.getTime())) throw new Error( 'DateTime can only parse valid string dates or timestamps' ) return date } }) export { DateTime }

      Después de 3 días aprendiendo TypeScript corregí mi código basado en esta clase :D :D Lo explicare paso a paso:


      • Dividí el código en una carpeta models la cual tiene el archivo schema.graphql y una resolvers con los resolvers.

        parte.PNG

      • El index.ts configure el context del apollo server para pasar la "db" (luego tendra sentido)

        parte.PNG

      • El schema.graphql tiene el modelo de la clase:

        code.png

      • Dentro de resolvers/index.ts cree el objeto para el resolver de apollo server

        parte.PNG

      • Para configurar los queries y mutations cree sus propios archivos y el objeto context tiene toda la información de la "db" que configure en la propiedad context del apollo server (ignoren el type de la línea 3 xd)

        parte.PNG

      • Dentro de /resolvers/base estan algunos tipos usados en los queries y mutations y el resolver para el type Avocado o algún otro type si llegara a crear otro

        parte.PNG

      El unico problema que tuve fue este warning:

      parte.PNG

      Fue muy complejo pero divertido programar todo eso, aprendi muchas cosas de TypeScript como los Utility Types, keyof, etc. Y muchas otras formas de configurar el resolver. Repo de mi proyecto


      Nunca pares de aprender

      ¿Cómo se llama la extensión para el cursor que parpadea bonito?

      Hola, es en la configuración del editor.

      cursor.PNG

      ¿Una duda es posible definir solamente en el schema un enum y no pasarle el tipo en el modelo?

      Supongamos, que quisiera agregar un enum para saber de donde provienen mis aguacates de zonas preestablecidas. Digamos o de Michoacán, o de Jalisco o de Nayarit.

      Si defines el enum en tu schema lo puedes utilizar en el back pasando tal cual tu definición. Pero ten cuidado en la definición de enum xq prisma a veces no es compatible con Graphql, me ha dado problemas en varios enumerados. Cuando llegue al video te cuento

      Hola 👋

      Es correcto lo que comenta Marcelo. Y para arreglar ciertos issues por tu capa lógica (DAO o DTO), te sugiero generes un catálogo para este fin que, dependiendo tu arquitectura, la puedes definir como un controlador o delegado por tu prisma.

      Los enum son cool para escenarios como etiquetas simples pero si cambian mucho o son dinámicos, te recomiendo lib para la generación de enum o darle un soporte mediante relaciones.

      Bueno, otro curso que no puedo aprender con éste profesor porque no explica su código solo pasa por encima y que adivinemos...

      Exacto, no es la primera vez que me ocurre con este profesor, paso más tiempo tratando de hacer funcionar el código, todo lo presentado en la clase actual, es como haberse saltado 5 clases, nos queda un código desconectado totalmente.

      Para poder sacarle provecho a este curso hay que tener un conocimiento basico de typescript, apollo, prisma y graphql porque no te lleva paso a paso mientras crea el paso sino que te muestra codigo que ya existe

      Les comparto el código del Mutation 15:40 -> Data completa del repo del profe

      { "data": { "name": "Reed Avocado", "price": 1.18, "image": "/images/reed.jpg", "description": "Developed from a chance seedling found in 1948 by James S. Reed in California, this cultivar has large, round, green fruit with a smooth texture and dark, thick, glossy skin. Smooth and delicate, the flesh has a slightly nutty flavor. The skin ripens green. A Guatemalan type, it is hardy to −1 °C (30 °F). Tree size is about 5 by 4 m (16.4 by 13.1 ft)", "shape": "Round", "hardiness": "−1 °C", "taste": "Exquisite, is an avocado" } }

      Por que no me deja crear el otro branch de dev 2-queries? ya que no me sale ninguno de los archivos como el de .graphql ?

      Hola Juan Camilo! Podrías mostrar que comando estás corriendo y el error que te da? También sería útil ver tu repo en GitHub :D

      Hola jonalvarezz, Gracias por responde, le paso el codigo siguiente tal cual tu lo pones pero me salta el error, todo ejecutado desde el branch main, si comprendo que ya existe otra branch con el mismo nombre, o creo otra branch con nombre distinto ?

      <code> ➜ platzi-graphql-fullstack git:(main) git checkout -b dev 2-queries fatal: A branch named 'dev' already exists.

      El Repo en GitHub esta en construccion ya que le quiero dar un buen README pero aqui apenas va el comiendo, lo puedes ver https://github.com/juancortesparra/Platzi-Avocado.

      En el reto de la clase anterior dijo que hicieramos lo menos necesario que pondriamos en el Card del aguacate, yo puse Name y Img, pero de repente sale con el atributo del Taste, apoco los aguacates tienen sabores diferentes?

      Muy bien explicado, me gusta está metodología porque no tengo que estar siguiendo el ritmo de profesor al escribir código ni estar pausando el vídeo. Así me queda claro todo y si tengo alguna duda o quiero experimentar algo, lo hago en el código ya hecho.

      Mi repo. Le agregare un tag de un antes y después de esta clase a ver que tal queda luego :D https://github.com/MiguelHG2351/platzi-node-prisma-graphql

      Hola. Una pregunta, Por que ++DateTime++ no se definió con ++apollo-server++ y si con ++graphql++?

      Muy buena pregunta, queríamos mostrar como hacerlo sin librería :)

      ¿Qué función tiene el "Avocado" que se encuentra en el objeto default del documento "resolvers.ts"? Por lo que entiendo retorna el valor de un solo avocado al hacer el query en graphql, pero para eso está justamente el Query de "avo", no?

      Tenia que hacer algun curso antes de entrar a este?

      realmente me pierdo, en la clase anterior apenas si se instalo el apollo y ya en esta se supone que ya deberia saber que son las mutaciones, schema, scalar.......

      Hola Para el curso se recomienda tener conocimientos previos de JavaScript Node.js TypeScript Fundamentos de GraphQL Podrías hacer el Curso Básico de GraphQL antes de tomar este. :smiley:

      tengo un response que tipo Scalar:string pero me arroha una cadena con \n\n ¿como puedo transformar o procesarlo para mostrarlo en un html ?

      Saludos

      Realmente terrible este capíitulo del curso. los códigos de estos modulos no se encuentran en el repositorio. Ya que iba a "explicar" el código, al menos debió enseñarlo en pantalla.