5. CRUD DE PRODUCTOS - CURSO DE BACKEND CON AGENTES DE IA

Publicado em

Vídeo em Espanhol, publicado pelo canal Nube Colectiva Devs.

Sobre este contenido: El resumen, los puntos principales y los temas que aparecen a continuación se generan automáticamente a partir de la transcripción del vídeo. Reflejan el contenido, las opiniones, afirmaciones y predicciones presentadas en el vídeo y no representan una posición, validación o verificación de hechos por parte de IA Dots.

Resumen del vídeo

El video explica cómo reemplazar los datos estáticos en memoria por operaciones reales asíncronas utilizando Mongoose. Se implementa la paginación profesional para evitar saturar la ventana de contexto de los agentes autónomos y se desarrollan las operaciones CRUD (crear, leer todos, leer por ID, actualizar y eliminar) en el controlador y las rutas de productos, realizando pruebas prácticas en Postman.

Puntos principales

  • Se reemplazan los datos estáticos en memoria por operaciones asíncronas utilizando Mongoose para conectar con la base de datos.
  • Se implementa un sistema de paginación con parámetros de consulta para limitar la cantidad de registros devueltos a los agentes y evitar saturar la memoria.
  • Se desarrollan los métodos del controlador para crear un producto, listar todos los productos, buscar un producto por ID, actualizar y eliminar registros.
  • Se configuran validaciones básicas para asegurar que los campos obligatorios como el SKU, el nombre y el precio estén presentes al crear un producto.
  • Se actualizan las rutas del servidor para incluir endpoints tanto de colección como individuales basados en el ID del producto.
  • Se realizan pruebas en Postman para verificar el funcionamiento correcto de todas las operaciones CRUD del sistema.

Temas

MongoosePaginaciónOperaciones CRUDControladorRutas de APIPostmanAgentes autónomos
Transcripción del vídeo

Texto de los subtítulos disponibles; puede contener errores.

leer producto por ID. [resoplido] Este de acá era del libro, ¿no? Este es su ID. Ojo con eso. En este capítulo vamos a reemplazar los datos estáticos en memoria por operaciones reales asíncronas. Vamos a usar Mongose cuando ya lo habíamos instalado anteriormente. También vamos a implementar una paginación profesional para asegurarnos de que los futuros agentes de no traigan miles de registros de golpe y saturen su ventana de contexto. Bien, cuando un agente autónomo consulte nuestra API de productos para tener la lista de productos, no podemos devolverle una base de datos entera de 10,000 item. Esto consumiría millones de token en segundos, aumentaría la latencia y causaría fallos de memoria. Diseñar en point con paginación es una regla de arquitectura clave para back agéntico. Vamos a hacer cambios en nuestro archivo product.croller para utilizar primero el modelo product, el cual queramos acá, que tiene los campos o datos que vamos a usar. Entonces acá vamos a hacer así y por product model from model product. Vale, acá está en la carpeta model product, ¿vale? Acá no dice que hemos declarado product, pero nunca lo hemos usado. Una forma de verificar si se ha vinculado o importado correctamente nuestro modelo es presionar control. Y fíjate, se convierte el puntedito y clic sin soltar y nos enlaza o nos envía a nuestro archivo. Con eso confirmamos que se ha conectado correctamente nuestro modelo. Okay, vamos a usar ahora datos de DB. Fíjate, acá teníamos estos productos de de prueba. Vamos a quitar todo esto, ¿vale? Para hacerlo bien. Nos quedamos acá con el info request response depress. este product moco que lo quitamos y nos quedamos acá con nuestro modelo producto. Okay. Acá vamos [resoplido] a obtener los productos con una paginación con vamos a hacer sp cons products igual a y acá le ponemos punto request punto response 2 minutos espacio. Estanciamos una promesa. Voy a arrow y abrimos acá una llave. Vale, vamos a ocultar acá el panel de archivos y directorio para poder ver bien nuestro código. Como buena práctica, acá vamos a hacer clic y acá vamos a crear una constante llamada page. Vamos a hacer uso de parcing para parar un número, un entero. Accedemos a rec. Este lo definimos acá que hace uso de request, el cual importamos express, ¿vale? Acá le pasamos query pun payas [risas] stram y acá le vamos a poner así uno, ¿qué sería esto? Eh, en esta constante Page lo que hacemos es leer el parámetro de consulta Page que devuelve la paginación. Si no existe o es inválido por defecto usar la página uno, por eso acá le coloco uno. Vale, también vamos a crear una constante llamado limitamos parciar un número. Y acá le ponemos red. punto query punit as stream y acá le colocamos 10. Con este límit acá definimos que la cantidad de datos o elementos por página por efecto va a ser 10, ¿vale? O 10 registros por cada página. Le podemos cambiar o bajar, aumentar, ¿no? Pueden ser 9, 8 o 15 o 20 más, ¿no? También vamos a crear una constante llamada skip y va a realizar una operación. Vamos a restar la varreal page -1 por acá asterisco por Linux. ¿Qué hace esta operación de acá? Lo que hacemos es calcular cuántos documentos debe saltar o omitir la base de datos según la página actual y el límite. Y acá abajito vamos a hacer dos consultas en paralelo a BB. Vamos a hacer constante corchete. Vamos a poner products coma total. igual away. Hacemos una promesa al abrimos paréntesis y corchete. Y acá vamos a llamar nuestro modelo product, el cual importamos acá arribita. Punto fine. Le pasamos ese método para que busque. También le pasamos skip. Este [música] método eh va a saltar. Pero aquí entre paréntesis le pasamos el límite, el salto que que va a hacer, o sea, va ejecutar esta operación acá porque la vamos a pasar aquí es kick. Okay. También vamos a pasarle el limit. Acá colocamos límite, que es este de acá, comandante limit, perdón, es sor para ordenar los registros eh del más nuevo al más antiguo. Para eso hacemos uso de Created AC, que es el campo eh de cada registro. Vamos a abrir acá DB Compas para mostrarte el campo Created Hack. Vamos a conectarnos. Acá está tienda de B. Vamos acá, por ejemplo, los productos. Fíjate, acá hay un campo llamado Created Act que obtiene el tiempo actual en que se creó ese registro, la fecha, la hora, ¿no? Entonces con esta instrucción de aquí, Create AC 2.1, repito, como te mencioné, ordenamos eh el más nuevo, el más antiguo, ¿no? Y acá vamos a contar el total de documentos existentes en la colección para poder hacer la paginación, ¿no? Para que el código haga eso. Acá hacemos producto. Le pasamos el método con documents, ¿vale? Luego de este paréntesis acá, coma, acá abajito vamos a devolver una respuesta http exitosa con la estructura de paginación y la y la lista de productos, ¿vale? Ah, acá colocamos red.jonjon Jason paréntesis entre llaves. Vamos a hacer suces true coma acá paginación. Vamos a hacer la paginación de los datos. Acá vamos primero a obtener el total de productos [música] que hay en la base de datos. Acá con Pay vamos a obtener la página actual. Acá arribita ya lo definimos, ¿cierto? Acá el límit, el límite por página que acá le pusimos de 10 registros por página. Y acá vamos a quedar así. Total Pay. Vamos a hacer uso de la función MAC de JavaScript pun salve y vamos a dividir el total entre el limit. Con esto calculamos el total de páginas y redondeamos hacia arriba. O sea, ponte que las páginas serían eh siete páginas. Entonces lo redondeamos a ocho, ¿no? [música] O sea, siempre hacia arriba. O si es 7.5 se pasaría a ocho, ¿no? Redondeamos hacia arriba. Es como redondear decimales, algo así. Después aquí de esta llave colocamos coma y acá obtenemos los productos. Acá este productos acá en esta constante products, ¿vale? Con este listamos los productos obtenidos. Luego de este paréntesis de acá colocamos coma y vamos a trabajar en el catch. Acá colocamos catas. Acá entre paréntesis definimos error pun y abrimos llave aquí y vamos a capturar cualquier error inesperado del servidor y respondemos con estatus un código 500. en Jonéntesis llaves. Acá devolvemos suces como falso porque hubo un error. Devolvemos acá un mensaje que diga error al obtener la lista de productos. Y acá devolvemos el error para saber qué está pasando y poder corregir. Por eso si se tricat es una buena práctica hacer esto, ¿vale? Con este je product obtenemos acá los productos, ¿vale? Vamos a ponerlo así. Obtenemos los productos. Este sería leer algo así, ¿no? Es como una tarea cruz. Ahora vamos a pasar a lo que vendría a ser crear un producto con post, [resoplido] ¿vale? poner así crear un proyecto. Creamos sport cons create product y ahí le colocamos a de paréntesis recordo request. de express com reson también hacemos instancia de promes promesa voy a arrow y acá abrimos llave acá también vamos a hacer uso de trick siempre es buena práctica, como te mencioné anteriormente. para degar. Acá vamos a extraer con cons entre llaves. Vamos a extraer las propiedades principales del cuerpo de la petición o pilac, ¿vale? Colocamos K, el título, la descripción, el precio, las etiquetas. igual red. Body. Aquí debajo del este cons eh vamos a validar de forma básica, se puede decir, si faltan campos obligatorios imprescindibles para el producto. Entonces, acá lo hacemos así. If CU o si no hay título [risas] o si el precio es igual definir o no está definido. paréntesis. Paréntesis, abrimos llave, devolvemos un red status con código 400 con una respuesta en formato Jason. Quer di acá suces y acá eh mensaje que diga los campos de CK. como título y precio son obligatorios. Vale, con esto repito, validamos de si faltan campos obligatorios, que este es y este es imprescindible para son campos imprescindibles que debe tener el producto, al menos el SQU, [música] su código, su título y su precio. Acá después de este paréntesis colocamos coma y hacemos return para detener la ejecución si la validación falla. Okay. Luego de esta llave, después de este retol, tenemos acá esta llave. Acá abajito vamos a colocar una constante llamada new product y llamamos al modelo nuestro modelo productamos acá arribita, ¿vale? Y ahí abrimos paréntesis, llaves, definimos su código oku, subtítulo del producto, la descripción, el precio, etiquetas, tag o corchete. Vale, con esto, ¿qué es lo que hacemos? Si no hay etiquetas, si lápiz no devuelve etiquetas, asinamos un arreglo vacío con estos corchetes. Okay. Y acá SEO Optimiz que lo definimos. Vamos a ponerlo como falsy. Eh, por efecto lo vamos a hacer que no sea optimizado parao, ¿vale? Eso sería otro tema. Acá luego de este paréntesis ponemos y coma y acá vamos a crear una constante llamada product igual a llamamos a new product. Este new product es el que definimos aquí contamos save. Con esto guardamos el nuevo documento que creemos el nuevo producto en nuestra base de datos Deb. Vale, acá vamos a colocar res. Vamos a devolver un estado http con código 2011 con datos en formato Jason. eh que diga que se ha sido que se ha creado y el objeto se ha guardado. Acá colocamos uses true coma. Acá colocamos M6 para poner el mensaje que diga producto guardado con éxito en la base de datos. puntito. ¿Cómo? Y acá devolvemos eh save product, este de aquí eh que son bueno es el producto que se ha guardado, ¿vale? Luego aquí de este paréntesis colocamos punto y coma y acá vamos aquí a manejar el cach. Le ponemos aquí error 2 punand. Abrimos llaves y acá vamos a detectar si ocurre el un error clásico con código 11000 de deb que es la violación de índice único. Por ejemplo, cuando hay un SKU repetido, ¿no? O el código de producto repetido. Esta es una validación muy importante que se debe hacer y se suele hacer, ¿vale? al menos para nuestro proyecto, porque hay otras formas de manejar ese error 11,000 de deb, ¿vale? No quiero enfocarme tanto en eso, sino que estamos viendo el curso de de agentes de backing con agentes, ¿no? La idea es esa. Entonces, acá vamos a detectar si ocurre el error 11000 de ODB. Colocamos así, si el código de error es 11000. Así 11 y treros entre abrimos llaves y acá devolvemos una respuesta http, una respuesta con código 400 y datos en Jason paréntesis y llaves. Acá vamos a colocar sucesiano falso y un mensaje que diga error al crear el producto. Acá colocamos error y devolvemos el error para saber qué está pasando. Okay. Acá colocamos punto y coma y aquí punto coma. Vale, con esto hemos creado nuestra nuestro método para crear productos. Vale, ahora vamos a crear un método para obtener un producto por su ID, o sea, producto de forma individual, porque acá arribita o tenemos también productos acá arriba, pero todos, todos en general, pero cuando queremos leer datos o detalle de solo un único producto, debemos usar su ID. Aquí vamos a crear una constante export constante y product by id. Vale, si te has dado cuenta, largo de este curso y en otro curso suelo usar los nombres en inglés. Esto es porque es un estándar, ¿vale? Así que es bueno acostumbrarnos a trabajar en inglés. Por más que no sepas el idioma, te va a ser muy útil, ya que las documentaciones y muchas cosas que podemos encontrar en internet o leer que nos pueden servir, nos pueden ayudar, están en inglés. Así que es una forma de irse adaptando. Ya yo personalmente tengo más de 17 años como ingeniero de software y estoy acostumbrado a manejar todo en inglés. Y recomendable también estudiar inglés porque eso te puede servir y te puede abrir muchas puertas. ¿Vale? Entonces acá le ponemos igual a 100 paréntesis request objeto request res y response de express, ¿no? Acá también estanciamos una promesa, voy row y abrimos llaves. Acá también vamos a hacer uso de tricct como buena práctica. [resoplido] [risas] trives y acá vamos a crear una constante entre llaves para extraer el parámetro o ID de la URL, ¿vale? Acá igual reun para también vamos a crear una constante llamada product. Si el código se ve muy pequeño, avísame para hacerlo más grande para los próximos videos. Probablemente ahí le podemos poner zoom, ¿no? Ahí creo que está bien. Le metí un poco de zoom. Ya. Bueno, nos quedamos con ese zoom. Acá dentro de la constante product y llamamos a nuestro modelo producto y buscamos ahí por ID con el método Fine by ID. Ahí le pasamos este ID de acá arribita. ID. Okay, con esta línea buscamos en la base de datos el producto que coincida con este ID único que le enviemos. Vale, vamos a hacer acá una validación con if. Si no hay producto, entonces devolvemos una respuesta http con código 404. y el contenido Jason que devolverá un volano false y acá un mensaje que diga producto encontrado coma Y acá abajito vamos a colocar un retool para detener la ejecución del código, ¿vale? Porque si acá no hay un producto, mostramos de frente el mensaje que no se ha encontrado por el ID, ¿no? Estamos buscando por ID y tenemos el código. Y si el producto sí se encuentra, entonces devolvemos los datos de ese producto. Aquí despuésa coma sencillamente colocamos un res pun jjon paréntesis y acá entre llaves vamos a hacer así suces true coma data dos puntos producto y luego acá después esta llave vamos a hacer el catch Colocamos error 2. Entre llaves. Acá vamos a devolver si es que el ID tiene un formato inválido para deb, por ejemplo, o hay algún otro error. Ponemos un código 500 acá con res punstatus código 500 punto el mensaje Jason paréntesis llaves volvemos uses como fals y mensaje que diga no válido. o error de servidor. Después acá de cerrar esta comida simple, vamos a colocar coma y acá abajito error punto el error, ¿no? Para saber qué está pasando. punto y coma. Este R Jon lo podríamos devolver así para que se vea mejor, ¿no? Pero más práctico ponerlo acá en una sola línea. Recuerda que mientras menos línea de código, nuestro archivo pesará menos. Y no digo que esto hagará la gran diferencia, pero si muchas líneas las hacemos con lo más mínimo, vamos a ahorrar espacio en el disco de nuestro servidor o computadora, porque mientras menos pesado el archivo, menos espacio se ocupa, ¿no? Entonces eso sería para obtener un producto por su ID. Ahora vamos acá a crear el método actualizar. producto. Estamos haciendo las tareas Croup, ¿vale? Nuestro controlador. Aquí vamos también a crear exports. Vamos a ponerle product. Igual definimos para request, després y res para respons. Promesa acá voy a arrow, abrimos llaves y acá vamos a hacer un tre, ¿vale? Luego veremos el catch también, ¿no? Entonces acá vamos a colocar una constante ID y le pasamos reparams. Lo que hacemos aquí es extraer el ID de producto desde los parámetros de la URL para poder buscar nuestro producto con ese ID y poder actualizarlo, ¿cierto? Acá eh queramos bueno la constante data producte y ahí le pasamos a away, llamamos a nuestro modelo producto y buscamos [risas] G by ID y porque vamos a actualizar y abrimos paréntesis y ahí le pasamos el ID. R body y acá entre llaves vamos a poner así new como true y room validators como true. ¿Qué es lo que hacemos con esto de acá que está entre llaves? Devolvemos el documento ya actualizado, ¿vale? Con Room Validator True se aplica validaciones del esquema al actualizar, ¿vale? Luego de este paréntesis colocamos puncom y vamos a hacer una validación también aquí si es que no se encuentra el producto al actualizar. O sea, imaginemos que buscamos por ID ese producto y no se encuentra. Entonces, hay que devolver un mensaje. Entonces, vamos a hacer así para validar if. Si si no update product esta constante de aquí si no se encuentra el ID porque acá hace la búsqueda por ID para actualizar por ID del producto. Si no se encuentra acá hacemos red punstatus 404 Jason corchetes llaves. Y acá [carraspeo] vamos a devolver un suces como falso [risas] y un mensaje que diga producto no encado para actualizar sencillamente. Creo acá este paréntesis punto y coma y de acá vamos a poner un return para detener la ejecución del código por si no se encontró el el producto, el ID y se devuelve este este mensaje, ¿no? El producto no encontrado para actualizar. Pero si el producto fue modificado luego de este if acá esta llave, vamos a devolver una respuesta http. Vamos a devolver. Pero si el producto sí fue encontrado y actualizado, vamos a devolver un texto, una respuesta a Jason con suces. como true mensaje mensaje que diga producto actualizado con éxito y acá devolvemos el producto actualizado. Acá cerramos con punto y coma y acá vamos a manejar el capch de paréntesis error acá entre llaves vamos a devolver una respuesta http con código 500, código de estado 500. con eh bueno, acá es paréntesis llaves y acá vamos a definir suces como falses, que es un error. También devolvemos mensaje que diga error al actualizar el producto, coma acá. Y acá abajito el error, error pun acá. Punto y coma, ¿vale? Eso sería nuestro método para actualizar un producto, ¿vale? Luego lo vamos a probar con Postmac. Control S para guardar. Y por último vamos a crear nuestro método para eliminar un producto. Estamos haciendo las cuatro operaciones básicas. Cru, crear, leer, eliminar, actualizar. No olvides seguirnos en las redes sociales. En nubeculativa.com. Presiona el icono social. Publicamos contenido gratuito todos los días para que sigas creciendo como profesional. Aquí vamos a crear sport constante, vamos a llamarlo del product de forma síncrona y ahí le pasamos request de press y responces. una promesa row y aimos Java. Aquí vamos a usar también tri. Vamos a sacar acá una constante llamada ID para también obtener el ID que queremos eliminar, el ID del producto que queremos eliminar, ¿no? Luego que obtenemos eh el ID, acá definimos a llamamos al nuestro modelo producto y hacemos uso del método fin, buscar por ID, fin by ID and delic o o eliminar. Y ahí le pasamos el ID, esta constante acá, este ID ahí le metemos. Vale, vamos a hacer acá una validación. Si el producto ponte que no existía previamente, vamos a devolver un código http 404 porque puede que el producto eh existía, entonces la validación, o sea, ya haya existido anteriormente, la validación puede ayudarnos, puede pasarnos si eh del product, si no del product o no existe producto. Entoncesemos un código 404 con un un texto que no, con este dato que true eh perdón, acá sería false porque es un 404 y acá un mensaje que diga producto no encontrado para eliminar aquí punto y coma y le ponemos return para cancelar la ejecución del código, ¿no? ¿Qué? Ahora aquí vamos a validar si el producto eh no existe, ¿no? Que queremos eliminar eh en la caché, en la pantalla puede aparecer todavía el producto, pero de repente eh no está. Entonces es importante validar que exista eh en el backing, ¿no? Acá vamos a validar si existe por si ¿no? Si del product de acá que elimina, busca y elimina por ID. Si si no existe el producto, entonces acá devolvemos un red status 404 Jason. Y vamos a devolver suces como falso y el mensaje que diga producto no contrado para eliminar acá. coma. Y acá colocamos un return para detener la ejecución del código porque si no se encontró el ID del producto eliminar no tiene sentido continuar ejecutando el código. Luego aquí si es que si se encontró el del producto entonces una respuesta en Jasones lo devolvemos como Turbe y M lo devolvemos con el texto producto eliminado correctamente de la base de datos. Acá punto y coma y acá vamos a trabajar el catch. Acá colocamos error 2. Acá abrimos llave y capturamos cualquier error que devuelva nuestro servidor. Vamos a devolver un código 500 con una respuesta Jason. en donde suces va a venir como falso. Y vamos a devolver el mensaje que diga error al eliminar el producto acá, coma. Y acá abajito el error para saber qué está pasando acá. Punto y coma. Y ahí está. Eso sería nuestro eh método del deck product para eliminar el producto por ID. Esto sería todo nuestro product controller por ahora. Vale, ahora vamos a actualizar nuestras rutas. Vamos acá a abrir el panel de archivos y carpetas. Acá vamos en rutas, desglosamos y acá abrimos product.roest.ts. Vamos a abrir acá y vamos a actualizar. Vale, aquí tenemos nuestra ruta de de la colección, ¿vale? que trae los productos, crea productos. Bueno ya acá los hemos definido, ¿cierto? Jet product, acá está J product y Create Product. Acá está. Esto ya lo habíamos definido anteriormente porque queramos datos de prueba de de mentira, se puede decir, pero ahora sí vamos a trabajar con datos de verdad. Aquí vamos a agregar hm rutas adicionales. Este caso para manejar por ID, ¿no? Podríamos acá colocar comentarios que diga así, rutas de colección, o sea, que devuelve datos masivos porque acá obtenemos todos los productos y acá enviamos productos, ¿no? Pero por ID, si te das cuenta, tenemos que pasarle el ID, ¿no? En este caso, creo, no necesitamos un ID porque se está creando un nuevo registro, pero lo podemos definir así como rutas de colección. Entonces acá vamos a poner rutas individuales por ID, ¿no? Porque, por ejemplo, acá nosotros podríamos hacer así, ¿no? Eh, cuando seamos Postman o nuestro proyecto, nuestros agentes, consulten, digamos, van a hacer así API, eh, B1, la versión del API, el point products y acá se le pasa el ID, ¿cierto? Por eso lo catalogo acá, lo le pongo rutas individuales por ID. Acá arribita vamos a ponerlo también asente paréntesis para que se vea igual. Este vamos a seleccionarlo. Control X y lo voy a poner acá arribita para que se vea más ordenado. Vale, ahora aquí vamos a definir router acá perdón. product routes punto router. Y aquí paréntesis comilla simple, vamos a colocar slash2.id ID porque vamos a pasar acá las ID. Acá ponemos punto porque acá vamos a hacer uso del método para usar Jack product by ido, es el que queramos acá para leer por ID. Y product by ID. Abajito vamos a hacer uso del método P para actualizar el Date Product. Este de acá que también actualiza por ID y nuestro método de le. Bueno, hacemos uso del método de le pero le pasamos el método de product que acá elimina el producto por ide. Vale, control S. Ahora vamos a hacer pruebas en Postman. Aquí me faltó después de del acá puno. Okay, como buena práctica. Ahora vamos aar control N para abrir la terminal de Visual Code y vamos a ejecutar el servidor local con npm Round. Okay. Y acá me da un error. Es normal porque estamos eh desarrollando. Acá nos dice que error expect, pero no se encontró model. A ver, a ver. En product controller acá en la línea 14, que está 14 de 12. Vamos hacia arriba. Product model dice acá no lo encuentro [resoplido] aquí. Acá al final después este paréntesis como ya está, ya se fue el error. Vamos a presionar control S clear limpiar y volvemos a ejecutar npm room de para iniciar el servidor local. Okay, dice cliente llama inicializado correctamente. Lápid inicia ha iniciado correctamente. No hemos conectado a DB y la piagéntica está corriendo en local host 3000. Vamos a abrir nuestro PMAN. Vamos a probar nuestra nuestro API con las operaciones crud. Acá para mantener el orden vamos a crear acá una nueva colección, nueva collection. Vamos a ponerle curso. Ben con agentes de guía para mantener en orden nuestras tareas en postm, nuestras peticiones, ¿vale? Y acá podemos presionar sobre la colección creada al request. Vamos a cerrar esto de acá. Okay. Aquí vamos a hacer uso del método post. Primero vamos a crear un producto. Aquí vamos a quedar HT. Bueno, acá está. Fíjate la solo que aquí después de B1 hay que ponerle products. Vale, acá el método está bien post. Eh, en body vamos a elegir R Jason. Okay. Y acá vamos a enviarle eh SK. Vale, si vamos a DB, acá tenemos este producto de prueba, ¿vale? Vamos a ponerle uno, por ejemplo, o 001, ¿vale? Y acá también vamos a enviarle un título que sería el nombre, ¿vale? El producto, por ejemplo, que diga libro de código limpio. Un ejemplo, coma. Acá también vamos a enviarle el precio puntos. Vamos a ponerle así 20.00. Vale, acá falta la comita. Control S para guardar y vamos a enviar acá a ver qué pasa. Si nos da algún error lo corregimos, no hay problema. Y acá se queda así. Responce. Y acá se queda así. Response nunca termina. Vamos a ver. Ahora que recuerdo acá el precio es como tipo número. Entonces hay que cancelar acá y aquí enviarlo como número. Vale 20.00. Te enviamos [resoplido] y sigue sin responder. Vamos a cancelar y ver qué está pasando. Vamos a minimizar acá. Vamos a código. Vamos aar contrña. Aquí cerramos la terminal. Aquí create product. Probablemente me faltó algo. A ver, vamos a ver. Vamos a hacer unas correcciones aquí, ¿vale? En el método create producto carrito. Este con sock no lo estoy usando, así que lo quitamos. Vale, este creat product aquí vamos a definir luego de este red body una constante llamada price igual number de paréntesis price y aquí validamos si no hay saq, no hay título, [música] precios son indefinidos y también o clave numeric price, la cual definimos acá arribita, ¿vale? Y acá en la respuesta está bien. Los campos de título y precio son obligatorios. Y acá la constante new pry se que títul en descripción podemos ponerle así dos puntos description o vacío, ¿no? Por si no hay descripción para que pase. En cuanto al precio, acá vamos a ponerle dos punto numeric price, la cual definimos acá arribita. Es decir, así lo pases como texto, te lo va a convertir a número siempre, ¿vale? Con number. Acá le pasamos al precio. En cuanto está bien, ¿vale? Y acá en R status volvemos 2001 trueer. Okay. En el catch, aquí en el catch podemos mejorar algo. Aquí hacemos la validación si es que hay un código de 11,000 de deb. Devolvemos eh aquí error producto eh el sku vamos a ponerlo. Eh, el productor que el producto este ya fue registrado. Porque el código 11,000 de es cuando ya existe ese ID en la base de datos ¿vale? Y acá también vamos a añadir después de este punto y coma un retom para detener la ejecución del código. Luego de esta llave de aquí vamos a también devolver un código 500 porque vamos también a ver otro error, ¿no? Eh, o sea, manejamos todos los errores. Acá yo había puesto solo para que maneje el código 11000 de que es de deb de ID registrado o duplicado, pero no consideré que debemos registrar todos los errores que sucedan en el servidor para saber qué pasa, ¿no? Entonces acá el suces lo devolvemos como falso. Acá el mensaje. Vamos a poner error a crear el producto en el servidor. Acá error el error para saber qué pasa. Okay. Acá pun coma y vamos a probar a ver vamos a presionar control N, control C limpiamos hemos detenido el servidor lo volvemos a ejecutar con npm Runter. Vamos a a Postman y volvemos a enviar y me dice acá y me dice acá su false error a que el producto en el servidor. Product validación fil nombre. El título de producto es obligatorio. Acá ya le estamos pasando títel, pero me dice que es obligatorio. Entonces, vamos a ver acá alquerar el producto. Parece que acá este títel debería ser nombre, ¿no? Vamos a nuestro modelo, nuestro modelo productos y si lo cambiamos a nombre. Anteriormente le habíamos puesto títel, por eso que me está dando ese error. Es es nombre, ¿no? Entonces, ya olvidémonos de títer. Vamos a buscar todos los títarlos con nombre. Acá. Replace replace replace. Ya está todo, ¿no? Control S para guardar. Control N. Detendemos el servidor y lo volvemos a arrancar. Ahora sí vamos a probar. Vamos a enviar acá los campos SQU, título y precios son obligatorios. Vamos a ver acá. Parece que eh Express no está encontrando título en el objeto Red Body. Aquí. A ver, acá, ahora que recuerdo, aquí también deberíamos mandar los nombres, ¿cierto? Ya no es títer. Estamos haciéndolo como nombre. Enviamos y ya está. Se guardó el producto. Acá dice la respuesta producto guardado con éxito en la base de datos. Le Google, el libro de código limpio y los demás datos. Vamos a verificar esto acá en nuestra colección producto. Vamos aquí actualizar y no aparece nada. Puede ver es categoría, ¿cierto? Pero aquí no estamos viendo el cambio. Vamos a ver qué está pasando. Ah, acá, mira, vamos a actualizar. Y fíjate, se creó esta tabla aquí, esta base de datos, perdón, cardb. Este de acá solo lo habíamos usado para pruebas. [carraspeo] Pero este agente cardb es la base de datos productos. Y acá está, acá está la colección productos y acá se ha registrado nuestro primer producto. Genial. Acá está su SKU. Este ID lo genera DB automáticamente. Entonces, la tarea de crear producto funciona. Ahora vamos a probar otra tarea. En este caso vamos, ya que creamos un producto, vamos a probar Jack Products, que acá sería obtener todos los productos, ¿cierto? Entonces vamos acá a postma y acá en vez de post sería un jack simplemente no vamos a crear una nueva consulta copiar esto nada más lo pegamos acá y enviamos [música] iniciamento y ahí está. Fíjate, me devolvió la paginación que configuramos con los límites y los datos de los productos. Genial. Vamos a guardarlo aquí. Aquí podemos ponerle un nombre, crear producto, que vamos a ponerle nombre listar todos los productos. Vamos a crear una nueva petición. [resoplido] Acá vamos a hacer la tarea que venir a hacer o tener el producto por ID, ¿no? Vamos a crear otro producto. Vamos a tener tres productos, ¿vale? Ya creamos este, este sería el 002. Ahora podríamos también hacer que el mismo ne, el mismo node, nuestro código, genera [resoplido] automáticamente ese SK1, ¿no?, pero de ejemplo, mientras lo estoy haciendo manualmente, de forma manual. Entonces acá le ponemos 002 y acá vamos a ponerle zapatillasillas naranjas para runing, por ejemplo, ¿vale? El precio pongámosle 300, por ejemplo, ¿vale? Y enviamos y ya está. Producto guardado. Vamos a verificar acá. Actualizamos y ahí está las zapatillas naranjas para runing. Genial. Vamos a agregar uno más acá en SQU. Vamos a ponerle tres acá. Vamos a ponerle pelota de basket, por ejemplo, ¿vale? Que cueste. No estoy tan seguro cuánto costaría una pelota de basket. Pongámosle 250 [música] ¿vale? Y enviamos. Y ya está. producto guardado. Vamos acá y ahí están los tres productos. Esto lo hice para poder acceder o tener un producto por su ID ¿no? Y acá vamos a guardar control S. Acá siitamos todos los productos, fíjate, me devuelve el total de productos. Eso lo configuramos también, que es útil para la paginación. Vamos acá eh vamos a obtener un producto por su ID. Para leer un producto por ID, acá definimos y acá en la URL podemos copiar rápidamente aquí. Control C, lo pegamos y acá después de product. Acá en DB tenemos estos IDs, esto de acá, ¿vale? Que lo genera automáticamente. Vamos a actualizar acá el libro de código limpio, ¿vale? Entonces acá seleccionamos, este sería su ID. Vamos a copiar, lo pegamos ahí y acá presionamos enviar. Acá con el método Jack, fíjate, devolvemos el libro de código limpio con su precio su SQU. Vale, acá vamos a ponerle, [carraspeo] vamos a guardarlo aquí. Curso backing. Vamos a ponerle un nombre acá. Leer producto por ID. Vale, vamos a hacer una nueva petición. Ahora la otra tarea sería eh actualizar el producto. Vale, creo que dije que íbamos a actualizar anteriormente, pero no, solo le dimos por idea el producto. Ahora vamos a actualizar este producto. Aquí vamos a elegir el método Pug. Eh, aquí copiamos [resoplido] la URL para avanzar rápido. Acá está bien. Vamos a actualizar el libro de código limpio. Acá vamos a cambiar el precio. Vamos a ponerle 50. Y aquí en body R Jason. Acá vamos. Podemos definir los mismos campos que acá definimos. Esto acá. Eh [carraspeo] vamos a copiar aquí mismo. Pegamos acá su ID. Sí, es uno. No hay que no hay que olvidarnos. Perdón, de este caso era de leer producto por ID. Este de acá era de libro, ¿no? Este es su ID. Ojo con eso. Vale, acá [resoplido] ya lo tenemos arribita. El nombre sería lo que le pusimos. Libro de código limpio, control C, control V. Y aquí el precio vamos a ponerle 50, como te dije y vamos a regarle un dato adicional que sería las tag, ¿vale? Recuerda que en nuestro modelo acá también tenemos tag, ¿vale? que no es un campo requerido como el precio y otros más, pero vamos a probar para ver si funciona. Vamos a colocar acá corchetes, vamos a ponerle programación coma. Acá después de tag dos puntitos, acá programación acá code. Vamos a ponerle tres tag, por ejemplo, ¿vale? Y enviamos y fíjate, producto actualizado con éxito. Le cambiamos el precio a 50 y le agregamos estas estas tres tag. Vamos a verificar acá de Actualizamos y fíjate, acá está el libro de código limpio, cambia el precio a 50 y este ray de tag también se lo agregamos. Genial. Y por último, la tarea que teníamos acá era del producto o eliminar producto. Vamos a eliminar un producto. Vamos a eliminar el de Basket. Vale, acá aquí, perdón, en un ODB tenemos esta acá pelota de basket. Vamos a copiar su ID, ¿vale? Vamos a copiarlo, ¿eh? Y acá vamos a crear una nueva petición. En este caso, aquí el método vamos a ponerle del y acá sería eh acá tenemos el ID. Voy a pegarlo control B, pero aquí voy a copiar aquí la URL de LAPI. Control C. Selecciono control C y lo pegamos acá. Lo juntamos ahí ¿vale? Y aquí ya se sabe por defecto que al pasarle el método de le va a eliminar. Enviamos y dice producto eliminado correctamente de la base de datos. Vamos a verificar si acá pelota de basquet eliminado. Actualizamos. Y fíjate, sí se actualizó, se eliminó el producto pelota de basac. Si acá vamos a listar todos los productos, ya no va a mostrar tres, sino dos vamos a obtener. Y es cierto, solo me devuelve las zapatillas y el libro. Vale, entonces hemos hecho todas las tareas de forma correcta. Aquí este aquí eh vamos a guardarlo también en curso backend de agentes y acá vamos a ponerle un nombre para mantener el orden. Actualizar producto por ID. Presionamos enter se guarda. Y este de acá vamos a guardarlo también. Control S, pulso de back save. Y acá vamos a presionar botón derecho, cambiar el nombre, eliminar producto por ID. Está así mantenemos el orden. Hasta aquí este capítulo sobre las tareas CRW de nuestro sistema agtico. Vale, nos vemos en el siguiente capítulo de este curso gratis de Backen con agentes de IA. Estos primeros videos estamos creando una base, un API para nuestro [música] sistema de backen con agentes de guía. A partir del video 8 o del capítulo 8 de este curso vas a ver todo lo interesante. Nos vemos en el siguiente

Assistir ao vídeo original no YouTube

Assuntos: Agentes de IA. Publicado no YouTube em 2026-10-17.

Seleção automática por assunto e idioma. O vídeo pertence ao canal de origem.

Comentários

Postagens mais visitadas deste blog

How to build a JARVIS AI Voice Agent for FREE | Full Livekit Tutorial (2026)

How Does AI Actually Work? 🤖 | AI, Machine Learning & Generative AI Explained