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.
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.
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.
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.
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!!
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.
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í 🙈
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.
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??
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
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
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.
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
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, 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
@@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
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.
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."
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?
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?
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!
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?
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
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!
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.
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.
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.
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!!
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
Increíble , me he visto el curso completo , he aprendido un montón de cosas
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.
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í 🙈
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.
Muchas gracias por este video, llevava esperandolo muchisimo, pero tambien es bueno tomarse descansos, espero y hayas disfrutado tus vacas❤
muchisimas gracias, increible el curso y el patrón de inyeccion de dependencias muy divertido e interesante, infinitas gracias!!!
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??
Me viene de lujo este video ahora la verdad 🙌
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
Para db en mysql yo uso en mac sequelpro, es liviano y para lo básico va muy bien
moviendo las consultas desde un SP, también evita las inyecciones!
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
Seria interesante que enlazaras las clases anteriores a los videos, para seguir mejor el orden de las clases
muchas gracias por subir estos tutoriales me ayudan muchísimo
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
Gracias por tan magnifico aporte al conocimiento. Gran video
Más de Node con MySQL 🙏🙏🙏
Muy genial midu! :) Gracias por el videazo
Muchas gracias!
gracias por el curso papa. Plannet scale ya no tiene free plans
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.
muchas gracias por los videos del curso, son geniales. Que hacer si necesito conectarme con mas de una BD?
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?
23:00 con ChatGPT o una IA se puede agregar mas movie
No desarollo en Javascript, pero los conceptos que se tratan igualmente son muy buenos
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.
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
@@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
ando Preparado !!!!! miduLive!!!
Hola Midu, quisiera saber que si una buena practica es usar el los nombre de las columnas los snake_case en minúscula
Muy educativo, gracias!
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
Donde se hizo lo de MongoDB? en la clase anterior ya estaba hecho
@midulive llevamos 9 meses esperando, ese bebe no llego 😭
creo que se brinco esa parte :(
Este hombre me da la vida !
La mejor manera de evitar sql injection , sería tener stored procedures en lugar de los dmls directos
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."
cual es el video anteior? donde se arreglo lo de las cabeceras?
Cuando sigue este curso no tenia una pagina con el temario y certificado?
Pregunta, no hay que hacer connection.end() en ninguna parte?
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?
Gracias Midu!
PlanetScale elimino la capa gratuita, que plataforma se puede usar para reemplazarla?
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?
¿Tienes un ejemplo o video igual que con posgres?
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!
En "herramientas a usar" docker cuenta?
Muchas gracias midu.
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?
Hola, que pasa si yo estoy usando sequalize? que puedo hacer? o dejo de usarlo?
seguirás haciendo el curso de node? :'|
Algún video sobre prisma? :0
Planet Scale removió la capa gratuita
si, que falla!
Vps de Google , solo lee los requisitos para que sea gratis.
Railway
Adiós al plan "hobby" de Planet Scale :(
planetscale ya no ofrece servicios free?
31:52 Midu en modo Milei
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
Grande midu
Han usado supabase?
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
}
}
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
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
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..
No se si pueda enviarme el link de las clases hasta el 4to para poder verlo
alguien sabe una buena alternativa para windows de dbngin?
parece que la version uuid de mysql no es version 4
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:(
y el link de github??
planetscale ya no ofrece bbdd gratis desde abril de 2024
fl0 está caida verdad? O soy el unico que no le deja ingresar?
Usa railway
Lastima que todos los servicios que en ese tiempo estaban free, ya no lo estan! :(
Es mejor la programación pura y Open source ... En cuanto tenga el tiempo aportaré la mejor identacion en codigo
UNSIGNED para tipos decimales esta deprecado
20:44
owo
a estudiar!!!
Gracias Midu!!