{"info":{"_postman_id":"a62339b7-ab2d-4cd1-9b73-65fd34c848f9","name":"Haciendola TEST","description":"<html><head></head><body><h3 id=\"desafío-técnico-api-rest-para-e-commerce\">Desafío Técnico: API REST para E-commerce</h3>\n<p>La API REST para E-commerce es una solución creada como parte de un desafío técnico para evaluar conocimientos en desarrollo backend. Esta API proporciona funcionalidades esenciales para un sistema de comercio electrónico, incluyendo autenticación de usuarios, gestión de productos, carrito de compras y pedidos.</p>\n<h3 id=\"características-principales\">Características principales:</h3>\n<ul>\n<li><p><strong>Autenticación JWT</strong>: Se utiliza JSON Web Tokens (JWT) para manejar la autenticación de usuarios.</p>\n</li>\n<li><p><strong>Encriptación de contraseñas</strong>: Las contraseñas se almacenan en la base de datos encriptadas utilizando Bcrypt.</p>\n</li>\n<li><p><strong>Gestión de Productos</strong>: Se incluyen endpoints para crear, actualizar, eliminar y obtener detalles de productos.</p>\n</li>\n<li><p><strong>Gestión de Carrito de Compras</strong>: Funcionalidades para agregar productos al carrito, eliminar productos y obtener el contenido del carrito.</p>\n</li>\n<li><p><strong>Gestión de Pedidos</strong>: Se permite a los usuarios realizar pedidos, ver el historial de pedidos y obtener detalles de pedidos específicos.</p>\n</li>\n</ul>\n<h3 id=\"tecnologías-utilizadas\">Tecnologías utilizadas:</h3>\n<ul>\n<li><p><strong>Express</strong>: Framework web para Node.js que se utiliza para construir la API REST.</p>\n</li>\n<li><p><strong>PostgreSQL</strong>: Sistema de gestión de bases de datos relacional.</p>\n</li>\n<li><p><strong>Sequelize ORM</strong>: ORM (Object-Relational Mapping) para Node.js, utilizado para interactuar con la base de datos PostgreSQL.</p>\n</li>\n<li><p><strong>Bcrypt</strong>: Librería para el hash de contraseñas.</p>\n</li>\n<li><p><strong>Json Web Token</strong>: Implementación de JWT para Node.js.</p>\n</li>\n<li><p><strong>Nodemailer</strong>: Módulo para enviar correos electrónicos, utilizado en la recuperación de contraseñas.</p>\n</li>\n</ul>\n<h3 id=\"endpoints-y-funcionalidades\">Endpoints y funcionalidades:</h3>\n<ol>\n<li><p><strong>Autenticación de usuarios</strong>:</p>\n<ul>\n<li><p>Endpoint: <code>/api/auth/login</code></p>\n</li>\n<li><p>Método: POST</p>\n</li>\n<li><p>Descripción: Permite a un usuario iniciar sesión. Se requiere el email y la contraseña del usuario. Retorna un token de autenticación en caso de éxito.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Registro de usuarios</strong>:</p>\n<ul>\n<li><p>Endpoint: <code>/api/auth/register</code></p>\n</li>\n<li><p>Método: POST</p>\n</li>\n<li><p>Descripción: Permite a un usuario registrarse en la aplicación. Se requieren el nombre, email y contraseña del usuario.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Gestión de Productos</strong>:</p>\n<ul>\n<li><p>Endpoint: <code>/api/products</code></p>\n</li>\n<li><p>Métodos: GET (obtener todos los productos), POST (crear un nuevo producto)</p>\n</li>\n<li><p>Descripción: Permite crear, obtener, actualizar y eliminar productos.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Gestión de Carrito de Compras</strong>:</p>\n<ul>\n<li><p>Endpoint: <code>/api/cart</code></p>\n</li>\n<li><p>Métodos: GET (obtener contenido del carrito), POST (agregar producto al carrito), DELETE (eliminar producto del carrito)</p>\n</li>\n<li><p>Descripción: Permite agregar productos al carrito, eliminar productos y obtener el contenido del carrito.</p>\n</li>\n</ul>\n</li>\n<li><p><strong>Gestión de Pedidos</strong>:</p>\n<ul>\n<li><p>Endpoint: <code>/api/orders</code></p>\n</li>\n<li><p>Métodos: GET (obtener todos los pedidos), POST (realizar un nuevo pedido)</p>\n</li>\n<li><p>Descripción: Permite a los usuarios realizar pedidos, ver el historial de pedidos y obtener detalles de pedidos específicos.</p>\n</li>\n</ul>\n</li>\n</ol>\n<p>Cada endpoint incluye instrucciones detalladas sobre su uso y los parámetros requeridos, incluidos en esta documentación.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"25294531","collectionId":"a62339b7-ab2d-4cd1-9b73-65fd34c848f9","publishedId":"2sA3QmCZbk","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2024-05-18T22:15:38.000Z"},"item":[{"name":"Usuarios","item":[{"name":"Obtener mis datos de usuario","event":[{"listen":"test","script":{"id":"a7accf77-487b-4292-9a8b-c1169963c0ae","exec":["pm.test(\"Response status code is 200\", function () {","    pm.response.to.have.status(200);","    ","    //si la prueba pasa entonces vamos a guardar el token en una variable de collection para ahorrarnos trabajo posteriormente","    if (pm.response.code === 200) {","        let jsonData = pm.response.json();","        pm.collectionVariables.set(\"token\", jsonData.token);","    }","});",""],"type":"text/javascript","packages":{}}}],"id":"62d22fa3-9a8c-4f1b-8226-048784e0590d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"urlencoded","urlencoded":[]},"url":"http://localhost:9000/api/v1/users/me","description":"<h2 id=\"obtener-mis-datos-de-usuario\">Obtener Mis Datos de Usuario</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET /api/v1/users/me</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint permite a los usuarios autenticados obtener sus propios datos de usuario. La solicitud debe incluir el token JWT en el encabezado de autorización.</p>\n<h3 id=\"url\">URL</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">http://localhost:9000/api/v1/users/me\n\n</code></pre>\n<h3 id=\"encabezados\">Encabezados</h3>\n<ul>\n<li><code>Authorization: jwt </code></li>\n</ul>\n<h3 id=\"ejemplo-de-solicitud\">Ejemplo de Solicitud</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">GET http://localhost:9000/api/v1/users/me\nAuthorization: jwt \n\n</code></pre>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta contiene los detalles del usuario autenticado.</p>\n<h4 id=\"cuerpo-de-la-respuesta-200-ok\">Cuerpo de la Respuesta (200 OK)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"UUID\",\n    \"firstName\": \"text\",\n    \"lastName\": \"text\",\n    \"email\": \"text\",\n    \"phone\": \"text\",\n    \"role\": \"integer\",\n    \"status\": \"text\",\n    \"isVerified\": \"boolean\",\n    \"passwordRequest\": \"UUID\",\n    \"createdAt\": \"datetime\",\n    \"updatedAt\": \"datetime\",\n    \"userRoleId\": \"integer (puede ser nulo)\",\n    \"user_role\": \"text (puede ser nulo)\"\n}\n\n</code></pre>\n<h3 id=\"ejemplo-de-respuesta-200-ok\">Ejemplo de Respuesta (200 OK)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"13fbe739-7a63-466e-bf3d-58d39d206c45\",\n    \"firstName\": \"Luis\",\n    \"lastName\": \"Gomez\",\n    \"email\": \"lufe023@gmail.com\",\n    \"phone\": \"+123456789\",\n    \"role\": 2,\n    \"status\": \"active\",\n    \"isVerified\": false,\n    \"passwordRequest\": \"5402c26d-efe9-440f-b593-c94689f3f275\",\n    \"createdAt\": \"2024-05-12T00:04:51.201Z\",\n    \"updatedAt\": \"2024-05-25T15:02:07.258Z\",\n    \"userRoleId\": null,\n    \"user_role\": null\n}\n\n</code></pre>\n<h3 id=\"posibles-códigos-de-estado\">Posibles Códigos de Estado</h3>\n<ul>\n<li><p><code>200 OK</code>: La solicitud se procesó correctamente y se devolvieron los detalles del usuario.</p>\n</li>\n<li><p><code>401 Unauthorized</code>: La solicitud no está autenticada correctamente.</p>\n</li>\n<li><p><code>500 Internal Server Error</code>: Ocurrió un error en el servidor al procesar la solicitud.</p>\n</li>\n</ul>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li>Asegúrese de proporcionar un token JWT válido en el encabezado de autorización.</li>\n</ul>\n<hr />\n<p>Esta documentación incluye todos los detalles necesarios para comprender y utilizar el endpoint de obtención de datos del usuario autenticado, incluyendo ejemplos de solicitudes y respuestas, así como posibles códigos de estado.</p>\n","urlObject":{"path":["api","v1","users","me"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"62d22fa3-9a8c-4f1b-8226-048784e0590d"},{"name":"Obtener un usuario por ID","event":[{"listen":"test","script":{"id":"a7accf77-487b-4292-9a8b-c1169963c0ae","exec":["pm.test(\"Response status code is 200\", function () {","    pm.response.to.have.status(200);","    ","    //si la prueba pasa entonces vamos a guardar el token en una variable de collection para ahorrarnos trabajo posteriormente","    if (pm.response.code === 200) {","        let jsonData = pm.response.json();","        pm.collectionVariables.set(\"token\", jsonData.token);","    }","});",""],"type":"text/javascript","packages":{}}}],"id":"3399906b-03fb-4b05-a7e5-d38dbc78da35","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"urlencoded","urlencoded":[]},"url":"http://localhost:9000/api/v1/users/13fbe739-7a63-466e-bf3d-58d39d206c45","description":"<h2 id=\"obtener-usuario-por-id\">Obtener Usuario por ID</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET /api/v1/users/:id</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint permite obtener los detalles de un usuario específico utilizando su ID. No se requieren variables en el cuerpo de la solicitud; el ID del usuario se envía como un parámetro en la URL.</p>\n<h3 id=\"url\">URL</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">bashCopiar códigohttp://localhost:9000/api/v1/users/:id\n\n</code></pre>\n<h3 id=\"parámetros-de-la-url\">Parámetros de la URL</h3>\n<ul>\n<li><code>id</code> (UUID): El ID del usuario que se desea obtener.</li>\n</ul>\n<h3 id=\"ejemplo-de-solicitud\">Ejemplo de Solicitud</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">bashCopiar códigoGET http://localhost:9000/api/v1/users/13fbe739-7a63-466e-bf3d-58d39d206c45\n\n</code></pre>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta contiene los detalles del usuario con el ID especificado.</p>\n<h4 id=\"cuerpo-de-la-respuesta-200-ok\">Cuerpo de la Respuesta (200 OK)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"UUID\",\n    \"firstName\": \"text (puede ser nulo)\",\n    \"lastName\": \"text (puede ser nulo)\",\n    \"email\": \"text\",\n    \"phone\": \"text (puede ser nulo)\",\n    \"role\": \"integer\",\n    \"status\": \"text\",\n    \"isVerified\": \"boolean\",\n    \"passwordRequest\": \"UUID\",\n    \"createdAt\": \"datetime\",\n    \"updatedAt\": \"datetime\"\n}\n\n</code></pre>\n<h3 id=\"posibles-códigos-de-estado\">Posibles Códigos de Estado</h3>\n<ul>\n<li><p><code>200 OK</code>: La solicitud se procesó correctamente y se devolvieron los detalles del usuario.</p>\n</li>\n<li><p><code>400 Bad Request</code>: El formato del ID del usuario es inválido.</p>\n</li>\n<li><p><code>404 Not Found</code>: No se encontró un usuario con el ID especificado.</p>\n</li>\n<li><p><code>500 Internal Server Error</code>: Ocurrió un error en el servidor al procesar la solicitud.</p>\n</li>\n</ul>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li><p>Asegúrese de que el ID del usuario sea un UUID válido.</p>\n</li>\n<li><p>Este endpoint solo proporciona información sobre el usuario. Para actualizar o eliminar un usuario, utilice los endpoints correspondientes.</p>\n</li>\n</ul>\n<h3 id=\"ejemplo-de-respuesta\">Ejemplo de Respuesta</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"UUID\",\n    \"firstName\": \"text (puede ser nulo)\",\n    \"lastName\": \"text (puede ser nulo)\",\n    \"email\": \"text\",\n    \"phone\": \"text (puede ser nulo)\",\n    \"role\": \"integer\",\n    \"status\": \"text\",\n    \"isVerified\": \"boolean\",\n    \"passwordRequest\": \"UUID\",\n    \"createdAt\": \"datetime\",\n    \"updatedAt\": \"datetime\"\n}\n\n</code></pre>\n","urlObject":{"path":["api","v1","users","13fbe739-7a63-466e-bf3d-58d39d206c45"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"3399906b-03fb-4b05-a7e5-d38dbc78da35"},{"name":"Obtener todos los usuarios del sistema","event":[{"listen":"test","script":{"id":"a7accf77-487b-4292-9a8b-c1169963c0ae","exec":["pm.test(\"Response status code is 200\", function () {","    pm.response.to.have.status(200);","    ","    //si la prueba pasa entonces vamos a guardar el token en una variable de collection para ahorrarnos trabajo posteriormente","    if (pm.response.code === 200) {","        let jsonData = pm.response.json();","        pm.collectionVariables.set(\"token\", jsonData.token);","    }","});",""],"type":"text/javascript","packages":{}}}],"id":"c2ad3234-8ec0-4209-ba68-ae5acf6fcc99","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"urlencoded","urlencoded":[]},"url":"http://localhost:9000/api/v1/users?offset=0&limit=1","description":"<h2 id=\"obtener-todos-los-usuarios\">Obtener Todos los Usuarios</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET /api/v1/users</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint permite obtener una lista paginada de todos los usuarios del sistema. La solicitud puede incluir parámetros de paginación opcionales <code>offset</code> y <code>limit</code> para controlar los resultados devueltos.</p>\n<h3 id=\"url\">URL</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">http://localhost:9000/api/v1/users?offset={offset}&amp;limit={limit}\n\n</code></pre>\n<h3 id=\"parámetros-de-la-url\">Parámetros de la URL</h3>\n<ul>\n<li><p><code>offset</code> (integer, opcional): El índice del primer usuario que se debe devolver. El valor predeterminado es <code>0</code>.</p>\n</li>\n<li><p><code>limit</code> (integer, opcional): El número máximo de usuarios que se deben devolver. El valor predeterminado es <code>10</code>.</p>\n</li>\n</ul>\n<h3 id=\"encabezados\">Encabezados</h3>\n<ul>\n<li><code>Authorization: jwt </code></li>\n</ul>\n<h3 id=\"ejemplo-de-solicitud\">Ejemplo de Solicitud</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">GET http://localhost:9000/api/v1/users?offset=0&amp;limit=1\nAuthorization: jwt \n\n</code></pre>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta contiene la lista paginada de usuarios, junto con metadatos sobre la paginación.</p>\n<h4 id=\"cuerpo-de-la-respuesta-200-ok\">Cuerpo de la Respuesta (200 OK)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"next\": \"URL\",\n    \"prev\": \"URL\",\n    \"offset\": \"integer\",\n    \"limit\": \"integer\",\n    \"count\": \"integer\",\n    \"results\": [\n        {\n            \"id\": \"UUID\",\n            \"firstName\": \"text (puede ser nulo)\",\n            \"lastName\": \"text (puede ser nulo)\",\n            \"email\": \"text\",\n            \"phone\": \"text (puede ser nulo)\",\n            \"role\": \"integer\",\n            \"status\": \"text\",\n            \"isVerified\": \"boolean\",\n            \"passwordRequest\": \"UUID\",\n            \"createdAt\": \"datetime\",\n            \"updatedAt\": \"datetime\"\n        }\n    ]\n}\n\n</code></pre>\n<h3 id=\"ejemplo-de-respuesta\">Ejemplo de Respuesta</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"next\": \"http://localhost:9000/api/v1/users?offset=1&amp;limit=1\",\n    \"prev\": null,\n    \"offset\": 0,\n    \"limit\": 1,\n    \"count\": 2,\n    \"results\": [\n        {\n            \"id\": \"13fbe739-7a63-466e-bf3d-58d39d206c45\",\n            \"firstName\": null,\n            \"lastName\": null,\n            \"email\": \"lufe023@gmail.com\",\n            \"phone\": null,\n            \"role\": 1,\n            \"status\": \"active\",\n            \"isVerified\": false,\n            \"passwordRequest\": \"5402c26d-efe9-440f-b593-c94689f3f275\",\n            \"createdAt\": \"2024-05-12T00:04:51.201Z\",\n            \"updatedAt\": \"2024-05-16T03:18:01.595Z\"\n        }\n    ]\n}\n\n</code></pre>\n<h3 id=\"posibles-códigos-de-estado\">Posibles Códigos de Estado</h3>\n<ul>\n<li><p><code>200 OK</code>: La solicitud se procesó correctamente y se devolvió una lista de usuarios.</p>\n</li>\n<li><p><code>401 Unauthorized</code>: La solicitud no está autenticada correctamente.</p>\n</li>\n<li><p><code>500 Internal Server Error</code>: Ocurrió un error en el servidor al procesar la solicitud.</p>\n</li>\n</ul>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li><p>Asegúrese de proporcionar un token JWT válido en el encabezado de autorización.</p>\n</li>\n<li><p>Use los parámetros <code>offset</code> y <code>limit</code> para paginar a través de los resultados de los usuarios.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","v1","users"],"host":["http://localhost:9000"],"query":[{"key":"offset","value":"0"},{"key":"limit","value":"1"}],"variable":[]}},"response":[],"_postman_id":"c2ad3234-8ec0-4209-ba68-ae5acf6fcc99"},{"name":"Registrar Usuario","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 201\", function () {","    pm.expect(pm.response.code).to.equal(201);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});"],"type":"text/javascript","packages":{}}}],"id":"6599efa1-cc12-4806-960f-b484924a26b8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"winderly@gmail.com\",\r\n    \"password\": \"haciendola\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000/api/v1/auth/register","description":"<h3 id=\"registrar-un-usuario\">Registrar un usuario</h3>\n<p>Este endpoint permite a los usuarios registrarse proporcionando su correo electrónico y contraseña.</p>\n<h4 id=\"cuerpo-de-la-solicitud\">Cuerpo de la solicitud</h4>\n<ul>\n<li><p>email (cadena, obligatorio): la dirección de correo electrónico del usuario. debe ser correo electronico</p>\n</li>\n<li><p>password (cadena, obligatoria): la contraseña de la cuenta de usuario.</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON que representa el estado de registro del usuario.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n \"type\": \"object\",\n  \"properties\": {\n    {\n      \"type\": \"string\"\n    },\n    \"isVerified\":\n    {\n      \"type\": \"boolean\"\n    },\n    \"id\":    \n    {\n      \"type\": \"string =&gt; uuid\"\n    },\n    {\"email\":\n      \"type\": \"string\",\n     }\n     {\n    \"role\":\n      \"type\": \"integer\"\n      }\n   }\n}\n\n</code></pre>\n","urlObject":{"path":["api","v1","auth","register"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"6599efa1-cc12-4806-960f-b484924a26b8"},{"name":"Iniciar Session","event":[{"listen":"test","script":{"id":"a7accf77-487b-4292-9a8b-c1169963c0ae","exec":["pm.test(\"Response status code is 200\", function () {","    pm.response.to.have.status(200);","    ","    //si la prueba pasa entonces vamos a guardar el token en una variable de collection para ahorrarnos trabajo posteriormente","    if (pm.response.code === 200) {","        let jsonData = pm.response.json();","        pm.collectionVariables.set(\"token\", jsonData.token);","    }","});",""],"type":"text/javascript","packages":{}}}],"id":"092907c9-5d73-4a64-920d-f02b80c9c03a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"lufe023@gmail.com\",\r\n    \"password\": \"haciendola2025\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000/api/v1/auth/login","description":"<h3 id=\"iniciar-session\">Iniciar Session</h3>\n<p>Este permite a los usuarios autenticarse y obtener un token para acceder a recursos protegidos.</p>\n<h3 id=\"cuerpo-de-la-solicitud\">Cuerpo de la Solicitud</h3>\n<ul>\n<li><p><strong>email</strong> (string, required): El correo del usuario</p>\n</li>\n<li><p><strong>password</strong> (string, required): La constraseña del usuario.</p>\n</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>Tras una solicitud exitosa, el servidor responde con un código de estado de 200 y un objeto JSON que contiene los siguientes campos:</p>\n<ul>\n<li><p><strong>message</strong> (string): un mensaje que indica el resultado de la autenticación.</p>\n</li>\n<li><p><strong>token</strong> (string): El token de autenticación que se utilizará para acceder a los recursos protegidos, tambien tenemos una prueba que al dar positivo esta guardará el nuevo token en una variable global que podrá ser utiilizada en esta colección.</p>\n</li>\n<li><p><strong>expiresAt</strong> (string): La fecha y hora de vencimiento del token.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","v1","auth","login"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"092907c9-5d73-4a64-920d-f02b80c9c03a"},{"name":"Petición para recuperar contraseña","event":[{"listen":"test","script":{"id":"8aba6335-ee40-47da-a263-8910321c5f54","exec":[""],"type":"text/javascript","packages":{}}}],"id":"dd0d9af8-8602-476c-96fa-8be57afe3873","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"email\": \"lufe023@gmail.com\",\r\n    \"frontendHost\":\"https://cursos.haciendola.com/password/new\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/users/passwordRequest/","description":"<h3 id=\"descripción-de-la-solicitud-de-la-api\">Descripción de la Solicitud de la API</h3>\n<p>Este endpoint de API es una solicitud POST utilizada para enviar una solicitud de contraseña para usuarios. La solicitud debe ser enviada a <a href=\"http://localhost:9000/api/v1/users/passwordRequest/\">http://localhost:9000/api/v1/users/passwordRequest/</a> con un cuerpo JSON en bruto que contenga el correo electrónico del usuario y los detalles del host frontend.</p>\n<p>Cuerpo de la Solicitud:</p>\n<ul>\n<li><p>email (cadena): El correo electrónico del usuario que solicita la contraseña.</p>\n</li>\n<li><p>frontendHost (cadena): Los detalles del host frontend, este es una url en donde está el formulario para actualizar la contraseña.</p>\n</li>\n</ul>\n<h3 id=\"respuesta-de-la-api\">Respuesta de la API</h3>\n<p>Tras una ejecución exitosa, la API devuelve una respuesta con un código de estado de 201 y un tipo de contenido JSON. El cuerpo de la respuesta contiene un mensaje confirmando la solicitud de contraseña exitosa.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \n   \"message\": \"string\"\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","users","passwordRequest",""],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"dd0d9af8-8602-476c-96fa-8be57afe3873"},{"name":"Actualizar la contraseña","id":"bca5f3b8-f298-4c2a-b22f-7b8a66bcf7d2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[],"body":{"mode":"raw","raw":"{\r\n        \"newPassword\": \"haciendola2025\",\r\n        \"confirmNewPassword\": \"haciendola2025\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/users/passwordRequest/a4acd2be-70de-486f-b643-86d2bc8cb9af","description":"<p>Este endpoin permite al usuario actualizar su contraseña enviando una solicitud HTTP PATCH a la URL especificada. La solicitud debe incluir el identificador único del usuario en la ruta URL este codigo el usuario lo tendrá en su correo electronico con todo y url, tambien en el cuerpo envie la nueva contraseña y confirmación, la conraseña quedará hasheada y encriptada en la DB</p>\n<h3 id=\"request-body\">Request Body</h3>\n<ul>\n<li><code>newPassword</code> (string): La nueva contraseña del usuario.</li>\n<li><code>confirmNewPassword</code> (string): la confirmacón de la nueva contraseña, el backend va a confirmar que sea la misma.</li>\n<li><strong>/passwordRequest/:idRequest</strong> (uuid): enviar como paramereo el codigo enviado al correo electronico</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta será en formato JSON con estado 200. El esquema de respuesta es el siguiente:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"object\",\n    \"properties\": {\n        \"message\": {\n            \"type\": \"string\"\n        }\n    }\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","users","passwordRequest","a4acd2be-70de-486f-b643-86d2bc8cb9af"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"bca5f3b8-f298-4c2a-b22f-7b8a66bcf7d2"},{"name":"Actualizar Información del Usuario por Id","id":"d6370cd9-9d64-49c1-a4da-a7f18d9eaa30","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PATCH","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\r\n    \"firstName\": \"Luis\",\r\n    \"lastName\": \"Gomez\",\r\n    \"phone\": \"+123456789\",\r\n    \"status\": \"active\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000/api/v1/users/13fbe739-7a63-466e-bf3d-58d39d206c45","description":"<h2 id=\"actualizar-usuario\">Actualizar Usuario</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>PATCH /api/v1/users/:id</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint permite actualizar los detalles de un usuario específico utilizando su ID. La solicitud debe incluir el token JWT en el encabezado de autorización y el usuario debe tener permisos de administrador.</p>\n<h3 id=\"url\">URL</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">http://localhost:9000/api/v1/users/:id\n\n</code></pre>\n<h3 id=\"parámetros-de-la-url\">Parámetros de la URL</h3>\n<ul>\n<li><code>id</code> (UUID): El ID del usuario que se desea actualizar.</li>\n</ul>\n<h3 id=\"encabezados\">Encabezados</h3>\n<ul>\n<li><p><code>Authorization: jwt </code></p>\n</li>\n<li><p><code>Content-Type: application/json</code></p>\n</li>\n</ul>\n<h3 id=\"cuerpo-de-la-solicitud\">Cuerpo de la Solicitud</h3>\n<p>La solicitud debe incluir los campos que se desean actualizar. Todos los campos son opcionales.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"firstName\": \"text (opcional)\",\n    \"lastName\": \"text (opcional)\",\n    \"phone\": \"text (opcional)\",\n    \"status\": \"text (opcional)\"\n}\n\n</code></pre>\n<h3 id=\"ejemplo-de-solicitud\">Ejemplo de Solicitud</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">PATCH http://localhost:9000/api/v1/users/13fbe739-7a63-466e-bf3d-58d39d206c45\nAuthorization: jwt \nContent-Type: application/json\n{\n    \"firstName\": \"Luis\",\n    \"lastName\": \"Gomez\",\n    \"phone\": \"+123456789\",\n    \"status\": \"active\"\n}\n\n</code></pre>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta indica si el usuario se actualizó correctamente o si ocurrió un error.</p>\n<h4 id=\"cuerpo-de-la-respuesta-200-ok\">Cuerpo de la Respuesta (200 OK)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"User with ID: {id}, edited successfully!\"\n}\n\n</code></pre>\n<h4 id=\"cuerpo-de-la-respuesta-404-not-found\">Cuerpo de la Respuesta (404 Not Found)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Invalid ID\"\n}\n\n</code></pre>\n<h4 id=\"cuerpo-de-la-respuesta-400-bad-request\">Cuerpo de la Respuesta (400 Bad Request)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Error message\"\n}\n\n</code></pre>\n<h3 id=\"ejemplo-de-respuesta-200-ok\">Ejemplo de Respuesta (200 OK)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"User with ID: 13fbe739-7a63-466e-bf3d-58d39d206c45, edited successfully!\"\n}\n\n</code></pre>\n<h3 id=\"posibles-códigos-de-estado\">Posibles Códigos de Estado</h3>\n<ul>\n<li><p><code>200 OK</code>: La solicitud se procesó correctamente y el usuario se actualizó.</p>\n</li>\n<li><p><code>400 Bad Request</code>: Ocurrió un error con la solicitud.</p>\n</li>\n<li><p><code>404 Not Found</code>: No se encontró un usuario con el ID especificado.</p>\n</li>\n<li><p><code>401 Unauthorized</code>: La solicitud no está autenticada correctamente.</p>\n</li>\n<li><p><code>403 Forbidden</code>: El usuario no tiene permisos para realizar esta acción.</p>\n</li>\n<li><p><code>500 Internal Server Error</code>: Ocurrió un error en el servidor al procesar la solicitud.</p>\n</li>\n</ul>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li><p>Asegúrese de proporcionar un token JWT válido en el encabezado de autorización.</p>\n</li>\n<li><p>Solo los usuarios con permisos de administrador pueden actualizar la información de otros usuarios.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","v1","users","13fbe739-7a63-466e-bf3d-58d39d206c45"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"d6370cd9-9d64-49c1-a4da-a7f18d9eaa30"}],"id":"102a6bbe-d58a-45ee-9b6c-a78d0e14f6d3","description":"<p>Carpeta para manejar todos los endpoints relacionados con los usuarios</p>\n","_postman_id":"102a6bbe-d58a-45ee-9b6c-a78d0e14f6d3"},{"name":"Productos","item":[{"name":"Ver un producto por ID","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 200\", function () {","    pm.expect(pm.response.code).to.equal(200);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});"],"type":"text/javascript","packages":{}}}],"id":"db1d6bd9-fd1b-4629-83a4-86ff7cc23266","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/products/57ce8176-d7d4-42a5-8ec9-142759df962a","description":"<h3 id=\"obtener-productos\">Obtener productos</h3>\n<p>Este endpoint se utiliza para obtener un producto específico según su ID.</p>\n<h4 id=\"parámetros-de-consulta\">Parámetros de consulta</h4>\n<ul>\n<li>Se envia el id de tipo UUID en la url /api/v1/products/:id</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON que contiene la información del producto recuperado. El esquema de la respuesta es el siguiente:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\"\n    },\n    \"Handle\": {\n      \"type\": \"string\"\n    },\n    \"Title\": {\n      \"type\": \"string\"\n    }, \n    \"Description\": {\n      \"type\": \"string\"\n    },\n    \"SKU\": {\n      \"type\": \"string\"\n    },\n    \"Grams\": {\n      \"type\": \"number\"\n    },\n    \"Stock\": {\n      \"type\": \"number\"\n    },\n    \"Price\": {\n      \"type\": \"number\"\n    },\n    \"ComparePrice\": {\n      \"type\": \"number\"\n    },\n    \"Barcode\": {\n      \"type\": \"string\"\n    },\n    \"category\": {\n      \"type\": \"number\"\n    },\n    \"createdBy\": {\n      \"type\": \"string\"\n    },\n    \"createdAt\": {\n      \"type\": \"string\"\n    },\n    \"updatedAt\": {\n      \"type\": \"string\"\n    },\n    \"categoryDetails\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"number\"\n        },\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"parent\": {\n          \"type\": \"number\"\n        },\n        \"createdAt\": {\n          \"type\": \"string\"\n        },\n        \"updatedAt\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","products","57ce8176-d7d4-42a5-8ec9-142759df962a"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"db1d6bd9-fd1b-4629-83a4-86ff7cc23266"},{"name":"Ver un productos por ID de Categoría","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 200\", function () {","    pm.expect(pm.response.code).to.equal(200);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 300ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(300);","});"],"type":"text/javascript","packages":{}}}],"id":"50d3b055-290f-4415-9fe9-647dc74dcfdf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/products/category/1?offset=0&limit=20","description":"<h3 id=\"ver-productos-por-id-de-categoría\">Ver Productos por ID de Categoría</h3>\n<p>Esta solicitud HTTP GET recupera una lista de productos pertenecientes a una categoría específica. La solicitud incluye el ID de la categoría, el offset y el límite como parámetros de consulta.</p>\n<h4 id=\"solicitud\">Solicitud</h4>\n<ul>\n<li><p><strong>Método:</strong> GET</p>\n</li>\n<li><p><strong>URL:</strong> <code>http://localhost:9000:/api/v1/products/categoryId/:categoryId</code></p>\n</li>\n<li><p><strong>Parámetros de consulta:</strong></p>\n<ul>\n<li><p><code>offset</code> (número): El índice desde el cual se recuperan los productos.</p>\n</li>\n<li><p><code>limit</code> (número): El número máximo de productos a recuperar.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<ul>\n<li><p><strong>Estado:</strong> 200</p>\n</li>\n<li><p><strong>Content-Type:</strong> application/json</p>\n</li>\n</ul>\n<h4 id=\"cuerpo-de-la-respuesta\">Cuerpo de la respuesta</h4>\n<p>La respuesta contiene un objeto JSON con las siguientes propiedades:</p>\n<ul>\n<li><p><code>next</code> (string): El enlace a la siguiente página de productos.</p>\n</li>\n<li><p><code>prev</code> (null): El enlace a la página anterior de productos, que es null en este caso.</p>\n</li>\n<li><p><code>offset</code> (número): El offset usado en la solicitud.</p>\n</li>\n<li><p><code>limit</code> (número): El límite usado en la solicitud.</p>\n</li>\n<li><p><code>total</code> (número): El número total de productos en la categoría.</p>\n</li>\n<li><p><code>products</code> (array): Un array de objetos de producto con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (string): El identificador único del producto.</p>\n</li>\n<li><p><code>Handle</code> (string): El identificador del producto.</p>\n</li>\n<li><p><code>Title</code> (string): El título del producto.</p>\n</li>\n<li><p><code>Description</code> (string): La descripción del producto.</p>\n</li>\n<li><p><code>SKU</code> (string): El SKU del producto.</p>\n</li>\n<li><p><code>Grams</code> (número): El peso del producto.</p>\n</li>\n<li><p><code>Stock</code> (número): El stock disponible del producto.</p>\n</li>\n<li><p><code>Price</code> (número): El precio del producto.</p>\n</li>\n<li><p><code>ComparePrice</code> (número): El precio comparativo del producto.</p>\n</li>\n<li><p><code>Barcode</code> (string): El código de barras del producto.</p>\n</li>\n<li><p><code>category</code> (número): El ID de la categoría del producto.</p>\n</li>\n<li><p><code>createdBy</code> (string): El usuario que creó el producto.</p>\n</li>\n<li><p><code>createdAt</code> (string): La fecha y hora en que se creó el producto.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La fecha y hora en que se actualizó por última vez el producto.</p>\n</li>\n<li><p><code>categoryDetails</code> (objeto): Un objeto que contiene los detalles de la categoría a la que pertenece el producto, con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (número): El identificador único de la categoría.</p>\n</li>\n<li><p><code>name</code> (string): El nombre de la categoría.</p>\n</li>\n<li><p><code>parent</code> (número): El ID de la categoría padre.</p>\n</li>\n<li><p><code>description</code> (null): La descripción de la categoría, que es null en este caso.</p>\n</li>\n<li><p><code>createdAt</code> (string): La fecha y hora en que se creó la categoría.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La fecha y hora en que se actualizó por última vez la categoría.</p>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n","urlObject":{"port":"","path":["api","v1","products","category","1"],"host":["http://localhost:9000"],"query":[{"key":"offset","value":"0"},{"key":"limit","value":"20"}],"variable":[]}},"response":[],"_postman_id":"50d3b055-290f-4415-9fe9-647dc74dcfdf"},{"name":"Buscar Producto","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 200\", function () {","    pm.expect(pm.response.code).to.equal(200);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 300ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(300);","});"],"type":"text/javascript","packages":{}}}],"id":"329b86bf-0348-4cc0-8c0f-41f0e12d13e8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000/api/v1/products/busqueda/Cola?offset=0&limit=20","description":"<h3 id=\"obtener-productos-por-búsqueda\">Obtener Productos por Búsqueda</h3>\n<p>Este endpoint recupera una lista de productos basada en una consulta de búsqueda.</p>\n<h4 id=\"solicitud\">Solicitud</h4>\n<p><strong>URL de Solicitud</strong>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">GET http://localhost:9000:/api/v1/products/busqueda/:searchTerm?offset=0&amp;limit=20\n\n</code></pre>\n<p><strong>Parámetros de Consulta (Query Parameters)</strong>:</p>\n<ul>\n<li><p><strong>offset</strong> (número, opcional): El desplazamiento para paginar los resultados.</p>\n</li>\n<li><p><strong>limit</strong> (número, opcional): El número máximo de resultados a devolver.</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta de esta solicitud es un esquema JSON que representa la estructura del cuerpo de la respuesta. El esquema JSON se puede utilizar para validar los datos de la respuesta contra una estructura predefinida.</p>\n<p><strong>Código de Estado</strong>: 200 OK</p>\n<p><strong>Content-Type</strong>: application/json</p>\n<p><strong>Cuerpo de la Respuesta (Response Body)</strong>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">jsonCopiar código{\n    \"next\": \"string\", // Enlace a la siguiente página de productos.\n    \"prev\": \"string\", // Enlace a la página anterior de productos.\n    \"offset\": \"number\", // Desplazamiento utilizado en la solicitud.\n    \"limit\": \"number\", // Límite utilizado en la solicitud.\n    \"total\": \"number\", // Número total de productos encontrados.\n    \"products\": [\n        {\n            \"id\": \"string\", // Identificador único del producto.\n            \"Handle\": \"string\", // Identificador manejable del producto.\n            \"Title\": \"string\", // Título del producto.\n            \"Description\": \"string\", // Descripción del producto.\n            \"SKU\": \"string\", // Unidad de mantenimiento de existencias del producto.\n            \"Grams\": \"number\", // Peso del producto en gramos.\n            \"Stock\": \"number\", // Stock disponible del producto.\n            \"Price\": \"number\", // Precio del producto.\n            \"ComparePrice\": \"number\", // Precio comparativo del producto.\n            \"Barcode\": \"string\", // Código de barras del producto.\n            \"category\": \"number\", // Identificador de la categoría del producto.\n            \"createdBy\": \"string\", // Usuario que creó el producto.\n            \"createdAt\": \"string\", // Fecha y hora de creación del producto.\n            \"updatedAt\": \"string\", // Fecha y hora de la última actualización del producto.\n            \"categoryDetails\": {\n                \"id\": \"number\", // Identificador único de la categoría.\n                \"name\": \"string\", // Nombre de la categoría.\n                \"parent\": \"number\", // Identificador de la categoría padre.\n                \"description\": \"string\", // Descripción de la categoría.\n                \"createdAt\": \"string\", // Fecha y hora de creación de la categoría.\n                \"updatedAt\": \"string\" // Fecha y hora de la última actualización de la categoría.\n            }\n        }\n    ]\n}\n\n</code></pre>\n","urlObject":{"path":["api","v1","products","busqueda","Cola"],"host":["http://localhost:9000"],"query":[{"key":"offset","value":"0"},{"key":"limit","value":"20"}],"variable":[]}},"response":[],"_postman_id":"329b86bf-0348-4cc0-8c0f-41f0e12d13e8"},{"name":"Ver todos los productos","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 200\", function () {","    pm.expect(pm.response.code).to.equal(200);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});"],"type":"text/javascript","packages":{}}}],"id":"a12513b5-7087-4511-86cd-3cfc2934554d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000/api/v1/products?offset=0&limit=50","description":"<h3 id=\"obtener-productos\">Obtener productos</h3>\n<p>Este endpoint se utiliza para obtener una lista de productos con un desplazamiento y límite específicos.</p>\n<h4 id=\"parámetros-de-consulta\">Parámetros de consulta</h4>\n<ul>\n<li><p>offset (número): El índice de inicio de los productos a recuperar.</p>\n</li>\n<li><p>limit (número): El número máximo de productos a recuperar. El sistema se limitará automáticamente a 100 productos si se proporciona un valor superior a 100 para cuidar la salud del servidor de Base de Datos tambien se establecerá en 100 si limit está ausente o es inferior a 0</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON que contiene la lista de productos recuperados, junto con metadatos adicionales. El esquema de la respuesta es el siguiente:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": {\n      \"type\": \"string\"\n    },\n    \"prev\": {\n      \"type\": \"null\"\n    },\n    \"offset\": {\n      \"type\": \"number\"\n    },\n    \"limit\": {\n      \"type\": \"number\"\n    },\n    \"total\": {\n      \"type\": \"number\"\n    },\n    \"products\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\"\n          },\n          \"Handle\": {\n            \"type\": \"string\"\n          },\n          \"Title\": {\n            \"type\": \"string\"\n          },\n          \"Description\": {\n            \"type\": \"string\"\n          },\n          \"SKU\": {\n            \"type\": \"string\"\n          },\n          \"Grams\": {\n            \"type\": \"number\"\n          },\n          \"Stock\": {\n            \"type\": \"number\"\n          },\n          \"Price\": {\n            \"type\": \"number\"\n          },\n          \"ComparePrice\": {\n            \"type\": \"number\"\n          },\n          \"Barcode\": {\n            \"type\": \"string\"\n          },\n          \"category\": {\n            \"type\": \"number\"\n          },\n          \"createdBy\": {\n            \"type\": \"string\"\n          },\n          \"createdAt\": {\n            \"type\": \"string\"\n          },\n          \"updatedAt\": {\n            \"type\": \"string\"\n          },\n          \"categoryDetails\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"id\": {\n                \"type\": \"number\"\n              },\n              \"name\": {\n                \"type\": \"string\"\n              },\n              \"parent\": {\n                \"type\": \"number\"\n              },\n              \"createdAt\": {\n                \"type\": \"string\"\n              },\n              \"updatedAt\": {\n                \"type\": \"string\"\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"path":["api","v1","products"],"host":["http://localhost:9000"],"query":[{"key":"offset","value":"0"},{"key":"limit","value":"50"}],"variable":[]}},"response":[],"_postman_id":"a12513b5-7087-4511-86cd-3cfc2934554d"},{"name":"Registrar un producto","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 200\", function () {","    pm.expect(pm.response.code).to.equal(200);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});"],"type":"text/javascript","packages":{}}}],"id":"f820f5e4-4683-4f04-8b07-8baf0980289e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\r\n    \"Title\": \"Título del Producto\",\r\n    \"Description\": \"Descripción del Producto\",\r\n    \"SKU\": \"SKU1237\",\r\n    \"Grams\": 500,\r\n    \"Stock\": 100,\r\n    \"Price\": 29.99,\r\n    \"ComparePrice\": 39.99,\r\n    \"Barcode\": \"1234567890123\",\r\n    \"category\": 1 // ID de la categoría del producto puedes ver un listado completo de categorias en myserver/api/v1/categories\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/products/","description":"<h3 id=\"crear-nuevo-producto\">Crear nuevo producto</h3>\n<p>Este endpoint se utiliza para crear un nuevo producto con la información proporcionada en el cuerpo de la solicitud.</p>\n<h4 id=\"parámetros-de-solicitud\">Parámetros de solicitud</h4>\n<ul>\n<li><p>Title (string, required): El título del producto.</p>\n</li>\n<li><p>Description (string, required): La descripción del producto.</p>\n</li>\n<li><p>SKU (string, required): El código SKU del producto.</p>\n</li>\n<li><p>Grams (number, required): El peso del producto en gramos.</p>\n</li>\n<li><p>Stock (number, required): La cantidad de stock disponible del producto.</p>\n</li>\n<li><p>Price (number, required): El precio del producto.</p>\n</li>\n<li><p>ComparePrice (number, required): El precio de comparación del producto.</p>\n</li>\n<li><p>Barcode (string, required): El código de barras del producto.</p>\n</li>\n<li><p>category (number, required): El ID de la categoría del producto. Puedes ver un listado completo de categorías en <a href=\"https://myserver/api/v1/categories\">myserver/api/v1/categories</a>.</p>\n</li>\n</ul>\n<h4 id=\"ejemplo-del-cuerpo-de-la-solicitud\">Ejemplo del cuerpo de la solicitud</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"Title\": \"Título del Producto\",\n  \"Description\": \"Descripción del Producto\",\n  \"SKU\": \"SKU1237\",\n  \"Grams\": 500,\n  \"Stock\": 100,\n  \"Price\": 29.99,\n  \"ComparePrice\": 39.99,\n  \"Barcode\": \"1234567890123\",\n  \"category\": 1\n}\n\n</code></pre>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON que contiene el producto creado. El esquema de la respuesta es el siguiente:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\"\n    },\n    \"Handle\": {\n      \"type\": \"string\"\n    },\n    \"Title\": {\n      \"type\": \"string\"\n    },\n    \"Description\": {\n      \"type\": \"string\"\n    },\n    \"SKU\": {\n      \"type\": \"string\"\n    },\n    \"Grams\": {\n      \"type\": \"number\"\n    },\n    \"Stock\": {\n      \"type\": \"number\"\n    },\n    \"Price\": {\n      \"type\": \"number\"\n    },\n    \"ComparePrice\": {\n      \"type\": \"number\"\n    },\n    \"Barcode\": {\n      \"type\": \"string\"\n    },\n    \"category\": {\n      \"type\": \"number\"\n    },\n    \"createdBy\": {\n      \"type\": \"string\"\n    },\n    \"createdAt\": {\n      \"type\": \"string\"\n    },\n    \"updatedAt\": {\n      \"type\": \"string\"\n    },\n    \"categoryDetails\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"number\"\n        },\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"parent\": {\n          \"type\": \"number\"\n        },\n        \"createdAt\": {\n          \"type\": \"string\"\n        },\n        \"updatedAt\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","products",""],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"f820f5e4-4683-4f04-8b07-8baf0980289e"},{"name":"Actualizar un producto","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 200\", function () {","    pm.expect(pm.response.code).to.equal(200);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});"],"type":"text/javascript","packages":{}}}],"id":"a35ec33b-13b8-492a-b203-ac20cc55ae3e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"PATCH","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\r\n    \"Title\": \"Producto de mi corazon 6\",\r\n    \"Description\": \"Descripción del Producto\",\r\n    \"SKU\": \"SKU123\",\r\n    \"Grams\": 500,\r\n    \"Stock\": 100,\r\n    \"Price\": 29.99,\r\n    \"ComparePrice\": 39.99,\r\n    \"Barcode\": \"1234567890123\",\r\n    \"category\": 1 // ID de la categoría del producto puedes ver un listado completo de categorias en myserver/api/v1/products/categories\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/products/2de0b691-7e5a-473c-96be-5674da1e044e","description":"<h3 id=\"actualizar-producto\">Actualizar Producto</h3>\n<p>Este endpoint se utiliza para actualizar un producto existente en la base de datos.</p>\n<h4 id=\"parámetros-de-cuerpo-de-solicitud\">Parámetros de cuerpo de solicitud</h4>\n<ul>\n<li><p>Title (cadena): El título del producto.</p>\n</li>\n<li><p>Description (cadena): La descripción del producto.</p>\n</li>\n<li><p>SKU (cadena): El código SKU del producto.</p>\n</li>\n<li><p>Grams (número): El peso del producto en gramos.</p>\n</li>\n<li><p>Stock (número): La cantidad de stock disponible del producto.</p>\n</li>\n<li><p>Price (número): El precio del producto.</p>\n</li>\n<li><p>ComparePrice (número): El precio de comparación del producto.</p>\n</li>\n<li><p>Barcode (cadena): El código de barras del producto.</p>\n</li>\n<li><p>category (número): El ID de la categoría del producto. Puedes ver un listado completo de categorías en myserver/api/v1/categories.</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON con el siguiente esquema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"message\": {\n      \"type\": \"string\"\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","products","2de0b691-7e5a-473c-96be-5674da1e044e"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"a35ec33b-13b8-492a-b203-ac20cc55ae3e"},{"name":"Borrar un producto","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 204\", function () {","    pm.expect(pm.response.code).to.equal(204);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});"],"type":"text/javascript","packages":{}}}],"id":"5b84e92b-c1fe-4e52-857a-0604bc4299d4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"DELETE","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/products/def11ebc-124b-4df4-a5cd-8d4bf9538422","description":"<h3 id=\"eliminar-producto\">Eliminar Producto</h3>\n<p>Este endpoint se utiliza para eliminar un producto existente en la base de datos.</p>\n<h4 id=\"parámetros-de-cuerpo-de-solicitud\">Parámetros de cuerpo de solicitud</h4>\n<ul>\n<li>Se debe enviar el (id) UUID del producto despues de la URL. myserver/api/v1/products/:id</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON con el siguiente esquema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": {\n    \"type\": \"string\"\n  }\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","products","def11ebc-124b-4df4-a5cd-8d4bf9538422"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"5b84e92b-c1fe-4e52-857a-0604bc4299d4"}],"id":"ca6fce1a-28fb-4bdc-aed1-c395cdb3a4e6","description":"<p>Carpeta asignada para manejar los endpoints relacionados con los productos</p>\n","_postman_id":"ca6fce1a-28fb-4bdc-aed1-c395cdb3a4e6"},{"name":"Listas Personalizadas","item":[{"name":"Crear Lista","id":"558eb08c-1662-4704-b0c9-0734471ad9f0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\n\t\"userId\": \"ee89de86-31cc-4135-8b3a-3d1e08a891b0\",\n\t\"nombreDeLista\": \"Regalos\",\n\t\"type\": \"customized\" //Favorites, customized, lo usamos para diferenciar cundo es una lista definida por los administradores de sistema o personalizada por el usuario customized\n}"},"url":"http://localhost:9000:/api/v1/list","description":"<h3 id=\"crear-nueva-lista-personalizada\">Crear Nueva Lista Personalizada</h3>\n<p>Este endpoint de la API se utiliza para crear una nueva lista personalizada de productos.</p>\n<h4 id=\"cuerpo-de-la-solicitud\">Cuerpo de la Solicitud</h4>\n<ul>\n<li><p><strong>userId (string):</strong> El identificador único del usuario.</p>\n</li>\n<li><p><strong>nombreDeLista (string):</strong> El nombre de la lista.</p>\n</li>\n<li><p><strong>type (string):</strong> Indica el tipo de la lista, puede ser \"Favorites\" o \"customized\".</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta está en formato JSON con el siguiente esquema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\"type\": \"string\"},\n    \"userId\": {\"type\": \"string\"},\n    \"listName\": {\"type\": \"string\"},\n    \"type\": {\"type\": \"string\"},\n    \"updatedAt\": {\"type\": \"string\"},\n    \"createdAt\": {\"type\": \"string\"}\n  }\n}\n\n</code></pre>\n<h4 id=\"ejemplo\">Ejemplo</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"123\",\n  \"userId\": \"456\",\n  \"listName\": \"Regalos\",\n  \"type\": \"customized\",\n  \"updatedAt\": \"2022-01-01T12:00:00Z\",\n  \"createdAt\": \"2022-01-01T12:00:00Z\"\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","list"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"558eb08c-1662-4704-b0c9-0734471ad9f0"},{"name":"Agregar Producto a la Lista","id":"067a95d4-4ad3-44f3-a8dd-82bc5216c59f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\n\t\"listId\": \"42ab4283-b0d3-48d0-9743-1b82e3583dee\",\n\t\"productId\":\"57ce8176-d7d4-42a5-8ec9-142759df962a\"\n}"},"url":"http://localhost:9000:/api/v1/list/add-product","description":"<h3 id=\"añadir-producto-a-la-lista\">Añadir Producto a la Lista</h3>\n<p>Este endpoint se utiliza para añadir un producto a una lista personalizada.</p>\n<h4 id=\"cuerpo-de-la-solicitud\">Cuerpo de la Solicitud</h4>\n<ul>\n<li><p><strong>listId (uuid):</strong> El ID de la lista a la que se añadirá el producto.</p>\n</li>\n<li><p><strong>productId (uuid):</strong> El ID del producto que se añadirá a la lista.</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<ul>\n<li><p><strong>Estado:</strong> 201</p>\n</li>\n<li><p><strong>Content-Type:</strong> application/json</p>\n</li>\n</ul>\n<h4 id=\"cuerpo-de-la-respuesta\">Cuerpo de la Respuesta</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"listId\": \"uuid\",\n    \"productId\": \"uuid\",\n    \"updatedAt\": \"datetime\",\n    \"createdAt\": \"datetime\"\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","list","add-product"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"067a95d4-4ad3-44f3-a8dd-82bc5216c59f"},{"name":"Obtener Productos de la Lista","id":"519df049-cd38-46e6-94de-f59c72b811dc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000:/api/v1/list/42ab4283-b0d3-48d0-9743-1b82e3583dee/products","description":"<h3 id=\"request\">Request</h3>\n<p>Obtener todos los productos de una lista personalizada.</p>\n<h3 id=\"request-body\">Request Body</h3>\n<ul>\n<li>Path variable<ul>\n<li>listId (string, required): The ID of the list.</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"response\">Response</h3>\n<p>The response will be in JSON format with the following schema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"object\",\n    \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"listName\": {\"type\": \"string\"},\n        \"userId\": {\"type\": \"string\"},\n        \"type\": {\"type\": \"string\"},\n        \"createdAt\": {\"type\": \"string\"},\n        \"updatedAt\": {\"type\": \"string\"},\n        \"Products\": {\n            \"type\": \"array\",\n            \"items\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"id\": {\"type\": \"string\"},\n                    \"Handle\": {\"type\": \"string\"},\n                    \"Title\": {\"type\": \"string\"},\n                    \"Description\": {\"type\": \"string\"},\n                    \"SKU\": {\"type\": \"string\"},\n                    \"Grams\": {\"type\": \"integer\"},\n                    \"Stock\": {\"type\": \"integer\"},\n                    \"Price\": {\"type\": \"integer\"},\n                    \"ComparePrice\": {\"type\": \"integer\"},\n                    \"Barcode\": {\"type\": \"string\"},\n                    \"category\": {\"type\": \"integer\"},\n                    \"createdBy\": {\"type\": \"string\"},\n                    \"createdAt\": {\"type\": \"string\"},\n                    \"updatedAt\": {\"type\": \"string\"}\n                }\n            }\n        }\n    }\n}\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","list","42ab4283-b0d3-48d0-9743-1b82e3583dee","products"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"519df049-cd38-46e6-94de-f59c72b811dc"},{"name":"Eliminar Producto de la Lista","id":"c43ef892-05d1-489a-95a4-2b3863d0ec74","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000:/api/v1/list/remove-product?listId=42ab4283-b0d3-48d0-9743-1b82e3583dee&productId=57ce8176-d7d4-42a5-8ec9-142759df962a","description":"<h3 id=\"eliminar-producto-de-la-lista\">Eliminar Producto de la Lista</h3>\n<p>Este endpoint se utiliza para eliminar un producto de una lista personalizada.</p>\n<h4 id=\"url\">URL</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">http://localhost:9000:/api/v1/list/remove-product?listId=42ab4283-b0d3-48d0-9743-1b82e3583dee&amp;productId=uuid\n\n</code></pre>\n<h4 id=\"parámetros\">Parámetros</h4>\n<ul>\n<li><p><strong>listId (uuid):</strong> El ID de la lista de la que se eliminará el producto.</p>\n</li>\n<li><p><strong>productId (uuid):</strong> El ID del producto que se eliminará de la lista.</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<ul>\n<li><p><strong>Estado:</strong> 204</p>\n</li>\n<li><p><strong>Content-Type:</strong> application/json</p>\n</li>\n</ul>\n<h4 id=\"cuerpo-de-la-respuesta\">Cuerpo de la Respuesta</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"listId\": \"uuid\",\n    \"productId\": \"uuid\",\n    \"updatedAt\": \"string\",\n    \"createdAt\": \"string\"\n}\n\n</code></pre>\n<p>EndFragment</p>\n","urlObject":{"port":"","path":["api","v1","list","remove-product"],"host":["http://localhost:9000"],"query":[{"key":"listId","value":"42ab4283-b0d3-48d0-9743-1b82e3583dee"},{"key":"productId","value":"57ce8176-d7d4-42a5-8ec9-142759df962a"}],"variable":[]}},"response":[],"_postman_id":"c43ef892-05d1-489a-95a4-2b3863d0ec74"},{"name":"Eliminar Lista","id":"17427129-b873-4d78-a60f-4d1f88fa578b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000:/api/v1/list/42ab4283-b0d3-48d0-9743-1b82e3583dee","description":"<p>StartFragment</p>\n<h3 id=\"eliminar-lista-personalizada\">Eliminar Lista Personalizada</h3>\n<p>Este endpoint se utiliza para eliminar una lista personalizada y sus productos asociados.</p>\n<h4 id=\"url\">URL</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">HTTP DELETE /api/v1/list/42ab4283-b0d3-48d0-9743-1b82e3583dee\n\n</code></pre>\n<h4 id=\"cuerpo-de-la-solicitud\">Cuerpo de la Solicitud</h4>\n<p>Esta solicitud no requiere un cuerpo de solicitud.</p>\n<h4 id=\"respuesta\">Respuesta</h4>\n<ul>\n<li><p><strong>Estado:</strong> 200</p>\n</li>\n<li><p><strong>Content-Type:</strong> application/json</p>\n</li>\n</ul>\n<h4 id=\"cuerpo-de-la-respuesta\">Cuerpo de la Respuesta</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"string\"\n}\n\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","list","42ab4283-b0d3-48d0-9743-1b82e3583dee"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"17427129-b873-4d78-a60f-4d1f88fa578b"}],"id":"8c1b8c3a-064e-432b-9571-c92348ada59b","_postman_id":"8c1b8c3a-064e-432b-9571-c92348ada59b","description":""},{"name":"Lista de Favoritos","item":[{"name":"Agregar Producto a la Lista de Favoritos","id":"75fcab13-5b00-4e34-bb9a-ab4fcbed9d4a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\n    \"userId\": \"ee89de86-31cc-4135-8b3a-3d1e08a891b0\",\n    \"productId\": \"\"\n}"},"url":"http://localhost:9000:/api/v1/favoritelist/add-product","description":"<h3 id=\"agregar-producto-a-la-lista-de-favoritos\">Agregar Producto a la Lista de Favoritos</h3>\n<p>Este endpoint permite al usuario agregar un producto a su lista de favoritos.</p>\n<p><strong>Cuerpo de la Solicitud:</strong></p>\n<ul>\n<li><p><strong>userId</strong> (cadena, requerido): El ID del usuario.</p>\n</li>\n<li><p><strong>productId</strong> (cadena, requerido): El ID del producto que se agregará a la lista de favoritos.</p>\n</li>\n</ul>\n<p><strong>Respuesta:</strong><br />La respuesta será un objeto JSON con las siguientes propiedades:</p>\n<ul>\n<li><p><strong>listId</strong> (cadena): El ID de la lista de favoritos.</p>\n</li>\n<li><p><strong>productId</strong> (cadena): El ID del producto agregado a la lista de favoritos.</p>\n</li>\n<li><p><strong>updatedAt</strong> (cadena): La marca de tiempo cuando se actualizó la lista de favoritos.</p>\n</li>\n<li><p><strong>createdAt</strong> (cadena): La marca de tiempo cuando se creó la lista de favoritos.</p>\n</li>\n</ul>\n<p><strong>Esquema JSON:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"object\",\n    \"properties\": {\n        \"listId\": {\"type\": \"string\"},\n        \"productId\": {\"type\": \"string\"},\n        \"updatedAt\": {\"type\": \"string\"},\n        \"createdAt\": {\"type\": \"string\"}\n    }\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","favoritelist","add-product"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"75fcab13-5b00-4e34-bb9a-ab4fcbed9d4a"},{"name":"Obtener Productos en la Lista de Favoritos","id":"7d206827-7869-45d3-840f-25904e8fdb7b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000:/api/v1/favoritelist/ee89de86-31cc-4135-8b3a-3d1e08a891b0/products","description":"<h3 id=\"obtener-productos-en-la-lista-de-favoritos\">Obtener Productos en la Lista de Favoritos</h3>\n<p>Este endpoint recupera una lista de productos favoritos para un usuario específico. La respuesta sigue el esquema JSON a continuación:</p>\n<p><strong>Esquema JSON:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"type\": \"object\",\n    \"properties\": {\n        \"id\": {\"type\": \"string\"},\n        \"listName\": {\"type\": \"string\"},\n        \"userId\": {\"type\": \"string\"},\n        \"type\": {\"type\": \"string\"},\n        \"createdAt\": {\"type\": \"string\"},\n        \"updatedAt\": {\"type\": \"string\"},\n        \"Products\": {\n            \"type\": \"array\",\n            \"items\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"id\": {\"type\": \"string\"},\n                    \"Handle\": {\"type\": \"string\"},\n                    \"Title\": {\"type\": \"string\"},\n                    \"Description\": {\"type\": \"string\"},\n                    \"SKU\": {\"type\": \"string\"},\n                    \"Grams\": {\"type\": \"integer\"},\n                    \"Stock\": {\"type\": \"integer\"},\n                    \"Price\": {\"type\": \"number\"},\n                    \"ComparePrice\": {\"type\": \"number\"},\n                    \"Barcode\": {\"type\": \"string\"},\n                    \"category\": {\"type\": \"integer\"},\n                    \"createdBy\": {\"type\": \"string\"},\n                    \"createdAt\": {\"type\": \"string\"},\n                    \"updatedAt\": {\"type\": \"string\"}\n                }\n            }\n        }\n    }\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","favoritelist","ee89de86-31cc-4135-8b3a-3d1e08a891b0","products"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"7d206827-7869-45d3-840f-25904e8fdb7b"},{"name":"Eliminar Producto de la Lista de Favoritos","id":"fc6c7e98-aa45-448e-ab5c-843748d81edc","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000:/api/v1/favoritelist/remove-product?userId=ee89de86-31cc-4135-8b3a-3d1e08a891b0&productId=","description":"<h3 id=\"eliminar-producto-de-la-lista-de-favoritos\">Eliminar Producto de la Lista de Favoritos</h3>\n<p>Este endpoint permite al usuario eliminar un producto de su lista de favoritos.</p>\n<p><strong>URL:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">http://localhost:9000:/api/v1/favoritelist/remove-product?userId=ee89de86-31cc-4135-8b3a-3d1e08a891b0&amp;productId=\n\n</code></pre>\n<p><strong>Parámetros de Consulta:</strong></p>\n<ul>\n<li><p><strong>userId</strong> (cadena, requerido): El ID del usuario.</p>\n</li>\n<li><p><strong>productId</strong> (cadena, requerido): El ID del producto que se eliminará de la lista de favoritos.</p>\n</li>\n</ul>\n<p><strong>Respuesta:</strong><br />La respuesta será un objeto JSON con las siguientes propiedades:</p>\n<ul>\n<li><strong>message</strong> (cadena): Mensaje indicando el resultado de la operación.</li>\n</ul>\n<p><strong>Ejemplo de Respuesta:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Producto eliminado de la lista de favoritos.\"\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","favoritelist","remove-product"],"host":["http://localhost:9000"],"query":[{"key":"userId","value":"ee89de86-31cc-4135-8b3a-3d1e08a891b0"},{"key":"productId","value":""}],"variable":[]}},"response":[],"_postman_id":"fc6c7e98-aa45-448e-ab5c-843748d81edc"}],"id":"2945e49f-7b0c-4663-8710-3dd5c7089263","description":"<p>La lista de favoritos se crea automáticamente en la base de datos al momento de crear un usuario en el sistema. El sistema identifica estas listas a través de su tipo, que será <code>type: \"Favorites\"</code>, y el ID del usuario.</p>\n<p>Todo el manejo de la lista de favoritos se realiza automáticamente en el backend, por lo que el programador frontend no necesita preocuparse por estos detalles. Los endpoints disponibles permiten agregar productos, obtener productos y eliminar productos de la lista de favoritos de un usuario.</p>\n","_postman_id":"2945e49f-7b0c-4663-8710-3dd5c7089263"},{"name":"Categorias","item":[{"name":"Obtener una categoria por ID","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 200\", function () {","    pm.expect(pm.response.code).to.equal(200);","});","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});",""],"type":"text/javascript","packages":{}}}],"id":"174ceb17-b323-47d5-a6d2-881e9e9d392b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000/api/v1/categories/7","description":"<h3 id=\"obtener-una-categoría-por-id\">Obtener una Categoría por ID</h3>\n<h4 id=\"url\">URL</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">http://localhost:9000/api/v1/categories/:id\n\n</code></pre>\n<h4 id=\"encabezados\">Encabezados</h4>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Key</th>\n<th>Value</th>\n<th>Descripción</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Authorization</td>\n<td>Bearer</td>\n<td>JWT Token para la autorización</td>\n</tr>\n</tbody>\n</table>\n</div><h4 id=\"ejemplo-de-solicitud\">Ejemplo de Solicitud</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">http://localhost:9000/api/v1/categories/7\n\n</code></pre>\n<h4 id=\"respuesta-exitosa-200\">Respuesta Exitosa (200)</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": 7,\n    \"name\": \"Prueba\",\n    \"parent\": 0,\n    \"description\": \"Esta es una categoría de Prueba\",\n    \"createdAt\": \"2024-06-01T16:01:31.498Z\",\n    \"updatedAt\": \"2024-06-01T16:01:31.498Z\"\n}\n\n</code></pre>\n<h4 id=\"ejemplo-de-respuesta\">Ejemplo de Respuesta</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": 7,                         // int\n    \"name\": \"Prueba\",                // string\n    \"parent\": 0,                     // int\n    \"description\": \"Esta es una categoría de Prueba\", // string\n    \"createdAt\": \"2024-06-01T16:01:31.498Z\", // string (ISO 8601 date)\n    \"updatedAt\": \"2024-06-01T16:01:31.498Z\"  // string (ISO 8601 date)\n}\n\n</code></pre>\n","urlObject":{"path":["api","v1","categories","7"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"174ceb17-b323-47d5-a6d2-881e9e9d392b"},{"name":"Ver todas las categorias","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 200\", function () {","    pm.expect(pm.response.code).to.equal(200);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});"],"type":"text/javascript","packages":{}}}],"id":"01dd909b-99a4-486c-bc77-fc90f8583043","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000/api/v1/categories?offset=0&limit=50","description":"<h3 id=\"ver-todas-las-categorias\">Ver todas las categorias</h3>\n<p>Este endpoint se utiliza para obtener una lista de productos con un desplazamiento y límite específicos.</p>\n<h4 id=\"parámetros-de-consulta\">Parámetros de consulta</h4>\n<ul>\n<li><p>offset (número): El índice de inicio de los productos a recuperar.</p>\n</li>\n<li><p>limit (número): El número máximo de productos a recuperar. El sistema se limitará automáticamente a 100 productos si se proporciona un valor superior a 100 para cuidar la salud del servidor de Base de Datos tambien se establecerá en 100 si limit está ausente o es inferior a 0</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON que contiene la lista de productos recuperados, junto con metadatos adicionales. El esquema de la respuesta es el siguiente:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"next\": {\n      \"type\": \"string\"\n    },\n    \"prev\": {\n      \"type\": \"null\"\n    },\n    \"offset\": {\n      \"type\": \"number\"\n    },\n    \"limit\": {\n      \"type\": \"number\"\n    },\n    \"total\": {\n      \"type\": \"number\"\n    },\n    \"categories\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": {\n            \"type\": \"number\"\n          },\n          \"name\": {\n            \"type\": \"string\"\n          },\n          \"parent\": {\n            \"type\": \"number\"\n          },\n          \"createdAt\": {\n            \"type\": \"string\"\n          },\n          \"updatedAt\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    }\n  }\n}\n\n</code></pre>\n<p><strong>parent</strong></p>\n<p>El valor de parent se refiere a otra categoría que sería la categoría padre.<br />En caso de no tener una categoría superior el valor será 0.<br />Si tiene algun otro valor significa que es subcategoria de la categoria que indica el valor o ID.</p>\n<p>Ejemplo: en el modelo puede existir una categoria Automovil con el <em>id[1]</em>, a su vez pueden existir las subcategorias accesorios <em>id[401]</em> y la subcategoria repuestos <em>id[402]</em> en ambos casos de estas subcategorias el valor parent seria 1 que representa al id de la categoria superior automovil  </p>\n<p>Automovil:{<br />subcategoria_1: \"accesorios\",<br />subcategoria_2: \"repuestos\"<br />}  </p>\n<p>\"parent\": {<br />\"type\": \"number\"<br />}</p>\n","urlObject":{"path":["api","v1","categories"],"host":["http://localhost:9000"],"query":[{"key":"offset","value":"0"},{"key":"limit","value":"50"}],"variable":[]}},"response":[],"_postman_id":"01dd909b-99a4-486c-bc77-fc90f8583043"},{"name":"Registrar una categoría","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 201\", function () {","    pm.expect(pm.response.code).to.equal(201);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});"],"type":"text/javascript","packages":{}}}],"id":"272495e5-c7dc-4639-89fe-00989141cf92","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"POST","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\r\n    \"name\": \"Coches\",\r\n    \"description\": \"Descripción del de mi categoria coches\",\r\n    \"parent\":0\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000/api/v1/categories/","description":"<h3 id=\"crear-nueva-categoría\">Crear nueva categoría</h3>\n<p>Este endpoint se utiliza para crear una nueva categoría con la información proporcionada en el cuerpo de la solicitud.</p>\n<h4 id=\"parámetros-de-solicitud\">Parámetros de solicitud</h4>\n<ul>\n<li><p>name (string, required): El nombre de la categoría.</p>\n</li>\n<li><p>description (string, required): La descripción de la categoría.</p>\n</li>\n<li><p>parent (number, required): El ID de la categoría principal. Si es una categoría de nivel superior, se debe proporcionar 0.</p>\n</li>\n</ul>\n<h4 id=\"ejemplo-del-cuerpo-de-la-solicitud\">Ejemplo del cuerpo de la solicitud</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"name\": \"Nombre de la Categoría\",\n  \"description\": \"Descripción de la Categoría\",\n  \"parent\": 0\n}\n</code></pre>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON que contiene la categoría creada. El esquema de la respuesta es el siguiente:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"id\": \"string\",\n  \"name\": \"string\",\n  \"parent\": \"number\",\n  \"description\": \"string\",\n  \"updatedAt\": \"string\",\n  \"createdAt\": \"string\"\n}\n</code></pre>\n","urlObject":{"path":["api","v1","categories",""],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"272495e5-c7dc-4639-89fe-00989141cf92"},{"name":"Actualizar una categoría","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 200\", function () {","    pm.expect(pm.response.code).to.equal(200);","});","","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});"],"type":"text/javascript","packages":{}}}],"id":"dae0cc13-41fa-4eb4-83e6-acb5ca8050fb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"PATCH","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\r\n    \"name\": \"Automoviles\",\r\n    \"description\": \"Categoria para mostrar todo sobre vehiculos\",\r\n    \"parent\": 0\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/categories/2","description":"<h3 id=\"actualizar-categoría\">Actualizar Categoría</h3>\n<p>Este endpoint se utiliza para actualizar un producto existente en la base de datos.</p>\n<h4 id=\"parámetros-de-cuerpo-de-solicitud\">Parámetros de cuerpo de solicitud</h4>\n<ul>\n<li><p>name (cadena): El nombre del producto.</p>\n</li>\n<li><p>description (cadena): La descripción del producto.</p>\n</li>\n<li><p>parent (número): El ID del padre del producto.</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON con el siguiente esquema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"type\": \"object\",\n  \"properties\": {\n    \"message\": {\n      \"type\": \"string\"\n    }\n  }\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","categories","2"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"dae0cc13-41fa-4eb4-83e6-acb5ca8050fb"},{"name":"Borrar un categoria","event":[{"listen":"test","script":{"id":"4b7c05ee-f5e1-42bb-b838-645f5862da10","exec":["pm.test(\"el estado de la respuesta debe ser 204\", function () {","    pm.expect(pm.response.code).to.equal(204);","});","","pm.test(\"el tiempo de respuesta debe ser menos de 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});",""],"type":"text/javascript","packages":{}}}],"id":"3899c78b-4f7c-4e1c-a498-633758079859","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"DELETE","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/categories/6","description":"<h3 id=\"eliminar-categoría\">Eliminar Categoría</h3>\n<p>Este endpoint se utiliza para eliminar una categoría existente en la base de datos.</p>\n<h4 id=\"parámetros-de-cuerpo-de-solicitud\">Parámetros de cuerpo de solicitud</h4>\n<ul>\n<li>Se debe enviar el (id) INT de la categoría después de la URL. Por ejemplo: <code>myserver/api/v1/categories/:id</code></li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud es un objeto JSON con el siguiente esquema:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": {\n    \"type\": \"string\"\n  }\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","categories","6"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"3899c78b-4f7c-4e1c-a498-633758079859"}],"id":"cbef5440-2c90-4448-9607-6463952377ae","_postman_id":"cbef5440-2c90-4448-9607-6463952377ae","description":""},{"name":"Cart (Carrito de Compra)","item":[{"name":"Crear Carrito","id":"1c70971e-2b65-4a8a-b48a-d4650d0031fe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/cart","description":"<h1 id=\"crea-un-carrito\">Crea un Carrito</h1>\n<p>Este endpoint se utiliza para crear un carrito.</p>\n<h2 id=\"parámetros-de-la-solicitud\">Parámetros de la Solicitud</h2>\n<ul>\n<li><code>cartId</code> (en la URL): El ID del carrito al que se desea agregar el producto.</li>\n</ul>\n<h2 id=\"respuesta\">Respuesta</h2>\n<ul>\n<li><p><code>status</code> (cadena): El estado de la operación.</p>\n</li>\n<li><p><code>id</code> (cadena): El ID del producto agregado al carrito.</p>\n</li>\n<li><p><code>userId</code> (cadena): El ID del usuario al que pertenece el carrito.</p>\n</li>\n<li><p><code>updatedAt</code> (cadena): La fecha y hora de la última actualización.</p>\n</li>\n<li><p><code>createdAt</code> (cadena): La fecha y hora de creación del producto en el carrito.</p>\n</li>\n</ul>\n<p>La respuesta tendrá un código de estado 201 y un cuerpo en formato JSON.</p>\n","urlObject":{"port":"","path":["api","v1","cart"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"1c70971e-2b65-4a8a-b48a-d4650d0031fe"},{"name":"Agregar Producto al Carrito","id":"9f403d23-4634-4b36-a256-f17aa8eb3688","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"jwt "},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\"productId\": \"\", \"quantity\": 2}"},"url":"http://localhost:9000:/api/v1/cart//products","description":"<h3 id=\"añadir-producto-al-carrito\">Añadir Producto al Carrito</h3>\n<p>Este endpoint permite al cliente añadir un producto al carrito especificado. suma la cantidad cada vez que es enviado, si lo crea con 1 y lo vuelve a enviar la cnatidad que envíe la segunda vez se sumará a lo que ya existe</p>\n<h4 id=\"solicitud\">Solicitud</h4>\n<p><strong>Método</strong>: <code>POST</code><br /><strong>URL</strong>: <code>http://localhost:9000:/api/v1/cart//products</code></p>\n<p><strong>Cuerpo</strong>:</p>\n<ul>\n<li><p><strong>productId</strong> (string): El ID del producto que se va a añadir al carrito.</p>\n</li>\n<li><p><strong>quantity</strong> (number): La cantidad del producto que se va a añadir al carrito.</p>\n</li>\n</ul>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta está en formato JSON y tiene el siguiente esquema:</p>\n<p><strong>JSON</strong>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>jsonCopiar código{\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\"\n    },\n    \"cartId\": {\n      \"type\": \"string\"\n    },\n    \"productId\": {\n      \"type\": \"string\"\n    },\n    \"quantity\": {\n      \"type\": \"number\"\n    },\n    \"updatedAt\": {\n      \"type\": \"string\"\n    },\n    \"createdAt\": {\n      \"type\": \"string\"\n    }\n  }\n}\n\n</code></pre><p><strong>Estado</strong>: 201<br /><strong>Content-Type</strong>: application/json</p>\n","urlObject":{"port":"","path":["api","v1","cart","","products"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"9f403d23-4634-4b36-a256-f17aa8eb3688"},{"name":"Update Product Quantity in Cart","id":"8726e4f4-5cd5-4fc0-8371-173899fde811","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"{\"quantity\": 4}"},"url":"http://localhost:9000/api/v1/cart/products/3eb93a32-6fa9-4ab6-8967-d230df630997","description":"<h3 id=\"actualizar-la-cantidad-de-un-producto-en-el-carrito\">Actualizar la Cantidad de un Producto en el Carrito</h3>\n<p>Este endpoint permite al cliente actualizar la cantidad de un producto específico en el carrito.</p>\n<h4 id=\"solicitud\">Solicitud</h4>\n<p><strong>Método</strong>: <code>PATCH</code><br /><strong>URL</strong>: <code>http://localhost:9000:/api/v1/cart/products/{{cartItemId}}</code></p>\n<p><strong>Encabezados</strong>:</p>\n<ul>\n<li><code>Content-Type</code>: <code>application/json</code></li>\n</ul>\n<p><strong>Cuerpo</strong> (JSON):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>jsonCopiar código{\n  \"quantity\": 0\n}\n\n</code></pre><h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta es un objeto JSON con el siguiente esquema:</p>\n<ul>\n<li><p><code>id</code> (string): El ID del producto en el carrito</p>\n</li>\n<li><p><code>cartId</code> (string): El ID del carrito</p>\n</li>\n<li><p><code>productId</code> (string): El ID del producto</p>\n</li>\n<li><p><code>quantity</code> (number): La cantidad actualizada del producto en el carrito</p>\n</li>\n<li><p><code>createdAt</code> (string): La fecha y hora de creación</p>\n</li>\n<li><p><code>updatedAt</code> (string): La fecha y hora de la última actualización</p>\n</li>\n</ul>\n<h4 id=\"ejemplo\">Ejemplo</h4>\n<p><strong>Solicitud</strong>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">jsonCopiar código{\n  \"quantity\": 3\n}\n\n</code></pre>\n<p><strong>Respuesta</strong>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">jsonCopiar código{\n  \"id\": \"5c3fa1d3-3d2a-417f-b3df-af706a8778f7\",\n  \"cartId\": \"12345678-1234-1234-1234-123456789012\",\n  \"productId\": \"87654321-4321-4321-4321-210987654321\",\n  \"quantity\": 3,\n  \"createdAt\": \"2023-05-16T00:00:00.000Z\",\n  \"updatedAt\": \"2023-05-16T01:00:00.000Z\"\n}\n\n</code></pre>\n","urlObject":{"path":["api","v1","cart","products","3eb93a32-6fa9-4ab6-8967-d230df630997"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"8726e4f4-5cd5-4fc0-8371-173899fde811"},{"name":"Obtener Productos del Carrito","id":"5b4c9ecb-0310-4985-bdb5-9364e917b084","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000:/api/v1/cart//products","description":"<h3 id=\"obtener-productos-del-carrito\">Obtener Productos del Carrito</h3>\n<p>Este endpoint recupera la lista de productos en un carrito específico identificado por el <code>cartId</code>.</p>\n<h4 id=\"descripción-de-la-solicitud\">Descripción de la Solicitud</h4>\n<p><strong>Método</strong>: <code>GET</code><br /><strong>URL</strong>: <code>http://localhost:9000:/api/v1/cart//products</code></p>\n<p><strong>Cuerpo de la Solicitud</strong>:<br />Esta solicitud no requiere un cuerpo de solicitud.</p>\n<h4 id=\"cuerpo-de-la-respuesta\">Cuerpo de la Respuesta</h4>\n<p>La respuesta es un arreglo JSON que contiene objetos con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (string): El identificador único del producto en el carrito.</p>\n</li>\n<li><p><code>cartId</code> (string): El identificador del carrito al que pertenece el producto.</p>\n</li>\n<li><p><code>productId</code> (string): El identificador del producto.</p>\n</li>\n<li><p><code>quantity</code> (number): La cantidad del producto en el carrito.</p>\n</li>\n<li><p><code>createdAt</code> (string): La marca de tiempo de cuándo se añadió el producto al carrito.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La marca de tiempo de cuándo se actualizó por última vez el producto en el carrito.</p>\n</li>\n<li><p><code>productDetails</code> (object): Un objeto que contiene detalles del producto con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (string): El identificador único del producto.</p>\n</li>\n<li><p><code>Handle</code> (string): El handle del producto.</p>\n</li>\n<li><p><code>Title</code> (string): El título del producto.</p>\n</li>\n<li><p><code>Description</code> (string): La descripción del producto.</p>\n</li>\n<li><p><code>SKU</code> (string): La unidad de mantenimiento de existencias del producto.</p>\n</li>\n<li><p><code>Grams</code> (number): El peso del producto en gramos.</p>\n</li>\n<li><p><code>Stock</code> (number): El stock disponible del producto.</p>\n</li>\n<li><p><code>Price</code> (number): El precio del producto.</p>\n</li>\n<li><p><code>ComparePrice</code> (number): El precio comparativo del producto.</p>\n</li>\n<li><p><code>Barcode</code> (string): El código de barras del producto.</p>\n</li>\n<li><p><code>category</code> (number): La categoría del producto.</p>\n</li>\n<li><p><code>createdBy</code> (string): El creador del producto.</p>\n</li>\n<li><p><code>createdAt</code> (string): La marca de tiempo de cuándo se creó el producto.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La marca de tiempo de cuándo se actualizó por última vez el producto.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"ejemplo-de-esquema-json\">Ejemplo de Esquema JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">jsonCopiar código[\n  {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\" },\n      \"cartId\": { \"type\": \"string\" },\n      \"productId\": { \"type\": \"string\" },\n      \"quantity\": { \"type\": \"number\" },\n      \"createdAt\": { \"type\": \"string\" },\n      \"updatedAt\": { \"type\": \"string\" },\n      \"productDetails\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\" },\n          \"Handle\": { \"type\": \"string\" },\n          \"Title\": { \"type\": \"string\" },\n          \"Description\": { \"type\": \"string\" },\n          \"SKU\": { \"type\": \"string\" },\n          \"Grams\": { \"type\": \"number\" },\n          \"Stock\": { \"type\": \"number\" },\n          \"Price\": { \"type\": \"number\" },\n          \"ComparePrice\": { \"type\": \"number\" },\n          \"Barcode\": { \"type\": \"string\" },\n          \"category\": { \"type\": \"number\" },\n          \"createdBy\": { \"type\": \"string\" },\n          \"createdAt\": { \"type\": \"string\" },\n          \"updatedAt\": { \"type\": \"string\" }\n        }\n      }\n    }\n  }\n]\n\n</code></pre>\n<p>Este documento proporciona una descripción clara de cómo obtener la lista de productos en un carrito, incluyendo el método, la URL, los encabezados, el cuerpo de la solicitud y la estructura de la respuesta esperada.</p>\n","urlObject":{"port":"","path":["api","v1","cart","","products"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"5b4c9ecb-0310-4985-bdb5-9364e917b084"},{"name":"Obtener Carrtio de un usuario","id":"70b1f92f-bc79-429e-88f0-90dcf6e6b730","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEzZmJlNzM5LTdhNjMtNDY2ZS1iZjNkLTU4ZDM5ZDIwNmM0NSIsImVtYWlsIjoibHVmZTAyM0BnbWFpbC5jb20iLCJyb2xlIjoyLCJpYXQiOjE3MTk0MzY4NTgsImV4cCI6MTcyMjAyODg1OH0.V9yvh9GjmRxCvjxFL4WTgzTO-BSDion02zds2NVOlRY"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:9000/api/v1/cart/","description":"<h3 id=\"obtener-productos-del-carrito\">Obtener Productos del Carrito</h3>\n<p>Este endpoint recupera la lista de productos en un carrito específico identificado por el <code>cartId</code>.</p>\n<h4 id=\"descripción-de-la-solicitud\">Descripción de la Solicitud</h4>\n<p><strong>Método</strong>: <code>GET</code><br /><strong>URL</strong>: <code>http://localhost:9000:/api/v1/cart//products</code></p>\n<p><strong>Cuerpo de la Solicitud</strong>:<br />Esta solicitud no requiere un cuerpo de solicitud.</p>\n<h4 id=\"cuerpo-de-la-respuesta\">Cuerpo de la Respuesta</h4>\n<p>La respuesta es un arreglo JSON que contiene objetos con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (string): El identificador único del producto en el carrito.</p>\n</li>\n<li><p><code>cartId</code> (string): El identificador del carrito al que pertenece el producto.</p>\n</li>\n<li><p><code>productId</code> (string): El identificador del producto.</p>\n</li>\n<li><p><code>quantity</code> (number): La cantidad del producto en el carrito.</p>\n</li>\n<li><p><code>createdAt</code> (string): La marca de tiempo de cuándo se añadió el producto al carrito.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La marca de tiempo de cuándo se actualizó por última vez el producto en el carrito.</p>\n</li>\n<li><p><code>productDetails</code> (object): Un objeto que contiene detalles del producto con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (string): El identificador único del producto.</p>\n</li>\n<li><p><code>Handle</code> (string): El handle del producto.</p>\n</li>\n<li><p><code>Title</code> (string): El título del producto.</p>\n</li>\n<li><p><code>Description</code> (string): La descripción del producto.</p>\n</li>\n<li><p><code>SKU</code> (string): La unidad de mantenimiento de existencias del producto.</p>\n</li>\n<li><p><code>Grams</code> (number): El peso del producto en gramos.</p>\n</li>\n<li><p><code>Stock</code> (number): El stock disponible del producto.</p>\n</li>\n<li><p><code>Price</code> (number): El precio del producto.</p>\n</li>\n<li><p><code>ComparePrice</code> (number): El precio comparativo del producto.</p>\n</li>\n<li><p><code>Barcode</code> (string): El código de barras del producto.</p>\n</li>\n<li><p><code>category</code> (number): La categoría del producto.</p>\n</li>\n<li><p><code>createdBy</code> (string): El creador del producto.</p>\n</li>\n<li><p><code>createdAt</code> (string): La marca de tiempo de cuándo se creó el producto.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La marca de tiempo de cuándo se actualizó por última vez el producto.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"ejemplo-de-esquema-json\">Ejemplo de Esquema JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">jsonCopiar código[\n  {\n    \"type\": \"object\",\n    \"properties\": {\n      \"id\": { \"type\": \"string\" },\n      \"cartId\": { \"type\": \"string\" },\n      \"productId\": { \"type\": \"string\" },\n      \"quantity\": { \"type\": \"number\" },\n      \"createdAt\": { \"type\": \"string\" },\n      \"updatedAt\": { \"type\": \"string\" },\n      \"productDetails\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"id\": { \"type\": \"string\" },\n          \"Handle\": { \"type\": \"string\" },\n          \"Title\": { \"type\": \"string\" },\n          \"Description\": { \"type\": \"string\" },\n          \"SKU\": { \"type\": \"string\" },\n          \"Grams\": { \"type\": \"number\" },\n          \"Stock\": { \"type\": \"number\" },\n          \"Price\": { \"type\": \"number\" },\n          \"ComparePrice\": { \"type\": \"number\" },\n          \"Barcode\": { \"type\": \"string\" },\n          \"category\": { \"type\": \"number\" },\n          \"createdBy\": { \"type\": \"string\" },\n          \"createdAt\": { \"type\": \"string\" },\n          \"updatedAt\": { \"type\": \"string\" }\n        }\n      }\n    }\n  }\n]\n\n</code></pre>\n<p>Este documento proporciona una descripción clara de cómo obtener la lista de productos en un carrito, incluyendo el método, la URL, los encabezados, el cuerpo de la solicitud y la estructura de la respuesta esperada.</p>\n","urlObject":{"path":["api","v1","cart",""],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"70b1f92f-bc79-429e-88f0-90dcf6e6b730"},{"name":"Eliminar Producto del Carrito","id":"dcd980c5-c971-472d-abf5-c4ee045f20be","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000:/api/v1/cart/products/d760bc2a-7a92-4736-8877-14c1d8116459","description":"<h3 id=\"eliminar-producto-del-carrito\">Eliminar Producto del Carrito</h3>\n<p>Este endpoint se utiliza para eliminar un producto específico del carrito del usuario.</p>\n<h4 id=\"descripción-de-la-solicitud\">Descripción de la Solicitud</h4>\n<p><strong>Método</strong>: <code>DELETE</code><br /><strong>URL</strong>: <code>http://localhost:9000:/api/v1/cart/products/d760bc2a-7a92-4736-8877-14c1d8116459</code></p>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta para esta solicitud es un código de estado <code>204</code> sin contenido. Según la solicitud del usuario, la respuesta puede documentarse como un esquema JSON.</p>\n<h4 id=\"ejemplo-de-esquema-json\">Ejemplo de Esquema JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">jsonCopiar código{\n  \"type\": \"object\",\n  \"properties\": {},\n  \"required\": []\n}\n\n</code></pre>\n","urlObject":{"port":"","path":["api","v1","cart","products","d760bc2a-7a92-4736-8877-14c1d8116459"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"dcd980c5-c971-472d-abf5-c4ee045f20be"},{"name":"Vaciar el Carrito","id":"308a51d0-e035-4c1a-a90e-19d7cd21cf0c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000:/api/v1/cart/","description":"<p>StartFragment</p>\n<h3 id=\"vaciar-carrito\">Vaciar Carrito</h3>\n<p>Este endpoint se utiliza para dejar el carrito de un usuario en blanco</p>\n<h4 id=\"descripción-de-la-solicitud\">Descripción de la Solicitud</h4>\n<p><strong>Método</strong>: <code>DELETE</code><br /><strong>URL</strong>: <code>http://localhost:9000:/api/v1/cart/products/:cartItemId</code></p>\n<h4 id=\"cuerpo-de-la-solicitud\">Cuerpo de la Solicitud</h4>\n<p>Esta solicitud no requiere un cuerpo de solicitud.</p>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta es un código de estado <code>204</code> sin contenido. Según la solicitud del usuario, la respuesta puede documentarse como un esquema JSON.</p>\n<h4 id=\"ejemplo-de-respuesta-json\">Ejemplo de Respuesta JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>jsonCopiar código{\n  \"type\": \"object\",\n  \"properties\": {},\n  \"required\": []\n}\n\n</code></pre>","urlObject":{"port":"","path":["api","v1","cart",""],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"308a51d0-e035-4c1a-a90e-19d7cd21cf0c"}],"id":"f05fc3c0-8fcd-485b-b064-14af1420c9bf","description":"<p>Carpeta asignada para manejar los endpoints relacionados con el carrito de compras</p>\n","_postman_id":"f05fc3c0-8fcd-485b-b064-14af1420c9bf"},{"name":"Order (Facturas)","item":[{"name":"Crear Order (Factura)","id":"93fae778-512b-438e-9a54-e90dfa9f90e2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\n    \"paymentMethod\": \"credit_card[1]\",\n    \"shippingAddress\": \"123 Calle Principal, Ciudad, País\"\n}"},"url":"http://localhost:9000:/api/v1/orders","description":"<h3 id=\"crear-orden\">Crear Orden</h3>\n<p>Esta solicitud HTTP POST se utiliza para crear nuevas órdenes en la API. La solicitud debe enviarse a <code>http://localhost:9000:/api/v1/orders</code>.</p>\n<h4 id=\"cuerpo-de-la-solicitud\">Cuerpo de la Solicitud</h4>\n<p>El cuerpo de la solicitud debe estar en formato raw e incluir los siguientes parámetros:</p>\n<ul>\n<li><p><code>paymentMethod</code> (string): El método de pago para la orden.</p>\n</li>\n<li><p><code>shippingAddress</code> (string): La dirección de envío para la orden.</p>\n</li>\n</ul>\n<h4 id=\"ejemplo-de-cuerpo-de-solicitud\">Ejemplo de Cuerpo de Solicitud</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>jsonCopiar código{\n  \"paymentMethod\": \"tarjeta de crédito\",\n  \"shippingAddress\": \"123 Calle Principal, Ciudad, País\"\n}\n\n</code></pre><h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta a esta solicitud contendrá los detalles de la orden recién creada. El formato de la respuesta será en JSON y contendrá los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): El ID único de la orden.</p>\n</li>\n<li><p><code>userId</code> (string): El ID del usuario que realizó la orden.</p>\n</li>\n<li><p><code>totalPrice</code> (number): El precio total de la orden.</p>\n</li>\n<li><p><code>paymentMethod</code> (string): El método de pago utilizado.</p>\n</li>\n<li><p><code>shippingAddress</code> (string): La dirección de envío proporcionada.</p>\n</li>\n<li><p><code>status</code> (string): El estado de la orden (ej. \"pendiente\", \"completada\").</p>\n</li>\n<li><p><code>createdAt</code> (string): La fecha y hora de creación de la orden.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La fecha y hora de la última actualización de la orden.</p>\n</li>\n</ul>\n<h4 id=\"ejemplo-de-respuesta\">Ejemplo de Respuesta</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">jsonCopiar código{\n  \"id\": \"1a2b3c4d\",\n  \"userId\": \"13fbe739-7a63-466e-bf3d-58d39d206c45\",\n  \"totalPrice\": 150.75,\n  \"paymentMethod\": \"tarjeta de crédito\",\n  \"shippingAddress\": \"123 Calle Principal, Ciudad, País\",\n  \"status\": \"pendiente\",\n  \"createdAt\": \"2024-05-16T12:34:56.789Z\",\n  \"updatedAt\": \"2024-05-16T12:34:56.789Z\"\n}\n\n</code></pre>\n<h4 id=\"información-adicional\">Información Adicional</h4>\n<ul>\n<li><p><strong>Validación de Campos</strong>: Asegúrese de validar los campos <code>paymentMethod</code> y <code>shippingAddress</code> en el servidor para evitar datos inválidos.</p>\n</li>\n<li><p><strong>Autenticación</strong>: Esta solicitud debería requerir autenticación para asegurarse de que solo usuarios autenticados puedan crear órdenes.</p>\n</li>\n<li><p><strong>Errores</strong>: Maneje adecuadamente los posibles errores, como métodos de pago no soportados o direcciones de envío inválidas, y proporcione mensajes de error claros.</p>\n</li>\n</ul>\n<p>Con esta configuración, debería ser capaz de manejar la creación de órdenes de manera eficiente y segura en su sistema.</p>\n","urlObject":{"port":"","path":["api","v1","orders"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"93fae778-512b-438e-9a54-e90dfa9f90e2"},{"name":"Get Order by ID","id":"5f721441-9da1-4d7c-a94e-5636b5a58f44","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000:/api/v1/orders/74bc6d57-0ec0-43e8-97b4-aa93623c815f","description":"<h3 id=\"obtener-detalles-de-la-orden\">Obtener Detalles de la Orden</h3>\n<p>Este endpoint recupera los detalles de una orden específica.</p>\n<h4 id=\"solicitud\">Solicitud</h4>\n<p><strong>Método HTTP</strong>: GET<br /><strong>URL</strong>: <code>http://localhost:9000:/api/v1/orders/74bc6d57-0ec0-43e8-97b4-aa93623c815f</code></p>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p><strong>Estado</strong>: 200 OK<br /><strong>Content-Type</strong>: application/json</p>\n<h4 id=\"ejemplo-de-respuesta\">Ejemplo de Respuesta</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">jsonCopiar código{\n  \"id\": \"74bc6d57-0ec0-43e8-97b4-aa93623c815f\",\n  \"userId\": \"13fbe739-7a63-466e-bf3d-58d39d206c45\",\n  \"status\": \"pendiente\",\n  \"totalPrice\": 150.75,\n  \"paymentMethod\": \"tarjeta de crédito\",\n  \"paidAt\": \"2024-05-16T13:45:30.789Z\",\n  \"shippingAddress\": \"123 Calle Principal, Ciudad, País\",\n  \"createdAt\": \"2024-05-16T12:34:56.789Z\",\n  \"updatedAt\": \"2024-05-16T12:34:56.789Z\",\n  \"orderDetails\": [\n    {\n      \"id\": \"3e4d6f7b-8a7a-4e8b-b23e-f4d6e4b6a8f7\",\n      \"orderId\": \"74bc6d57-0ec0-43e8-97b4-aa93623c815f\",\n      \"productId\": \"a1b2c3d4-e5f6-7890-abcd-12345678efgh\",\n      \"quantity\": 2,\n      \"price\": 75.00,\n      \"createdAt\": \"2024-05-16T12:35:00.789Z\",\n      \"updatedAt\": \"2024-05-16T12:35:00.789Z\"\n    }\n  ]\n}\n\n</code></pre>\n<h4 id=\"descripción-de-campos\">Descripción de Campos</h4>\n<ul>\n<li><p><code>id</code> (string): El ID único de la orden.</p>\n</li>\n<li><p><code>userId</code> (string): El ID del usuario que realizó la orden.</p>\n</li>\n<li><p><code>status</code> (string): El estado de la orden (ej. \"pendiente\", \"completada\").</p>\n</li>\n<li><p><code>totalPrice</code> (number): El precio total de la orden.</p>\n</li>\n<li><p><code>paymentMethod</code> (string): El método de pago utilizado.</p>\n</li>\n<li><p><code>paidAt</code> (string): La fecha y hora en que se realizó el pago.</p>\n</li>\n<li><p><code>shippingAddress</code> (string): La dirección de envío proporcionada.</p>\n</li>\n<li><p><code>createdAt</code> (string): La fecha y hora de creación de la orden.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La fecha y hora de la última actualización de la orden.</p>\n</li>\n<li><p><code>orderDetails</code> (array): Una lista de objetos que contienen los detalles de los productos en la orden, cada uno con los siguientes campos:</p>\n<ul>\n<li><p><code>id</code> (string): El ID único del detalle de la orden.</p>\n</li>\n<li><p><code>orderId</code> (string): El ID de la orden a la que pertenece el detalle.</p>\n</li>\n<li><p><code>productId</code> (string): El ID del producto.</p>\n</li>\n<li><p><code>quantity</code> (number): La cantidad del producto en la orden.</p>\n</li>\n<li><p><code>price</code> (number): El precio del producto.</p>\n</li>\n<li><p><code>createdAt</code> (string): La fecha y hora de creación del detalle de la orden.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La fecha y hora de la última actualización del detalle de la orden.</p>\n</li>\n</ul>\n</li>\n</ul>\n<p>Esta configuración proporciona toda la información necesaria para obtener los detalles completos de una orden específica.</p>\n","urlObject":{"port":"","path":["api","v1","orders","74bc6d57-0ec0-43e8-97b4-aa93623c815f"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"5f721441-9da1-4d7c-a94e-5636b5a58f44"},{"name":"Get All User Orders","id":"e3fea6e2-8e56-4a3a-bbdc-00d101fdf1e2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000:/api/v1/orders","description":"<h3 id=\"todas-las-ordenes-de-un-usuario\">Todas las ordenes de un usuario</h3>\n<p>Este endpoint recupera una lista de órdenes.</p>\n<h4 id=\"solicitud\">Solicitud</h4>\n<p><strong>Método HTTP</strong>: GET<br /><strong>URL</strong>: <code>http://localhost:9000:/api/v1/orders</code></p>\n<h4 id=\"cuerpo-de-la-solicitud\">Cuerpo de la Solicitud</h4>\n<p>No se requiere un cuerpo de solicitud para esta petición.</p>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>La respuesta será un array JSON que contiene objetos de orden con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (string): El identificador único de la orden.</p>\n</li>\n<li><p><code>userId</code> (string): El identificador único del usuario que realizó la orden.</p>\n</li>\n<li><p><code>status</code> (string): El estado de la orden.</p>\n</li>\n<li><p><code>totalPrice</code> (number): El precio total de la orden.</p>\n</li>\n<li><p><code>paymentMethod</code> (string): El método de pago utilizado para la orden.</p>\n</li>\n<li><p><code>paidAt</code> (string): La marca de tiempo cuando se pagó la orden.</p>\n</li>\n<li><p><code>shippingAddress</code> (string): La dirección de envío de la orden.</p>\n</li>\n<li><p><code>createdAt</code> (string): La marca de tiempo cuando se creó la orden.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La marca de tiempo cuando se actualizó por última vez la orden.</p>\n</li>\n<li><p><code>orderDetails</code> (array): Un array de objetos de detalles de la orden con las siguientes propiedades:</p>\n<ul>\n<li><p><code>id</code> (string): El identificador único del detalle de la orden.</p>\n</li>\n<li><p><code>orderId</code> (string): El identificador único de la orden a la que pertenece el detalle.</p>\n</li>\n<li><p><code>productId</code> (string): El identificador único del producto en el detalle de la orden.</p>\n</li>\n<li><p><code>quantity</code> (number): La cantidad del producto en el detalle de la orden.</p>\n</li>\n<li><p><code>price</code> (number): El precio del producto en el detalle de la orden.</p>\n</li>\n<li><p><code>createdAt</code> (string): La marca de tiempo cuando se creó el detalle de la orden.</p>\n</li>\n<li><p><code>updatedAt</code> (string): La marca de tiempo cuando se actualizó por última vez el detalle de la orden.</p>\n</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"ejemplo-de-respuesta\">Ejemplo de Respuesta</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">jsonCopiar código[\n  {\n    \"id\": \"74bc6d57-0ec0-43e8-97b4-aa93623c815f\",\n    \"userId\": \"13fbe739-7a63-466e-bf3d-58d39d206c45\",\n    \"status\": \"completed\",\n    \"totalPrice\": 150.75,\n    \"paymentMethod\": \"credit card\",\n    \"paidAt\": \"2024-05-16T13:45:30.789Z\",\n    \"shippingAddress\": \"123 Main St, City, Country\",\n    \"createdAt\": \"2024-05-16T12:34:56.789Z\",\n    \"updatedAt\": \"2024-05-16T12:34:56.789Z\",\n    \"orderDetails\": [\n      {\n        \"id\": \"3e4d6f7b-8a7a-4e8b-b23e-f4d6e4b6a8f7\",\n        \"orderId\": \"74bc6d57-0ec0-43e8-97b4-aa93623c815f\",\n        \"productId\": \"a1b2c3d4-e5f6-7890-abcd-12345678efgh\",\n        \"quantity\": 2,\n        \"price\": 75.00,\n        \"createdAt\": \"2024-05-16T12:35:00.789Z\",\n        \"updatedAt\": \"2024-05-16T12:35:00.789Z\"\n      }\n    ]\n  }\n]\n\n</code></pre>\n<p>Esta respuesta proporciona todos los detalles necesarios sobre las órdenes y sus respectivos productos.</p>\n","urlObject":{"port":"","path":["api","v1","orders"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"e3fea6e2-8e56-4a3a-bbdc-00d101fdf1e2"},{"name":"Update Order Status","id":"7d26c436-6185-42dc-8718-dee372a085e5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"jwt "}],"body":{"mode":"raw","raw":"{\n    \"status\": \"enviado\"\n}"},"url":"http://localhost:9000:/api/v1/orders/74bc6d57-0ec0-43e8-97b4-aa93623c815f/status","description":"<h3 id=\"actualizar-estado-de-la-orden\">Actualizar Estado de la Orden</h3>\n<p>Este endpoint permite al cliente actualizar el estado de una orden específica enviando una solicitud HTTP PUT a la URL especificada.</p>\n<h4 id=\"solicitud-http\">Solicitud HTTP</h4>\n<p><strong>Método</strong>: PUT<br /><strong>URL</strong>: <code>http://localhost:9000:/api/v1/orders/:orderId</code></p>\n<h4 id=\"cuerpo-de-la-solicitud\">Cuerpo de la Solicitud</h4>\n<p>El cuerpo de la solicitud debe estar en formato JSON crudo e incluir el siguiente parámetro:</p>\n<ul>\n<li><code>status</code> (string): El estado actualizado de la orden.</li>\n</ul>\n<h4 id=\"ejemplo-de-solicitud\">Ejemplo de Solicitud</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"status\": \"enviado\"\n}\n\n</code></pre>\n<h4 id=\"respuesta\">Respuesta</h4>\n<p>Tras una ejecución exitosa, el servidor responde con un código de estado 200 y un objeto JSON que contiene un campo <code>message</code> que proporciona información sobre el resultado de la solicitud.</p>\n<h4 id=\"ejemplo-de-respuesta\">Ejemplo de Respuesta</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"message\": \"Estado de la orden actualizado\"\n}\n\n</code></pre>\n<p>Esta configuración asegura que los estados de las órdenes se puedan actualizar de manera eficiente, proporcionando una retroalimentación clara al cliente.</p>\n","urlObject":{"port":"","path":["api","v1","orders","74bc6d57-0ec0-43e8-97b4-aa93623c815f","status"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"7d26c436-6185-42dc-8718-dee372a085e5"}],"id":"35eda2dd-f8d6-4529-96eb-3b406b55c66c","_postman_id":"35eda2dd-f8d6-4529-96eb-3b406b55c66c","description":""},{"name":"Informes","item":[{"name":"Obtener los usuarios de Hoy","id":"0a042b3b-bf92-448b-b8cc-b80166d6e3c0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000/api/v1/informs/userstoday","description":"<h2 id=\"obtener-usuarios-de-hoy\">Obtener usuarios de hoy</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET http://localhost:9000/api/v1/informs/userstoday</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint se utiliza para obtener una lista de usuarios que fueron creados en el día actual. Es útil para obtener estadísticas diarias sobre la creación de usuarios.</p>\n<h3 id=\"encabezados-de-la-solicitud\">Encabezados de la solicitud</h3>\n<ul>\n<li><code>Authorization</code>: <code>Bearer </code> (Requerido)</li>\n</ul>\n<h3 id=\"parámetros-de-consulta\">Parámetros de consulta</h3>\n<p>Ninguno</p>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta a esta solicitud es un array JSON que contiene la lista de usuarios creados hoy. El esquema de la respuesta es el siguiente:</p>\n<h4 id=\"json\">JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"id\": \"string\",\n    \"firstName\": \"string\",\n    \"lastName\": \"string\",\n    \"email\": \"string\",\n    \"phone\": \"string\",\n    \"role\": \"number\",\n    \"status\": \"string\",\n    \"isVerified\": \"boolean\",\n    \"createdAt\": \"string\",\n    \"updatedAt\": \"string\"\n  }\n]\n\n</code></pre>\n<h3 id=\"ejemplo-de-solicitud-curl\">Ejemplo de solicitud Curl</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -X GET \"http://localhost:9000/api/v1/informs/userstoday\" -H \"Authorization: Bearer \"\n\n</code></pre>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li><p>Reemplaza <code></code> con tu token de autenticación JWT.</p>\n</li>\n<li><p>Esta ruta requiere autenticación JWT.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","v1","informs","userstoday"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"0a042b3b-bf92-448b-b8cc-b80166d6e3c0"},{"name":"Obtener los usuarios del mes","event":[{"listen":"test","script":{"id":"a7accf77-487b-4292-9a8b-c1169963c0ae","exec":["pm.test(\"Response status code is 200\", function () {","    pm.response.to.have.status(200);","    ","    //si la prueba pasa entonces vamos a guardar el token en una variable de collection para ahorrarnos trabajo posteriormente","    if (pm.response.code === 200) {","        let jsonData = pm.response.json();","        pm.collectionVariables.set(\"token\", jsonData.token);","    }","});",""],"type":"text/javascript","packages":{}}}],"id":"6913577d-b788-4c46-bbb2-c245cdae8184","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"body":{"mode":"urlencoded","urlencoded":[]},"url":"http://localhost:9000/api/v1/informs/usersthismonth","description":"<h2 id=\"obtener-usuarios-de-este-mes\">Obtener usuarios de este mes</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET http://localhost:9000/api/v1/informs/usersthismonth</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint se utiliza para obtener una lista de usuarios que fueron creados en el mes actual. Es útil para obtener estadísticas mensuales sobre la creación de usuarios.</p>\n<h3 id=\"encabezados-de-la-solicitud\">Encabezados de la solicitud</h3>\n<ul>\n<li><code>Authorization</code>: <code>Bearer </code> (Requerido)</li>\n</ul>\n<h3 id=\"parámetros-de-consulta\">Parámetros de consulta</h3>\n<p>Ninguno</p>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta a esta solicitud es un array JSON que contiene la lista de usuarios creados en el mes actual. El esquema de la respuesta es el siguiente:</p>\n<h4 id=\"json\">JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"id\": \"string\",\n    \"firstName\": \"string\",\n    \"lastName\": \"string\",\n    \"email\": \"string\",\n    \"phone\": \"string\",\n    \"role\": \"number\",\n    \"status\": \"string\",\n    \"isVerified\": \"boolean\",\n    \"createdAt\": \"string\",\n    \"updatedAt\": \"string\"\n  }\n]\n\n</code></pre>\n<h3 id=\"ejemplo-de-solicitud-curl\">Ejemplo de solicitud Curl</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -X GET \"http://localhost:9000/api/v1/informs/usersthismonth\" -H \"Authorization: Bearer \"\n\n</code></pre>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li><p>Reemplaza <code></code> con tu token de autenticación JWT.</p>\n</li>\n<li><p>Esta ruta requiere autenticación JWT.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","v1","informs","usersthismonth"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"6913577d-b788-4c46-bbb2-c245cdae8184"},{"name":"Obtener los usuarios por dia","id":"506a05ab-8688-4dff-a340-407816343fbd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000/api/v1/informs/usersbyday/:day","description":"<h2 id=\"obtener-usuarios-por-día-específico\">Obtener usuarios por día específico</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET http://localhost:9000/api/v1/informs/usersbyday/:day</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint se utiliza para obtener una lista de usuarios que fueron creados en un día específico. Es útil para obtener estadísticas diarias sobre la creación de usuarios.</p>\n<h3 id=\"encabezados-de-la-solicitud\">Encabezados de la solicitud</h3>\n<ul>\n<li><code>Authorization</code>: <code>Bearer </code> (Requerido)</li>\n</ul>\n<h3 id=\"parámetros-de-ruta\">Parámetros de ruta</h3>\n<ul>\n<li><code>:day</code> (Requerido): El día específico para el cual se desean obtener los usuarios. El formato debe ser <code>YYYY-MM-DD</code>.</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta a esta solicitud es un array JSON que contiene la lista de usuarios creados en el día específico. El esquema de la respuesta es el siguiente:</p>\n<h4 id=\"json\">JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"id\": \"string\",\n    \"firstName\": \"string\",\n    \"lastName\": \"string\",\n    \"email\": \"string\",\n    \"phone\": \"string\",\n    \"role\": \"number\",\n    \"status\": \"string\",\n    \"isVerified\": \"boolean\",\n    \"createdAt\": \"string\",\n    \"updatedAt\": \"string\"\n  }\n]\n\n</code></pre>\n<h3 id=\"ejemplo-de-solicitud-curl\">Ejemplo de solicitud Curl</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -X GET \"http://localhost:9000/api/v1/informs/usersbyday/2024-05-20\" -H \"Authorization: Bearer \"\n\n</code></pre>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li><p>Reemplaza <code></code> con tu token de autenticación JWT.</p>\n</li>\n<li><p>Reemplaza <code>2024-05-20</code> con el día específico para el cual deseas obtener los usuarios.</p>\n</li>\n<li><p>Esta ruta requiere autenticación JWT.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","v1","informs","usersbyday",":day"],"host":["http://localhost:9000"],"query":[],"variable":[{"description":{"content":"<p>Fecha específica en formato YYYY-MM-DD.</p>\n","type":"text/plain"},"type":"any","value":"2024-05-27","key":"day"}]}},"response":[],"_postman_id":"506a05ab-8688-4dff-a340-407816343fbd"},{"name":"Obtener los usuarios de la ultima semana","id":"2004c84a-020a-4606-b612-87761822bf08","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000/api/v1/informs/userslastweek","description":"<h2 id=\"obtener-usuarios-de-la-semana-pasada\">Obtener usuarios de la semana pasada</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET http://localhost:9000/api/v1/informs/userslastweek</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint se utiliza para obtener una lista de usuarios que fueron creados durante la semana pasada. Es útil para obtener estadísticas semanales sobre la creación de usuarios.</p>\n<h3 id=\"encabezados-de-la-solicitud\">Encabezados de la solicitud</h3>\n<ul>\n<li><code>Authorization</code>: <code>Bearer </code> (Requerido)</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta a esta solicitud es un array JSON que contiene la lista de usuarios creados durante la semana pasada. El esquema de la respuesta es el siguiente:</p>\n<h4 id=\"json\">JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"id\": \"string\",\n    \"firstName\": \"string\",\n    \"lastName\": \"string\",\n    \"email\": \"string\",\n    \"phone\": \"string\",\n    \"role\": \"number\",\n    \"status\": \"string\",\n    \"isVerified\": \"boolean\",\n    \"createdAt\": \"string\",\n    \"updatedAt\": \"string\"\n  }\n]\n\n</code></pre>\n<h3 id=\"ejemplo-de-solicitud-curl\">Ejemplo de solicitud Curl</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -X GET \"http://localhost:9000/api/v1/informs/userslastweek\" -H \"Authorization: Bearer \"\n\n</code></pre>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li><p>Reemplaza <code></code> con tu token de autenticación JWT.</p>\n</li>\n<li><p>Esta ruta requiere autenticación JWT.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","v1","informs","userslastweek"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"2004c84a-020a-4606-b612-87761822bf08"},{"name":"Obtener los Usuarios por mes","id":"dd4401a7-f578-4163-b675-e84b8e029940","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000/api/v1/informs/usersbymonth/2","description":"<h2 id=\"obtener-usuarios-de-un-número-específico-de-meses-atrás\">Obtener usuarios de un número específico de meses atrás</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET http://localhost:9000/api/v1/informs/usersbymonth/:monthsAgo</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint se utiliza para obtener una lista de usuarios que fueron creados hace un número específico de meses. El número de meses se pasa como un parámetro en la ruta. No es un rango, solo traerá la data de los usuarios que se crearon en ese mes. Por ejemplo, si estás en enero y le pasas 2 como parámetro, entonces te devolverá los usuarios creados en noviembre y solo noviembre.  </p>\n<h3 id=\"parámetros-de-ruta\">Parámetros de ruta</h3>\n<ul>\n<li><code>:monthsAgo</code> (número, requerido): El número de meses atrás desde el mes actual.</li>\n</ul>\n<h3 id=\"encabezados-de-la-solicitud\">Encabezados de la solicitud</h3>\n<ul>\n<li><code>Authorization</code>: <code>Bearer </code> (Requerido)</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta a esta solicitud es un array JSON que contiene la lista de usuarios creados durante el mes especificado. El esquema de la respuesta es el siguiente:</p>\n<h4 id=\"json\">JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"id\": \"string\",\n    \"firstName\": \"string\",\n    \"lastName\": \"string\",\n    \"email\": \"string\",\n    \"phone\": \"string\",\n    \"role\": \"number\",\n    \"status\": \"string\",\n    \"isVerified\": \"boolean\",\n    \"createdAt\": \"string\",\n    \"updatedAt\": \"string\"\n  }\n]\n\n</code></pre>\n<h3 id=\"ejemplo-de-solicitud-curl\">Ejemplo de solicitud Curl</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -X GET \"http://localhost:9000/api/v1/informs/usersbymonth/2\" -H \"Authorization: Bearer \"\n\n</code></pre>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li><p>Reemplaza <code></code> con tu token de autenticación JWT.</p>\n</li>\n<li><p>Esta ruta requiere autenticación JWT.</p>\n</li>\n<li><p>Por ejemplo, <code>usersbymonth/2</code> devuelve los usuarios creados hace 2 meses.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","v1","informs","usersbymonth","2"],"host":["http://localhost:9000"],"query":[],"variable":[]}},"response":[],"_postman_id":"dd4401a7-f578-4163-b675-e84b8e029940"},{"name":"Obtener los usuarios que cumplan años en un rango de fecha","id":"47f85001-289e-4296-9678-02fe10ce3600","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"jwt "}],"url":"http://localhost:9000/api/v1/informs/usersbybirthdayrange?startDate=1991-10-31&endDate=1991-10-31","description":"<h2 id=\"obtener-usuarios-por-rango-de-cumpleaños\">Obtener usuarios por rango de cumpleaños</h2>\n<h3 id=\"endpoint\">Endpoint</h3>\n<p><code>GET http://localhost:9000/api/v1/informs/usersbybirthdayrange?startDate=1991-10-31&amp;endDate=1991-10-31</code></p>\n<h3 id=\"descripción\">Descripción</h3>\n<p>Este endpoint se utiliza para obtener una lista de usuarios que tienen su cumpleaños entre dos fechas específicas.</p>\n<h3 id=\"parámetros-de-consulta\">Parámetros de consulta</h3>\n<ul>\n<li><p><code>startDate</code> (string, requerido): La fecha de inicio del rango en formato <code>YYYY-MM-DD</code>.</p>\n</li>\n<li><p><code>endDate</code> (string, requerido): La fecha de fin del rango en formato <code>YYYY-MM-DD</code>.</p>\n</li>\n</ul>\n<h3 id=\"encabezados-de-la-solicitud\">Encabezados de la solicitud</h3>\n<ul>\n<li><code>Authorization</code>: <code>Bearer </code> (Requerido)</li>\n</ul>\n<h3 id=\"respuesta\">Respuesta</h3>\n<p>La respuesta a esta solicitud es un array JSON que contiene la lista de usuarios que cumplen años dentro del rango de fechas especificado. El esquema de la respuesta es el siguiente:</p>\n<h4 id=\"json\">JSON</h4>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">[\n  {\n    \"id\": \"string\",\n    \"firstName\": \"string\",\n    \"lastName\": \"string\",\n    \"email\": \"string\",\n    \"phone\": \"string\",\n    \"birthday\": \"string\",\n    \"role\": \"number\",\n    \"status\": \"string\",\n    \"isVerified\": \"boolean\",\n    \"createdAt\": \"string\",\n    \"updatedAt\": \"string\"\n  }\n]\n\n</code></pre>\n<h3 id=\"ejemplo-de-solicitud-curl\">Ejemplo de solicitud Curl</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -X GET \"http://localhost:9000/api/v1/informs/usersbybirthdayrange?startDate=1991-10-31&amp;endDate=1991-10-31\" -H \"Authorization: Bearer \"\n\n</code></pre>\n<h3 id=\"notas\">Notas</h3>\n<ul>\n<li><p>Reemplaza <code></code> con tu token de autenticación JWT.</p>\n</li>\n<li><p>Esta ruta requiere autenticación JWT.</p>\n</li>\n<li><p>Por ejemplo, <code>usersbybirthdayrange?startDate=1991-10-31&amp;endDate=1991-10-31</code> devuelve los usuarios que cumplen años el 31 de octubre de 1991.</p>\n</li>\n</ul>\n","urlObject":{"path":["api","v1","informs","usersbybirthdayrange"],"host":["http://localhost:9000"],"query":[{"description":{"content":"<p>Fecha de inicio del rango (YYYY-MM-DD).</p>\n","type":"text/plain"},"key":"startDate","value":"1991-10-31"},{"description":{"content":"<p>Fecha de fin del rango (YYYY-MM-DD).</p>\n","type":"text/plain"},"key":"endDate","value":"1991-10-31"}],"variable":[]}},"response":[],"_postman_id":"47f85001-289e-4296-9678-02fe10ce3600"}],"id":"a626ea9b-e94f-45f3-8852-a6320b87b59b","_postman_id":"a626ea9b-e94f-45f3-8852-a6320b87b59b","description":""},{"name":"Preguntas Frecuentes (FAQ)","item":[],"id":"901bada9-f30f-47f3-b8c8-a803aaac2910","description":"<h4 id=\"preguntas-frecuentes-faq\">Preguntas Frecuentes (FAQ)</h4>\n<ol>\n<li><p><strong>¿Cómo me autentico en la API?</strong></p>\n<ul>\n<li>La autenticación se realiza mediante JWT. Debes incluir tu token en el header de cada solicitud autenticada.</li>\n</ul>\n</li>\n<li><p><strong>¿Cómo creo una lista de favoritos para un usuario?</strong></p>\n<ul>\n<li>Las listas de favoritos se crean automáticamente al crear un usuario. No es necesario realizar una solicitud adicional para crearla.</li>\n</ul>\n</li>\n<li><p><strong>¿Cómo agrego un producto a la lista de favoritos de un usuario?</strong></p>\n<ul>\n<li>Utiliza el endpoint <code>/api/v1/favoritelist/add-product</code> proporcionando el <code>userId</code> y el <code>productId</code> en el cuerpo de la solicitud.</li>\n</ul>\n</li>\n<li><p><strong>¿Cómo obtengo los productos en la lista de favoritos de un usuario?</strong></p>\n<ul>\n<li>Utiliza el endpoint <code>/api/v1/favoritelist/:userId/products</code> donde <code>userId</code> es el ID del usuario.</li>\n</ul>\n</li>\n<li><p><strong>¿Cómo puedo recuperar mi token JWT?</strong></p>\n<ol>\n<li><strong>Respuesta:</strong> Puedes obtener tu token JWT iniciando sesión con tu nombre de usuario y contraseña en el endpoint de autenticación <code>/api/v1/auth/login</code>.</li>\n</ol>\n</li>\n<li><p><strong>¿Qué debo hacer si recibo un error 401 Unauthorized?</strong></p>\n<ol>\n<li><strong>Respuesta:</strong> Asegúrate de que tu solicitud incluye el token JWT en el encabezado de autorización como <code>Bearer</code> . Si el problema persiste, tu token podría haber expirado y necesitas obtener uno nuevo.</li>\n</ol>\n</li>\n<li><p><strong>¿Cómo elimino un producto de la lista de favoritos de un usuario?</strong></p>\n<ul>\n<li>Utiliza el endpoint <code>/api/v1/favoritelist/remove-product</code> con los parámetros de consulta <code>userId</code> y <code>productId</code>.</li>\n</ul>\n</li>\n</ol>\n","_postman_id":"901bada9-f30f-47f3-b8c8-a803aaac2910"}],"event":[{"listen":"prerequest","script":{"id":"0aecead9-3d70-4215-8d27-aed1df3acd22","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"9324d611-cfa1-4aeb-964b-86638814c1b6","type":"text/javascript","packages":{},"exec":[""]}}],"variable":[{"key":"server","value":"http://localhost:9000","type":"string"},{"key":"serverport","value":"","type":"string"},{"key":"tokenH","value":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEzZmJlNzM5LTdhNjMtNDY2ZS1iZjNkLTU4ZDM5ZDIwNmM0NSIsImVtYWlsIjoibHVmZTAyM0BnbWFpbC5jb20iLCJyb2xlIjoyLCJpYXQiOjE3MTk3NTkzMzcsImV4cCI6MTcyMjM1MTMzN30.vecu6Nt912TEYQXOimWxv3Yi6l471Ix2VaUoYbkZInA"},{"key":"productId","value":"","type":"string"},{"key":"cartId","value":"","type":"string"},{"key":"userId","value":"ee89de86-31cc-4135-8b3a-3d1e08a891b0","type":"string"},{"key":"listId","value":"42ab4283-b0d3-48d0-9743-1b82e3583dee"},{"key":"token","value":""}]}