CursosEmpresasBlogLiveConfPrecios

Scalars, filtros y queries avanzadas

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

Contenido del curso

Introducción

  • 1
    ¿Por qué GraphQL?

    ¿Por qué GraphQL?

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

    Arquitectura backend con Node.js y GraphQL

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

    Construyendo una query simple con Apollo Server

    14:49 min
  • 4
    Scalars, filtros y queries avanzadas

    Scalars, filtros y queries avanzadas

    Viendo ahora

Base de datos y ORM

  • 5
    ORMs, Prisma y automatización

    ORMs, Prisma y automatización

    02:53 min
  • 6
    Modelando la base datos y schema

    Modelando la base datos y schema

    12:57 min
  • 7
    Resolvers para mutaciones y filtros

    Resolvers para mutaciones y filtros

    20:28 min
  • 8
    Filtros en Prisma

    Filtros en Prisma

    13:24 min
  • 9
    Paginación y filtros avanzados

    Paginación y filtros avanzados

    10:46 min
  • 10
    Archivos estáticos

    Archivos estáticos

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

    Archivos estáticos con Express.js y Apollo Server

    09:18 min

Producción

  • 12
    Protección de recursos en GraphQL

    Protección de recursos en GraphQL

    20:57 min
  • 13
    Testing

    Testing

    17:12 min
  • 14

    Pruebas End to End: Estrategias y Herramientas Efectivas

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

    Preparando la app para producción

    15:54 min
  • 16
    Preparando el servidor para Heroku

    Preparando el servidor para Heroku

    05:56 min
  • 17
    Introspección

    Introspección

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

    Bases de datos en producción

    08:37 min
  • 19
    Deploying

    Deploying

    15:52 min

Próximos pasos

  • 20
    Reto: guestbook

    Reto: guestbook

    02:53 min
  • 21
    Desventajas de GraphQL

    Desventajas de GraphQL

    08:18 min
  • 22
    Frameworks de GraphQL

    Frameworks de GraphQL

    05:11 min
  • 23
    Conectemos el frontend

    Conectemos el frontend

    01:26 min
Tomar examen

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

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

          Andres Leonardo Arevalo

          Andres Leonardo Arevalo

          student•
          hace 4 años

          Totalmente de acuerdo!

          Sergio Leonardo González Fonseca

          Sergio Leonardo González Fonseca

          student•
          hace 4 años

          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

        Mauricio Combariza

        Mauricio Combariza

        student•
        hace 4 años

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

          Luis Berenguer

          Luis Berenguer

          student•
          hace 4 años

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

        Andres Leonardo Arevalo

        Andres Leonardo Arevalo

        student•
        hace 4 años

        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

          Esteban Obilinovic

          Esteban Obilinovic

          student•
          hace 4 años

          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. :/

        Daniel Elías Ángel Barreto

        Daniel Elías Ángel Barreto

        student•
        hace 3 años

        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

        Steve Anthony Luzquiños Agama

        Steve Anthony Luzquiños Agama

        student•
        hace 4 años

        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.

          Steve Anthony Luzquiños Agama

          Steve Anthony Luzquiños Agama

          student•
          hace 4 años

          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 }
        Miguel Hernández

        Miguel Hernández

        student•
        hace 4 años

        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

        Omar Jalil Fierro López

        Omar Jalil Fierro López

        student•
        hace 4 años

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

          Miguel Hernández

          Miguel Hernández

          student•
          hace 4 años

          Hola, es en la configuración del editor.

          cursor.PNG

        Francisco Ponce

        Francisco Ponce

        student•
        hace 4 años

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

          Marcelo J. Gracia

          Marcelo J. Gracia

          student•
          hace 4 años

          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

          Emmanuel Rodríguez

          Emmanuel Rodríguez

          student•
          hace 4 años

          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.

        Cesar González Caballero

        Cesar González Caballero

        student•
        hace 2 años

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

          Alexander Coronell

          Alexander Coronell

          student•
          hace un año

          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.

        José Antonio Sánchez Aguilar

        José Antonio Sánchez Aguilar

        student•
        hace 4 años

        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

        David Rodriguez

        David Rodriguez

        student•
        hace 4 años

        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" } }
        Juan Camilo Cortes

        Juan Camilo Cortes

        student•
        hace 4 años

        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 ?

          Jonathan 🦑 Alvarez

          Jonathan 🦑 Alvarez

          teacher•
          hace 4 años

          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

          Juan Camilo Cortes

          Juan Camilo Cortes

          student•
          hace 4 años

          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.

        Irving Juárez

        Irving Juárez

        student•
        hace 8 meses

        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?

        Stiven Castillo Montero

        Stiven Castillo Montero

        student•
        hace 3 años

        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.

        Miguel Hernández

        Miguel Hernández

        student•
        hace 4 años

        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

        Andres Alvarez Becerra

        Andres Alvarez Becerra

        student•
        hace 4 años

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

          Jonathan 🦑 Alvarez

          Jonathan 🦑 Alvarez

          teacher•
          hace 3 años

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

        José Luis Encastin Flores

        José Luis Encastin Flores

        student•
        hace 3 años

        ¿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?

        Alexander Valencia

        Alexander Valencia

        student•
        hace 4 años

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

          Joalin Pineda

          Joalin Pineda

          student•
          hace 4 años

          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:

        Alfonso Hernández Montoya

        Alfonso Hernández Montoya

        student•
        hace 4 años

        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

        Alexander Coronell

        Alexander Coronell

        student•
        hace un año

        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.