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.
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.
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.
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
@@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
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.
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!!
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.
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 ❤❤❤
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.
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.
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??
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.
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
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í 🙈
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
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?
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.
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
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
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.
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?
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.
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.
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?
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!
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."
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
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?
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 } }
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..
Que afortunados somos de tenerte en TH-cam, debemos recompensarte por compartir tu conocimiento, buen amigo y colega.
Midu, este curso tiene mucho nivel, hay muy poco contenido de excelente calidad y gratis como este, la verdad está quedando perfecto.
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.
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.
Muy buen video! Espero mi aporte como DBA sea de utilidad. =)
Excelente aporte!
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.
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
En horabuena Midu Gracias por subir este video, Esperado hace 1 mes :D
😊 a ti
@@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
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.
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!!
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.
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 ❤❤❤
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.
Exacto, no se necesitan librerías para conseguirlo. Aunque pueden ayudar, el concepto se puede hacer sin nada!
para el campo rate les recomiendo usar una restricción CHECK para evitar que sea menor a 0 y mayor a 10
Magnifico trabajo Midu, he aprendido un montón, muchas gracias por tomarte el tiempo para compartir tus conocimientos. Un saludo Capo.
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.
Muchas gracias por este video, llevava esperandolo muchisimo, pero tambien es bueno tomarse descansos, espero y hayas disfrutado tus vacas❤
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??
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.
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
@@zhare9811 imposible, yo con la última versión y me funciona bien, de pronto deben cambiar el motor a innoDB
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
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í 🙈
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
Me viene de lujo este video ahora la verdad 🙌
Muy genial midu! :) Gracias por el videazo
Muchas gracias!
Seria interesante que enlazaras las clases anteriores a los videos, para seguir mejor el orden de las clases
muchisimas gracias, increible el curso y el patrón de inyeccion de dependencias muy divertido e interesante, infinitas gracias!!!
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?
moviendo las consultas desde un SP, también evita las inyecciones!
Gracias Midu!!
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?
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.
Tal cual aveces eso de decirlo de otra forma confunde mas cuando no conoces sobre el tema
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
El curso es por parte tienes q verlo desde el 1 al 6
muchas gracias por subir estos tutoriales me ayudan muchísimo
No desarollo en Javascript, pero los conceptos que se tratan igualmente son muy buenos
Más de Node con MySQL 🙏🙏🙏
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
Ya hay integración de Elysia y Prisma para hacer backend con bun.
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.
Quedé con la misma duda
ando Preparado !!!!! miduLive!!!
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?
nadie? :(
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.
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.
Gracias por tan magnifico aporte al conocimiento. Gran video
Muy educativo, gracias!
Para db en mysql yo uso en mac sequelpro, es liviano y para lo básico va muy bien
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?
A mi también me pasa lo mismo :/, lo solucionaste?
@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!
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!
Hola Midu, quisiera saber que si una buena practica es usar el los nombre de las columnas los snake_case en minúscula
Gracias Midu!
Este hombre me da la vida !
muchas gracias por los videos del curso, son geniales. Que hacer si necesito conectarme con mas de una BD?
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
La experiencia xd
gracias por el curso papa. Plannet scale ya no tiene free plans
Ahora estoy probando Elysia y Prisma con MySQL para usar bun y es muy cómodo. Para cuando curso de bun midu?
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."
Muchas gracias midu.
¿Tienes un ejemplo o video igual que con posgres?
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
XAMPP son servidores locales para que funcione tu MySql Workbrench
La mejor manera de evitar sql injection , sería tener stored procedures en lugar de los dmls directos
Cuando sigue este curso no tenia una pagina con el temario y certificado?
23:00 con ChatGPT o una IA se puede agregar mas movie
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?
Adiós al plan "hobby" de Planet Scale :(
Donde se hizo lo de MongoDB? en la clase anterior ya estaba hecho
@midulive llevamos 9 meses esperando, ese bebe no llego 😭
Hola, que pasa si yo estoy usando sequalize? que puedo hacer? o dejo de usarlo?
Grande midu
Planet Scale removió la capa gratuita
si, que falla!
seguirás haciendo el curso de node? :'|
planetscale ya no ofrece servicios free?
En "herramientas a usar" docker cuenta?
No se si pueda enviarme el link de las clases hasta el 4to para poder verlo
alguien me dice donde explico lo de la clase 4?
midu podrías porfavor adjuntar el script de creación de la db, no lo veo en el repositorio
Han usado supabase?
Algún video sobre prisma? :0
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:(
alguien sabe una buena alternativa para windows de dbngin?
fl0 está caida verdad? O soy el unico que no le deja ingresar?
parece que la version uuid de mysql no es version 4
Es mejor la programación pura y Open source ... En cuanto tenga el tiempo aportaré la mejor identacion en codigo
Lastima que todos los servicios que en ese tiempo estaban free, ya no lo estan! :(
y el link de github??
UNSIGNED para tipos decimales esta deprecado
owo
20:44
a estudiar!!!
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
}
}
31:52 Midu en modo Milei
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..