Crea un Base de Datos MySQL y evita los hackers (buenas prácticas)

Поділитися
Вставка
  • Опубліковано 22 січ 2025

КОМЕНТАРІ • 128

  • @jhoniergutierrez2351
    @jhoniergutierrez2351 6 місяців тому +12

    Que afortunados somos de tenerte en UA-cam, debemos recompensarte por compartir tu conocimiento, buen amigo y colega.

  • @rubendariohernandezcenteno5259
    @rubendariohernandezcenteno5259 Рік тому +22

    Midu, este curso tiene mucho nivel, hay muy poco contenido de excelente calidad y gratis como este, la verdad está quedando perfecto.

  • @RoxanaConstantine
    @RoxanaConstantine 5 місяців тому +1

    Voy a decir algo que no viene al tema pero, me animan mucho tus videos.Mas allá de la programación, soy una persona que vive largos períodos en soledad y el mundo de la programación a veces es solitario.Me gusta mucho que tengas tanta alegría ❤ porque me haces sentir animada.

  • @clayman1325
    @clayman1325 Рік тому +11

    En horabuena Midu Gracias por subir este video, Esperado hace 1 mes :D

    • @midulive
      @midulive  Рік тому +5

      😊 a ti

    • @clayman1325
      @clayman1325 Рік тому

      @@midulive strategy pattern y factory pattern es un uso o un ejemplo de Dependency injection, se ve muy similar. Excelente video que esta buenisimo que nosea solo hello world :D

  • @diegonaranjo1874
    @diegonaranjo1874 7 місяців тому +2

    uy parce, enserio que midu me deja muy sorprendido y loco con las cosas que hace, yo creo que esto no se coge con experiencia y siendo constante en programacion, siento que este nivel de sabiduria y logica con la que lleva todo un paso mas alla es de alguien con talento, midu es el messi de la programacion, sos el mejor y mi ejemplo a seguir bro

  • @je813
    @je813 Рік тому +6

    Buenas midu!! Estoy esperando con muchas ganas la parte del testeo. Me encantaría que pudieras explicar toda la parte de los mocks de las dependencias y la base de datos. Un saludo y gracias por el cursazo!!

  • @bettinimarcelo
    @bettinimarcelo Рік тому +3

    Siempre subiendo buen contenido gratuito, muy bien diez, felicitado! Un aporte: SQL es case insensitive por default, no hace falta convertir texto a mayúsculas, minúsculas o lo que sea.

  • @amneriscalle
    @amneriscalle 10 місяців тому

    Gracias x estos cursos, muy buenas las explicaciones, en especial cuando mostrás de dónde salen las herramientas que usamos. En la mayoría de los cursos te dan la herramienta directamente y uno las aprende y las usa como robot, sin saber por qué ni de dónde. Gracias de nuevo, un saludo desde Argentina.

  • @fernandoangelrodriguezgonz1393

    Siiii 🥳🥳🥳. Rato esperando por la continuacion del curso de Node, Midu. No lo pude ver en Twich pero ahora lo hago por aki y depues me paso por Twich para ver la directa. Mil gracias por estos excelentes cursos que es de lo mejor que se puede encontrar tanto en español como ingles. Eres el mejor Midu ❤❤❤

  • @offGamingChannel
    @offGamingChannel Рік тому +34

    Hablando de buenas prácticas, comento un par de detalles (avanzados, quizás) a considerar en el uso de un UUID tal como se presenta aquí:
    1. La función UUID() no es determinante, por lo que en un entorno con réplica, en las instancias slave, puede devolver valores diferentes al master dependiendo de la configuración de MySQL; en particular binlog_format.
    2. En una tabla InnoDB, la PRIMARY KEY es su índice clusterizado, lo que determina el órden físico de los datos. Como en este caso, el valor de id no es secuencial, los registros se ingresarán "en medio de la tabla" requiriendo mover registros (page splitting) para hacer lugar y mantener así el órden. Esto implica un impacto en rendimiento al insertar y fragmentación de los datos afectando también la lectura. Se podría jugar con el fill factor para minimizar el impacto.

    • @offGamingChannel
      @offGamingChannel Рік тому +13

      3. La calidad de datos es mejor tratarla al momento de insertar. Por ejemplo, si voy a necesitar luego comparar un string en minúsculas, es mejor ya almacenarlo en minúsculas; luego en todo caso puedo convertirlo a camel case al mostrarlo. En este caso, se utilizar la función LOWER() sobre el campo "name" para buscar registros. Tener en cuenta que el uso de una función sobre un campo inhibe el uso de índices (en versiones anteriores a MySQL 8); es decir, por más que creemos un índice por "name" no será tomando en cuenta. Los indices funcionales (los que se crean a partir del resultado de una función) fueron agregados en MySQL 8.

    • @offGamingChannel
      @offGamingChannel Рік тому +13

      Muy buen video! Espero mi aporte como DBA sea de utilidad. =)

    • @futudev
      @futudev 9 місяців тому

      Excelente aporte!

  • @oOserg1Oo
    @oOserg1Oo Рік тому +2

    estuve buscando por un tiempo sobre injeccion de dependicias lo entendi pero hacian uso de algun otra libreria, gracias por tu tiempo por que acabo de darme cuenta que no se necesita de tantas librerias para poder lograr algunas cosas.

    • @midulive
      @midulive  Рік тому +1

      Exacto, no se necesitan librerías para conseguirlo. Aunque pueden ayudar, el concepto se puede hacer sin nada!

  • @juansebastian2721
    @juansebastian2721 7 місяців тому

    Magnifico trabajo Midu, he aprendido un montón, muchas gracias por tomarte el tiempo para compartir tus conocimientos. Un saludo Capo.

  • @faustojosevincesmendoza6854
    @faustojosevincesmendoza6854 Рік тому +21

    Lo bueno de mysql2 es que crea una PISCINA DE CONEXIONES, asi se reciclan las conexiones y no por cada petición estas conectándote y desconectándote cuando termine, es algo que usa mysql el antiguo.

  • @bettinimarcelo
    @bettinimarcelo Рік тому +8

    para el campo rate les recomiendo usar una restricción CHECK para evitar que sea menor a 0 y mayor a 10

  • @diegovieramartinez2395
    @diegovieramartinez2395 2 місяці тому

    Increíble , me he visto el curso completo , he aprendido un montón de cosas

  • @mafi978
    @mafi978 9 місяців тому +1

    Wow midu la verdad es que con estos cursos estoy aprendiendo más conceptos de programación, patrones, arquitecturas y buenas prácticas, que con asignaturas enteras de la carrera y de forma más dinámica y práctica, eso sí, no creo que sea un curso de inicialización, creo que tienes que tener ya unas bases detrás para poder seguir el ritmo.

  • @karmax068
    @karmax068 Рік тому

    Muchas gracias por este video, llevava esperandolo muchisimo, pero tambien es bueno tomarse descansos, espero y hayas disfrutado tus vacas❤

  • @Retales2022
    @Retales2022 Рік тому

    Me viene de lujo este video ahora la verdad 🙌

  • @SonGoku-pc7jl
    @SonGoku-pc7jl Рік тому

    muchisimas gracias, increible el curso y el patrón de inyeccion de dependencias muy divertido e interesante, infinitas gracias!!!

  • @CharlyAlemania
    @CharlyAlemania Рік тому +1

    1:13:59 Jaja qué genial hostear la Base de Datos de Planet Scale en Frankfurt, yo vivo acá y frente a mi casa hay un data center enorme, quizás esté ahí 🙈

  • @lautarodecima3350
    @lautarodecima3350 Рік тому +2

    Excelente cursos, sos el único que explica estas cosas a detalle en videos espero que sigas así. En este curso vas a incluir la sección de hacer test con vitest o jest??

  • @blurdesigner
    @blurdesigner Рік тому +1

    Hola Midu, no puedo usar la version free para subir la base de datos de mysql, me dice que para mi región no está disponible. Alguna alternativa?

  • @AndrePonc3
    @AndrePonc3 Рік тому +1

    Muy genial midu! :) Gracias por el videazo

  • @TSpods
    @TSpods Рік тому

    muchas gracias por subir estos tutoriales me ayudan muchísimo

  • @dagcomunica5921
    @dagcomunica5921 Рік тому

    Gracias por tan magnifico aporte al conocimiento. Gran video

  • @fprz14
    @fprz14 Рік тому

    Muy educativo, gracias!

  • @jacarrascom
    @jacarrascom 11 місяців тому +1

    Midu, lograste pasar el curso a typescript? En algún momento comentaste de la arquitectura recomendada por expertos, donde tener esa info. Gracias por compartir.

    • @felipe4181
      @felipe4181 7 місяців тому

      Quedé con la misma duda

  • @JCMVBlogs
    @JCMVBlogs Рік тому

    Este hombre me da la vida !

  • @lucaskriger5666
    @lucaskriger5666 Рік тому +7

    Hola, aqui un error que me costo 4 días... Estoy utilizando DBeaver en Windows, conectando con una base de datos MY SQL server 8.0. Por alguna razón que desconozco en lugar de utilizar UUID_TO_BIN utiliza (UNHEX(REPLACE(UUID(), '-', '')) tambien en el SELECT cambialo por: SELECT HEX(id) AS id, title, year, director, duration, poster, rate FROM movie;
    no sé porque utiliza una función de maríaDB si alguien me puede ayudar a entenderlo... Utilizando HEX(id) se generó perfectamente la base de datos.

    • @zhare9811
      @zhare9811 10 місяців тому +1

      yo tambien tuve el mismo error pero según chatgpt es por tema de versiones de mysql seguro midu estaba trabajando con una versión anterior

    • @CarlosFelipeRiveraG-tl2yf
      @CarlosFelipeRiveraG-tl2yf 8 місяців тому

      @@zhare9811 imposible, yo con la última versión y me funciona bien, de pronto deben cambiar el motor a innoDB

    • @alfonsspj
      @alfonsspj 5 місяців тому +2

      para quienes quieran ver el ID en este formato "550e8400-e29b-41d4-a716-446655440000" (UUID)
      en el SELECT que mostro el compañero arriba cambian
      HEX(id) AS id
      por:
      CONCAT_WS('-',
      SUBSTRING(HEX(id), 1, 8),
      SUBSTRING(HEX(id), 9, 4),
      SUBSTRING(HEX(id), 13, 4),
      SUBSTRING(HEX(id), 17, 4),
      SUBSTRING(HEX(id), 21)
      ) AS id

    • @gose03
      @gose03 4 місяці тому

      @@alfonsspj También me costo trabajo, no se en que versión o si es el soporte de la aplicación. Esta información se encuentra en la documentación de MySQL, otro particular es que a mi no me permitio colocar como default esta función, MySQL tiene ese detalle, de hecho tuve que hacer un BeforeInsert Trigger para colocar el NEW.id en (UNHEX(REPLACE(UUID(), '-', '')). Para fines teoricos como este esta bien un Id como el hecho con UUOD, pero se aconseja INT UNSIGNED para este tipo de campos PK

  • @misterl8129
    @misterl8129 6 місяців тому

    1:10:00
    @midu consulta, genial eso de extraer todo y modularizar y encapsular todo de esa manera, pero, así debiese hacerse si es que comenzaste a trabajar con clases?
    Me explico, asumiría que si vas a trabajar con programacion funcional, que todo sea en base a funciones, si es por clases, que todo siga esa estructura y finalmente claro, envolviste parte de la logica en una funcion, hay un mix de ambos, eso se suele ver? Creería que no :o
    Gracias

  • @RemusIPRUNA
    @RemusIPRUNA Рік тому +1

    Hola, soy nuevo en el canale y respetosamente te pregunto, donde estan los cursos que lo estas mencionando en "2:14 Repaso de la clase 4" (y porque no, las clases de 1 al 3). Me interesa entender la mecanica MVC. Creo que eres el unico que lo ha explica a mi entendimiento despues de mirar decenas sino centenas de videos en internet. Muchas gracias!
    EDIT: Lo he encontrado! ajaja

    • @watercubz
      @watercubz Рік тому

      El curso es por parte tienes q verlo desde el 1 al 6

  • @frangarcia7348
    @frangarcia7348 Місяць тому

    PlanetScale elimino la capa gratuita, que plataforma se puede usar para reemplazarla?

  • @jsantos1220
    @jsantos1220 2 місяці тому

    Pregunta, no hay que hacer connection.end() en ninguna parte?

  • @enoccastro9355
    @enoccastro9355 4 місяці тому

    cual es el video anteior? donde se arreglo lo de las cabeceras?

  • @jeanpaulvillarreal4844
    @jeanpaulvillarreal4844 Місяць тому

    Alguien me podría decir y si el propio midu lo puede hacer. ¿Porqué en la inyección de dependencias no se usa un patrón como el factory para hacer una función que mediante parámetros te devuelva un u otro modelo en ves de hacer un archivo para cada modelo?

  • @bryanalexandermoscolbravo4464
    @bryanalexandermoscolbravo4464 6 місяців тому

    Hola Midu, quisiera saber que si una buena practica es usar el los nombre de las columnas los snake_case en minúscula

  • @4lt4r10
    @4lt4r10 Рік тому

    moviendo las consultas desde un SP, también evita las inyecciones!

  • @JoGoku
    @JoGoku 5 місяців тому

    Seria interesante que enlazaras las clases anteriores a los videos, para seguir mejor el orden de las clases

  • @ramirezhernandezrobertocar8591

    Más de Node con MySQL 🙏🙏🙏

  • @DiatonicoWeb
    @DiatonicoWeb Рік тому +1

    Para db en mysql yo uso en mac sequelpro, es liviano y para lo básico va muy bien

  • @nicolasramos8394
    @nicolasramos8394 8 місяців тому +2

    Donde se hizo lo de MongoDB? en la clase anterior ya estaba hecho

    • @felipe4181
      @felipe4181 7 місяців тому

      @midulive llevamos 9 meses esperando, ese bebe no llego 😭

    • @ernestoorange6368
      @ernestoorange6368 3 місяці тому

      creo que se brinco esa parte :(

  • @luizarnoldchavezburgos3638
    @luizarnoldchavezburgos3638 Рік тому +1

    hola midu. Gracias por compartir tu contenido, ahora faltaría ir probando bun con todo este tipo de arquitectura e ir contribuyendo para solucionar los bugs. Ya que creo que bun es el futuro y nodeJS no se va a poner las pilas

    • @santiagowu5365
      @santiagowu5365 Рік тому

      Ya hay integración de Elysia y Prisma para hacer backend con bun.

  • @danielbenavides1907
    @danielbenavides1907 Рік тому +2

    Hola a todos, durante la ejecucion de la bd en mysql me ha dado este error
    Error Code: 1901. Function or expression '`UUID_TO_BIN`()' cannot be used in the DEFAULT clause of `id`
    si alguien le ha sucedido lo mismo, me podria ayudar?

    • @samuelaponte2687
      @samuelaponte2687 10 місяців тому +1

      A mi también me pasa lo mismo :/, lo solucionaste?

    • @danielbenavides1907
      @danielbenavides1907 10 місяців тому +1

      @aponte2687 hola, dentro de la base de datos en la tabla de movies puse esto id varchar(36) primary key default(UUID())
      asi fue como lo solucione!

    • @cesarcoloradocaceres842
      @cesarcoloradocaceres842 7 місяців тому +1

      Es por la versión del MySql,
      para crear el UUID usé esto:
      (UNHEX(REPLACE(UUID(), '-', '')))
      y para recuperarlo:
      CONCAT_WS('-',
      SUBSTR(HEX(id), 1, 8),
      SUBSTR(HEX(id), 9, 4),
      SUBSTR(HEX(id), 13, 4),
      SUBSTR(HEX(id), 17, 4),
      SUBSTR(HEX(id), 21)
      ) AS uuid
      Espero sirva, saludos!

  • @droid-jr9940
    @droid-jr9940 Рік тому

    ando Preparado !!!!! miduLive!!!

  • @juanpasten6077
    @juanpasten6077 8 місяців тому

    Gracias Midu!

  • @jacarrascom
    @jacarrascom Рік тому

    muchas gracias por los videos del curso, son geniales. Que hacer si necesito conectarme con mas de una BD?

  • @diegounanue
    @diegounanue Рік тому

    Cuando sigue este curso no tenia una pagina con el temario y certificado?

  • @Gulliver626
    @Gulliver626 Рік тому

    Hola, que pasa si yo estoy usando sequalize? que puedo hacer? o dejo de usarlo?

  • @Mik3aglin
    @Mik3aglin 6 місяців тому +1

    Buenas gente.
    El tema de inyecciñón de dependencias como lo explica aquí midu.
    Si teneis un servicio que depende de otro, tendrías que pasarle entonces todo a ese servicio?
    Osea el servicio B usa el Servicio A
    El servicio A le tienes que inyectar el modelo A.
    Entocnes al servicio B le vas a tener que inyectar el Modelo B y el Servicio A pero para inyectar el servicio A has tenido que inyectar a su router el modelo A y el modelo B?
    ES un poco jaleo hay alguna otra forma de hacerlo? o se me está pasando algo. O ya habría que usar algun paquete para que te lo gestione rollo spring y puedas inyectarlo de manera más facil?

  • @fernandosoria9129
    @fernandosoria9129 День тому

    no entiendo porque crea una db con dbengin y despues crea otra con workbench y con el mismo puerto, si alguien me explica se lo agradecería

  • @Jefferson-SDET
    @Jefferson-SDET 7 місяців тому

    No desarollo en Javascript, pero los conceptos que se tratan igualmente son muy buenos

  • @Smileeee_23
    @Smileeee_23 Рік тому

    Muchas gracias midu.

  • @AlexYT-f4e
    @AlexYT-f4e Рік тому +2

    Una pregunta sobre la inyección de dependencias... a ver si alguien en los comentarios me puede arrojar luz :D En el ejemplo que ha hecho, al crear la app le pasa el modelo "movie" en el caso de una aplicación con 30 o 40 modelos, por ejemplo... ¿no sería un rollo y un poco chungo tener que pasar todos los modelos? ¿Cuál sería la forma óptima de hacerlo en ese caso?

    • @AlexYT-f4e
      @AlexYT-f4e Рік тому

      nadie? :(

    • @kein7
      @kein7 Рік тому

      Es que para aplicaciones mas grandes ya se empieza a dividir la aplicación en microservicios por lo que no tendrías una aplicación para todo el negocio sino para ciertas funcionalidades especificas de él y ahora respondiendo a tu pregunta si tuvieras 20 o 30 modelos lo mas probable es que la aplicación pueda ser dividida en microservicios donde cada una de ellas cumpla un objetivo concreto. Esto se hace así para poder escalar la infraestructura de manera mas eficaz.

    • @kein7
      @kein7 Рік тому

      De igual forma si tuvieras 20 o 30 modelos seria mucho mejor tenerlos usando mvc que sin una arquitectura definida ya que te permite tener separadas las funcionalidades, además de igual forma es difícil que los 20 y 30 modelos sean de funcionalidades que no tengan relación entre si por lo que podrias ir agrupando en carpetas las que abarcan cierta área de tu aplicación y e ir importando las areas no mas y dentro de cada área se vayan importando los modelos que se desprenden de ellas.

  • @jlonso1840
    @jlonso1840 Рік тому

    En "herramientas a usar" docker cuenta?

  • @Yayobyte
    @Yayobyte 8 місяців тому +1

    gracias por el curso papa. Plannet scale ya no tiene free plans

  • @h3ctor1991
    @h3ctor1991 8 місяців тому

    ¿Tienes un ejemplo o video igual que con posgres?

  • @leonardoramirez8226
    @leonardoramirez8226 Рік тому

    La mejor manera de evitar sql injection , sería tener stored procedures en lugar de los dmls directos

  • @plojiarendio6278
    @plojiarendio6278 Рік тому

    Hola Midu, la plataforma para desplegar ya no acepta constraints por que busca implementar non-blocking schema, hay alguna otra plataforma o hay una forma de solucionarlo?

  • @miguecast
    @miguecast Рік тому +3

    Básicamente lo que ha hecho es encapsular y pasar el modelo como parámetro. Creía que para hacer inyección de dependencias necesitabas crear un contenedor con Awilix o similares.

    • @plasmodiun1
      @plasmodiun1 Рік тому +1

      Tal cual aveces eso de decirlo de otra forma confunde mas cuando no conoces sobre el tema

  • @DAVIDIL81
    @DAVIDIL81 Рік тому +1

    no entiendo para qué sirve o si quiera si es necesario XAMPP o WAMPP o levantar un servidor local...
    perdona mi ignorancia... pero estoy hecho un lío con esto

  • @CarlosFelipeRiveraG-tl2yf
    @CarlosFelipeRiveraG-tl2yf 8 місяців тому

    planetscale ya no ofrece servicios free?

  • @santiagowu5365
    @santiagowu5365 Рік тому +1

    Ahora estoy probando Elysia y Prisma con MySQL para usar bun y es muy cómodo. Para cuando curso de bun midu?

    • @gerrcass1
      @gerrcass1 Рік тому

      Es curioso, veo en la web de bun que dicen ser "SQL-first"... entiendo que va un poco contra el uso de ORM.. ¿Qué opinan?.. Esto dice en su web:
      "Bun's goal is to help you write SQL, not to hide it behind awkward constructs."

  • @uncalvopelabola
    @uncalvopelabola 6 місяців тому

    alguien me dice donde explico lo de la clase 4?

  • @ricardovallejo9471
    @ricardovallejo9471 Рік тому

    Grande midu

  • @JohanChk
    @JohanChk Рік тому

    midu podrías porfavor adjuntar el script de creación de la db, no lo veo en el repositorio

  • @ThePerros14
    @ThePerros14 Рік тому

    Han usado supabase?

  • @JohanChk
    @JohanChk Рік тому

    seguirás haciendo el curso de node? :'|

  • @nilocastilloumeres2437
    @nilocastilloumeres2437 Рік тому

    No se si pueda enviarme el link de las clases hasta el 4to para poder verlo

  • @aerleylopez
    @aerleylopez Рік тому

    Alguien sabe si planetscale es totalmente de paga por que trato de usar la versión gratuita y siempre me pide una targeta de crédito:(

  • @FireCrauter
    @FireCrauter Рік тому

    23:00 con ChatGPT o una IA se puede agregar mas movie

  • @diegonaranjo1874
    @diegonaranjo1874 7 місяців тому

    alguien sabe una buena alternativa para windows de dbngin?

  • @jorgemason8030
    @jorgemason8030 Рік тому

    parece que la version uuid de mysql no es version 4

  • @ThePenitentOneArg
    @ThePenitentOneArg Рік тому +2

    31:52 Midu en modo Milei

  • @10tronic
    @10tronic 11 місяців тому +4

    Como tecleas tan rápido? Practicas en algún lado? Se que usas Copilot sin embargo cuando lo haces tu mismo lo haces a todas hostias. :V

  • @ragnardanneskjold1084
    @ragnardanneskjold1084 Рік тому

    y el link de github??

  • @MarianitoRayser
    @MarianitoRayser Рік тому +1

    Pero de este modo, que tan escalable seria el proyecto???, porejemplo si quiero agregar comentarios en las movies.. o likes... no se complicaria?? Abrazo midu !! gracias por toda esta data..

  • @diego.coder26
    @diego.coder26 Рік тому

    Algún video sobre prisma? :0

  • @pegaenespannol
    @pegaenespannol 7 місяців тому +2

    Planet Scale removió la capa gratuita

  • @Jorge-lg8mx
    @Jorge-lg8mx 6 місяців тому +1

    Adiós al plan "hobby" de Planet Scale :(

  • @user-yg3oc3rt1x
    @user-yg3oc3rt1x 6 місяців тому

    fl0 está caida verdad? O soy el unico que no le deja ingresar?

  • @gusmoeta
    @gusmoeta 3 місяці тому

    planetscale ya no ofrece bbdd gratis desde abril de 2024

  • @jennifferorjuela947
    @jennifferorjuela947 7 місяців тому

    Lastima que todos los servicios que en ese tiempo estaban free, ya no lo estan! :(

  • @JohanChk
    @JohanChk Рік тому

    UNSIGNED para tipos decimales esta deprecado

  • @davosalaz8606
    @davosalaz8606 5 місяців тому

    Es mejor la programación pura y Open source ... En cuanto tenga el tiempo aportaré la mejor identacion en codigo

  • @stivenreina2267
    @stivenreina2267 Рік тому

    20:44

  • @programacion3694
    @programacion3694 8 місяців тому

    owo

  • @benjaminaldaya7235
    @benjaminaldaya7235 Рік тому +1

    a estudiar!!!

  • @fernandosoria9129
    @fernandosoria9129 День тому

    que bodrio es sql, lo que menos me gusta del backend

  • @UltisaerRevternae-pl1rh
    @UltisaerRevternae-pl1rh 8 місяців тому

    38:56 Reto solucionado , filtra por genero y por letra , si quiero todos los géneros que contentan la i se le tiene "Action, Crime, Sci-Fi"
    Tiene la validación de un genero existe o no y luego si trae toda la informacion
    Ademas lo acompañe este reto con el anterior que era traer paginación y para ello con limit y offset se hace sencillo y en la respuesta mande mas información para que el usuario sepa en que pagina esta cuanta información posee esa pagina, la cantidad total de elementos existentes y asi
    static async getAll({ genre, page = 1, size = 3 }) {
    const offset = size * (page - 1);
    let genreCondition = "%%";
    if (genre) {
    const [genreExists] = await connection.query(
    `SELECT EXISTS(SELECT 1 FROM genres WHERE name LIKE ?) AS isExist;`, [`%${genre}%`]
    );
    if (!genreExists[0].isExist) {
    return { message : `Genre ${genre} not found`}
    }
    genreCondition = `%${genre}%`
    }
    const [totalMovies] = await connection.query(
    `SELECT COUNT(DISTINCT m.id) AS total FROM movies AS m;`
    )
    const [totalMoviesByGenre] = await connection.query(
    `SELECT COUNT(DISTINCT m.id) AS total
    FROM movies AS m
    INNER JOIN movies_genres AS mg ON m.id = mg.movie_id
    INNER JOIN genres AS g ON g.id = mg.genre_id
    WHERE g.name LIKE ?;`,
    [genreCondition]
    );
    const total = totalMovies[0].total;
    const totalByGenre = totalMoviesByGenre[0].total;
    const totalPagesByGenre = Math.ceil(totalByGenre / size);

    const [movies] = await connection.query(
    `SELECT
    m.id,
    m.title,
    m.year,
    m.director,
    m.duration,
    m.poster,
    GROUP_CONCAT(g.name ORDER BY g.name) as genre,
    m.rate
    FROM movies as m
    INNER JOIN movies_genres AS mg ON m.id = mg.movie_id
    INNER JOIN genres AS g ON g.id = mg.genre_id
    GROUP BY id
    HAVING genre LIKE ?
    LIMIT ?
    OFFSET ?
    ;`,
    [genreCondition , size, offset]
    );
    return {
    page,
    size,
    total_data_by_genre: totalByGenre,
    total_pages_by_genre: totalPagesByGenre,
    total_data_in_page: movies.length,
    total_entries: total,
    data: movies
    }
    }

  • @sobrehombre9338
    @sobrehombre9338 6 місяців тому

    Gracias Midu!!