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
    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 9 meses

      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 5 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 3 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 3 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 3 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 9 meses

    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.

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