{"info":{"_postman_id":"06f6a130-9930-4f5a-913e-394604383661","name":"Optime","description":"<html><head></head><body><h2 id=\"arquitectura-hexagonal--vertical-slicing--screaming\">Arquitectura: Hexagonal + Vertical Slicing + Screaming</h2>\n<p>Optime API está diseñada utilizando los principios de arquitectura hexagonal, lo que significa que está organizada en capas desacopladas para facilitar su mantenimiento, escalabilidad y pruebas. Esta arquitectura también incorpora vertical slicing para estructurar el código en funciones por características y screaming architecture para asegurar que el dominio sea el aspecto más evidente del diseño.</p>\n<ol>\n<li>Dominio (Domain)</li>\n</ol>\n<hr>\n<p>El dominio es el núcleo de la aplicación, donde se definen las reglas y la lógica de negocio. Es completamente independiente de las tecnologías subyacentes como bases de datos o servidores. Aquí se encuentran las entidades, interfaces de repositorios y excepciones del dominio.</p>\n<p><strong>Archivos Clave:</strong> - <strong>Entidades:</strong> Clases que representan los datos principales de la aplicación, como <code>Notification</code>, <code>Payment</code>, <code>User</code>. Ejemplo: <code>src/notifications/domain/Notification.py</code></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>- **Interfaces de Repositorio:** Definen cómo se accede y manipulan los datos en el almacenamiento sin preocuparse por su implementación.\n  Ejemplo: `src/notifications/domain/NotificationRepository.py`\n- **Excepciones:** Manejan errores específicos del dominio para mantener la consistencia en las reglas de negocio.\n  Ejemplo: `src/notifications/domain/exceptions.py`\n\n</code></pre><ol>\n<li>Aplicación (Application)</li>\n</ol>\n<hr>\n<p>Esta capa es responsable de coordinar los casos de uso de la lógica del dominio. Los casos de uso utilizan las entidades del dominio para ejecutar las operaciones necesarias y siguen siendo independientes de la infraestructura (bases de datos, APIs, etc.).</p>\n<p><strong>Archivos Clave:</strong> - <strong>Casos de Uso:</strong> Clases que implementan la lógica para manejar acciones específicas como crear o modificar notificaciones. Ejemplo: <code>src/notifications/application/NotificationCreator.py</code></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>- **Aplicación de Servicios:** Orquestación de operaciones que interactúan con varias entidades del dominio.\n  Ejemplo: `src/notifications/application/NotificationSender.py`\n\n</code></pre><ol>\n<li>Infraestructura (Infrastructure)</li>\n</ol>\n<hr>\n<p>Esta capa contiene la implementación concreta de los detalles técnicos como la persistencia de datos (bases de datos), peticiones HTTP y la integración con servicios externos (Mercado Pago, APIs de mensajería, etc.).</p>\n<p><strong>Archivos Clave:</strong> - <strong>Adaptadores de Repositorio:</strong> Implementaciones de las interfaces de repositorio que conectan con la base de datos. Ejemplo: <code>src/notifications/infrastructure/MySqlNotificationRepository.py</code></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>- **Controladores HTTP:** Gestionan las peticiones y respuestas HTTP, exponiendo los endpoints de la API.\n  Ejemplo: `src/notifications/infrastructure/NotificationRoutes.py`\n- **Conexión a Servicios Externos:** Implementaciones que permiten la interacción con APIs externas como Mercado Pago.\n  Ejemplo: `src/payments/infrastructure/PaymentRoutes.py`\n- **Configuraciones de Base de Datos:** Configura la conexión y detalles de la base de datos.\n  Ejemplo: `src/config/database.py`\n\n</code></pre><h1 id=\"guia-de-instalacion-y-ejecucion\">Guía de Instalación y Ejecución</h1>\n<p><strong>Requerimientos:</strong></p>\n<ul>\n<li><p>MySQL Server</p>\n</li>\n<li><p>Python 3.11</p>\n</li>\n<li><p>Ngrok</p>\n</li>\n</ul>\n<p><strong>Pasos para la Instalación:</strong></p>\n<ol>\n<li><p>Clonar el repositorio: <code>git clone</code></p>\n</li>\n<li><p>Crear un entorno virtual: <code>python -m venv venv</code></p>\n</li>\n<li><p>Activar el entorno virtual:</p>\n<ul>\n<li><p>Windows: <code>venv\\Scripts�ctivate</code></p>\n</li>\n<li><p>macOS/Linux: <code>source venv/bin/activate</code></p>\n</li>\n</ul>\n</li>\n<li><p>Instalar las dependencias: <code>pip install -r requirements.txt</code></p>\n</li>\n<li><p>Ejecutar el script <code>config/create_db_user.sql</code> en tu administrador de base de datos.</p>\n</li>\n<li><p>Crear el archivo <code>.env</code> utilizando el ejemplo proporcionado en el proyecto.</p>\n</li>\n<li><p>Configurar los tokens de acceso de servicios externos como Mercado Pago o Meta API en tu archivo <code>.env</code>.</p>\n</li>\n<li><p>Ejecutar las migraciones de la base de datos: <code>alembic upgrade head</code></p>\n</li>\n<li><p>Iniciar ngrok para exponer tu aplicación: <code>ngrok http 8000</code>.</p>\n</li>\n<li><p>Agregar el URL de ngrok en el archivo <code>.env</code>.</p>\n</li>\n<li><p>Iniciar la aplicación: <code>uvicorn main:app --reload</code></p>\n</li>\n<li><p>Testear los endpoints utilizando Postman: <a href=\"https://documenter.getpostman.com/view/30415321/2sAXxLBZW6#79b970a8-df6b-486c-936c-eb714da4815cT\">Documentación de Postman Api-Optime</a></p>\n</li>\n</ol>\n<p><strong>Ejecución de Pruebas:</strong> Para ejecutar los tests:</p>\n<ol>\n<li><p>Ejecutar <code>pytest</code> en el directorio raíz del proyecto para correr las pruebas unitarias.</p>\n</li>\n<li><p>Integración con GitHub Actions para la ejecución automática de tests en cada push o pull request.</p>\n</li>\n</ol>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Guía de Instalación y Ejecución","slug":"guia-de-instalacion-y-ejecucion"}],"owner":"30415321","collectionId":"06f6a130-9930-4f5a-913e-394604383661","publishedId":"2sAXxLBZW6","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2024-10-03T07:39:44.000Z"},"item":[{"name":"Users","item":[{"name":"Obtener Usuarios","event":[{"listen":"test","script":{"id":"1e310610-59bf-44ce-8f44-60ec80e7e23b","exec":["pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});"],"type":"text/javascript","packages":{}}}],"id":"108de675-e1a6-4d00-adbc-3839ddcd47f2","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[{"key":"accept","value":"application/json"},{"key":"","value":"","type":"text"}],"url":"http://127.0.0.1:3000/api/v1/users/2","description":"<p>Esta solicitud <strong>GET</strong> se utiliza para recuperar los detalles de un usuario específico a través de su identificador único (ID). Se puede usar un parámetro de consulta en la URL para especificar el usuario que deseas obtener.</p>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: Solicitud exitosa, los datos del usuario se devuelven en formato JSON.</p>\n</li>\n<li><p>{<br />  \"id\": 1,<br />  \"username\": \"juanperez\",<br />  \"email\": \"<a href=\"https://mailto:juanperez@example.com\">juanperez@example.com</a>\",<br />  \"status\": \"active\"<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si el usuario con el <code>user_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"User with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3000","path":["api","v1","users","2"],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"108de675-e1a6-4d00-adbc-3839ddcd47f2"},{"name":"Crear Usuarios","event":[{"listen":"test","script":{"id":"7fc2b7b2-9f0f-4e76-9f75-84d3c1d9cb50","exec":["pm.test(\"Successful POST request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});",""],"type":"text/javascript","packages":{}}}],"id":"6fecf8a7-cda4-4888-aae6-adbb0698c3cb","request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n\t\"username\": \"martina\",\n    \"password\": \"Manuelarduino\",\n    \"contact_id\": \"1\"\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:3001/api/v1/users","description":"<p>Esta solicitud <strong>POST</strong> se utiliza para enviar datos al servidor para crear un nuevo usuario en el sistema. La información del usuario se envía en el cuerpo de la solicitud en formato JSON.</p>\n<h4 id=\"cuerpo-de-la-solicitud-request-body\">Cuerpo de la solicitud (Request Body):</h4>\n<ul>\n<li>El cuerpo de la solicitud debe ser un objeto JSON que contenga la información del usuario a crear.</li>\n</ul>\n<p><strong>Parámetros del cuerpo de la solicitud</strong>:</p>\n<ul>\n<li><p><code>username</code> (str) [Obligatorio]: El nombre de usuario único.</p>\n</li>\n<li><p><code>password</code> (str) [Obligatorio]: La contraseña del usuario.</p>\n</li>\n<li><p><code>contact_id</code> (str) [Obligatorio: El identificador del contacto del id, donde se evaluará si terminó su registro exitasomante.</p>\n</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>201 Created</strong>: El usuario se ha creado correctamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"User created successfully\",<br />  \"user_id\": 1<br />  }</p>\n</li>\n<li><p><strong>400 Bad Request</strong>: Si los datos enviados son inválidos o si faltan campos requeridos.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Field 'username' is required.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3001","path":["api","v1","users"],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"6fecf8a7-cda4-4888-aae6-adbb0698c3cb"},{"name":"Iniciar sesión","id":"4cb25656-d5b6-4319-a231-934ac7fe4502","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"matinolia\",\r\n    \"password\": \"Manuelarduino\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:3001/api/v1/users/login","description":"<p>Esta solicitud <strong>POST</strong> se utiliza para iniciar sesión en el sistema.</p>\n<h4 id=\"cuerpo-de-la-solicitud-request-body\">Cuerpo de la solicitud (Request Body):</h4>\n<ul>\n<li>El cuerpo de la solicitud debe ser un objeto JSON que contenga la información del usuario.</li>\n</ul>\n<p><strong>Parámetros del cuerpo de la solicitud</strong>:</p>\n<ul>\n<li><p><code>username</code> (str) [Obligatorio]: El nombre de usuario único.</p>\n</li>\n<li><p><code>password</code> (str) [Obligatorio]: La contraseña del usuario.</p>\n</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>201 Created</strong>: si las credenciales son validas, regresara el cuerpo en formato json del usuario.</p>\n</li>\n<li><p><strong>400 Bad Request</strong>: Si los datos enviados son inválidos.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Invalid credentials.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3001","path":["api","v1","users","login"],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"4cb25656-d5b6-4319-a231-934ac7fe4502"},{"name":"Actualizar Usuarios","event":[{"listen":"test","script":{"id":"87e6f2d5-3db8-4650-a531-42aa240f0d9d","exec":["pm.test(\"Successful PUT request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204]);","});",""],"type":"text/javascript","packages":{}}}],"id":"815b94d7-21bc-4300-8d9b-b4cc488ecf53","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n\t\"username\": \"majoama\"\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:3001/api/v1/users/1","description":"<p>Esta solicitud <strong>PUT</strong> se utiliza para <strong>sobrescribir</strong> o <strong>modificar</strong> los datos de un usuario existente. Usualmente, se utiliza cuando necesitas cambiar la información de un usuario después de haberlo creado. El identificador del usuario (<code>user_id</code>) se incluye en la URL para identificar qué usuario se debe actualizar.</p>\n<h4 id=\"cuerpo-de-la-solicitud-request-body\">Cuerpo de la solicitud (Request Body):</h4>\n<ul>\n<li>El cuerpo de la solicitud debe contener los campos que deseas modificar. Solo se actualizan los campos que se proporcionen.</li>\n</ul>\n<p><strong>Parámetros del cuerpo de la solicitud</strong>:</p>\n<ul>\n<li><p><code>username</code> (str) [Opcional]: El nuevo nombre de usuario.</p>\n</li>\n<li><p><code>password</code> (str) [Opcional]: La nueva contraseña del usuario.</p>\n</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: El usuario fue actualizado exitosamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"User updated successfully\",<br />  \"user_id\": 1<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si el usuario con el <code>user_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"User with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3001","path":["api","v1","users","1"],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"815b94d7-21bc-4300-8d9b-b4cc488ecf53"},{"name":"Eliminar Usuarios","event":[{"listen":"test","script":{"id":"4a8cf9b4-3b7b-4db9-bb8c-d84d8076fdc5","exec":["pm.test(\"Successful DELETE request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204]);","});",""],"type":"text/javascript","packages":{}}}],"id":"238cb36e-b1b6-478b-aaad-2b05055aa843","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:3001/api/v1/users/48","description":"<p>Esta solicitud <strong>DELETE</strong> se utiliza para eliminar un usuario existente del sistema. El identificador del usuario (<code>user_id</code>) se incluye en la Query para identificar qué usuario debe ser eliminado. Este tipo de solicitud se utiliza para <strong>eliminar</strong> los datos creados previamente mediante una solicitud POST.</p>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: El usuario se eliminó correctamente y se devuelve un mensaje confirmando la operación.</p>\n</li>\n<li><p>{<br />  \"message\": \"User with ID 1 deleted successfully\"<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si el usuario con el <code>user_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"User with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3001","path":["api","v1","users","48"],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"238cb36e-b1b6-478b-aaad-2b05055aa843"}],"id":"b098c428-37a5-43db-98a2-6996023f9249","description":"<p>Esta carpeta contiene todo lo relacionado con la <strong>gestión de usuarios</strong> dentro de la aplicación. Se encarga de la creación, actualización, eliminación y obtención de usuarios, además de gestionar sus datos y relaciones con otras entidades.</p>\n","_postman_id":"b098c428-37a5-43db-98a2-6996023f9249"},{"name":"contacts","item":[{"name":"Createcontacts","id":"5c006230-6d4e-4040-a76a-8a5e65ac6c1b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"221255@ids.upchiapas.edu.mx\",\n    \"name\": \"Merlin\",\n    \"last_name\": \"Ovando\",\n    \"phone\": \"3231323\"\n}   ","options":{"raw":{"language":"json"}}},"url":"http://localhost:8000/api/v1/contacts/","description":"<p>Esta solicitud <strong>POST</strong> se utiliza para enviar datos al servidor para crear un nuevo contacto en el sistema. La información del contacto se envía en el cuerpo de la solicitud en formato JSON.</p>\n<h4 id=\"cuerpo-de-la-solicitud-request-body\">Cuerpo de la solicitud (Request Body):</h4>\n<ul>\n<li>El cuerpo de la solicitud debe ser un objeto JSON que contenga la información del contacto a crear.</li>\n</ul>\n<p><strong>Parámetros del cuerpo de la solicitud</strong>:</p>\n<ul>\n<li><p><code>email</code> (str) [Obligatorio]: La dirección de correo</p>\n</li>\n<li><p><code>name</code> (str) [Obligatorio]: El nombre de usuario único.</p>\n</li>\n<li><p><code>last_name</code> (str) [Obligatorio: El primer apellido del usuario</p>\n</li>\n<li><p><code>phone</code> (str) [Obligatorio: El numero de teléfono del usuario</p>\n</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>201 Created</strong>: El contacto se ha creado correctamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"Contact created successfully\",<br />  }</p>\n</li>\n<li><p><strong>400 Bad Request</strong>: Si los datos enviados son inválidos o si faltan campos requeridos.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Field 'email' is required.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","v1","contacts",""],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"5c006230-6d4e-4040-a76a-8a5e65ac6c1b"}],"id":"dfc46ea1-8e96-4dee-a84f-14db2758fbb0","description":"<p>Esta carpeta maneja toda la lógica relacionada con los contactos que los usuarios envían al sistema a través del endpoint POST. Aquí se procesan y almacenan los datos enviados por los usuarios, como nombres y correos electrónicos. El propósito de este módulo es recibir información de contacto para posteriores interacciones, como responder consultas o almacenar registros de comunicación.</p>\n","_postman_id":"dfc46ea1-8e96-4dee-a84f-14db2758fbb0"},{"name":"Notifications","item":[{"name":"Crear Notificaciones","event":[{"listen":"test","script":{"id":"710bb013-a913-4839-8079-3c9617ecd629","exec":["pm.test(\"Successful POST request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});",""],"type":"text/javascript","packages":{}}}],"id":"08c28914-a118-4a6c-aec0-5aa37e42354c","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJtYXJ0aW4iLCJleHAiOjE3MzEwNDg3MTd9.sf33l4hhEzYbY-tr7W1YSd3bgj9s0ANx9Ww394HmCmk"},{"key":"Cookie","value":"XSRF-TOKEN=eyJpdiI6ImNxOU9oblVBak8yOE5GaFRELzR1R2c9PSIsInZhbHVlIjoiTXVTZEJkN1dXMzk2Qm54d0pjVzVsbEdDZ05aZjFjL1BGeW9xSldJV2FwVEJqWmJ6eGw2TzVZL1lsTHUvS0paeUFySFI2SGE0NWZaaWNLUEFiQUtRWmRVMllxaXVUT3V4ODMrZXFWNmlwcWZ3cUQ3ZlJ0NHV6WjRRdEdMZFE3a2YiLCJtYWMiOiIxMmI4NmYyYTM0YTc3ZGNhMjAzYTZlMjhmMjhkYzdjOGYzYTgyNTQxMDYyYTU3NzMxNjI0N2I4ZmY4ZTFhNTc3IiwidGFnIjoiIn0%3D; erymx_session=eyJpdiI6InBBMlRhL0hGREh5SFlXaTFqODFxMHc9PSIsInZhbHVlIjoiakkvWldrampsV0NyNVMzL0ZKVkdHa3VNMlh2NmROdGM4OFRHZk1GWjY5NU9kOGRSVVA0UEplVzZuOUxsK2tPMHE0N3NqOUZURi95UUNVYW9iYms2NFBiOTVRK0VSLzErNTJ5eUF0NndiMmJNcHZMSm1GR2FuS0FrTC9MTWF4dUkiLCJtYWMiOiI2OTY4NmNmYTQzZDgxOTJiZWNjOTE1OGVjNTE5YmRhOGQ1MjhlODIyZTkxNTZlNjAxZjJhZDIzNjE0YjIxOWQ5IiwidGFnIjoiIn0%3D"}],"body":{"mode":"raw","raw":"{\n    \"user_id\": 2,\n    \"title\": \"Usuario creado\",\n    \"message\": \"Registro exitoso para el usuario angelxmxx.\",\n    \"type\": \"email\",\n    \"service_type\": \"email\",\n    \"link\": \"https://example.com\"\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:3002/api/v1/notifications/","description":"<p>Esta solicitud <strong>POST</strong> se utiliza para <strong>crear</strong> una nueva notificación en el sistema. Los datos de la notificación se envían en el cuerpo (body) de la solicitud como un objeto JSON, y la API responderá con un mensaje de éxito y el <code>id</code> de la notificación creada si la solicitud es exitosa.</p>\n<h4 id=\"parámetros-de-la-solicitud-body\">Parámetros de la solicitud (Body):</h4>\n<p>La solicitud <strong>POST</strong> debe incluir un cuerpo JSON con los siguientes campos:</p>\n<ul>\n<li><p><code>user_id</code> (int) [Obligatorio]: El ID del usuario al que va dirigida la notificación.</p>\n</li>\n<li><p><code>title</code> (str) [Obligatorio]: El título de la notificación.</p>\n</li>\n<li><p><code>message</code> (str) [Obligatorio]: El contenido o mensaje de la notificación.</p>\n</li>\n<li><p><code>type</code> (str) [Obligatorio]: El tipo de notificación. Puede ser uno de los siguientes valores: <code>'email'</code>, <code>'sms'</code>, <code>'push'</code>, <code>'in_app'</code>.</p>\n</li>\n<li><p><code>service_type</code> (str) [Obligatorio]: El tipo de notificación. Puede ser por correo o por WhatsApp</p>\n</li>\n<li><p><code>link</code> (str) [Opcional]: Un enlace opcional que acompaña la notificación.</p>\n</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>201 Created</strong>: La notificación fue creada exitosamente y se devuelve el <code>id</code> de la notificación creada.</p>\n</li>\n<li><p>{<br />  \"message\": \"Notification created successfully\",<br />  \"notification_id\": 1<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si el usuario con el <code>user_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"User with ID 3 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3002","path":["api","v1","notifications",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"08c28914-a118-4a6c-aec0-5aa37e42354c"},{"name":"Actualizar Notificaciones","event":[{"listen":"test","script":{"id":"b82e5ab0-afea-464d-964c-03613d988a38","exec":["pm.test(\"Successful PUT request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204]);","});",""],"type":"text/javascript","packages":{}}}],"id":"677df726-6f8c-460d-baaa-b1c90d699514","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n\t\"title\": \"Tienes una actividad asignada ho de SOA\",\n    \"message\": \"Actividad de mineria de datos\"\n}","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:3002/api/v1/notifications/672d8faee81be2a028fcb8de","description":"<p>Esta solicitud <strong>PUT</strong> se utiliza para <strong>actualizar</strong> una notificación existente en el sistema. La notificación se identifica mediante el <code>notification_id</code>, que se incluye en la URL como un parámetro. Los datos que se desean modificar se envían en el cuerpo (body) de la solicitud en formato JSON. Solo se actualizarán los campos que se proporcionen en la solicitud.</p>\n<h4 id=\"parámetros-del-cuerpo-body\">Parámetros del cuerpo (Body):</h4>\n<p>La solicitud <strong>PUT</strong> debe incluir un cuerpo JSON con los campos que se desean actualizar. Cualquier campo que no se desee modificar puede omitirse o enviarse como <code>null</code>.</p>\n<ul>\n<li><p><code>title</code> (str) [Opcional]: El título de la notificación.</p>\n</li>\n<li><p><code>message</code> (str) [Opcional]: El contenido o mensaje de la notificación.</p>\n</li>\n<li><p><code>type</code> (str) [Opcional]: El tipo de notificación. Puede ser uno de los siguientes valores: <code>'email'</code>, <code>'sms'</code>, <code>'push'</code>, <code>'in_app'</code>.</p>\n</li>\n<li><p><code>link</code> (str) [Opcional]: Un enlace opcional que acompaña la notificación.</p>\n</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: La notificación fue actualizada exitosamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"Notification updated successfully\"<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si la notificación con el <code>notification_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Notification with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3002","path":["api","v1","notifications","672d8faee81be2a028fcb8de"],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"677df726-6f8c-460d-baaa-b1c90d699514"},{"name":"Eliminar Notificaciones","event":[{"listen":"test","script":{"id":"840b67a9-0d83-4bcd-b96e-72a4ad2b00f2","exec":["pm.test(\"Successful DELETE request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204]);","});",""],"type":"text/javascript","packages":{}}}],"id":"b24d4d48-408c-46b2-8a4c-4122b591396b","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJtYXJ0aW4iLCJleHAiOjE3MzA5NTk2NTF9.ZU5UzaMnKC6S7eVTueaDrFh9U9xRxBOmkKeLguTMOoE"},{"key":"Cookie","value":"XSRF-TOKEN=eyJpdiI6ImNxOU9oblVBak8yOE5GaFRELzR1R2c9PSIsInZhbHVlIjoiTXVTZEJkN1dXMzk2Qm54d0pjVzVsbEdDZ05aZjFjL1BGeW9xSldJV2FwVEJqWmJ6eGw2TzVZL1lsTHUvS0paeUFySFI2SGE0NWZaaWNLUEFiQUtRWmRVMllxaXVUT3V4ODMrZXFWNmlwcWZ3cUQ3ZlJ0NHV6WjRRdEdMZFE3a2YiLCJtYWMiOiIxMmI4NmYyYTM0YTc3ZGNhMjAzYTZlMjhmMjhkYzdjOGYzYTgyNTQxMDYyYTU3NzMxNjI0N2I4ZmY4ZTFhNTc3IiwidGFnIjoiIn0%3D; erymx_session=eyJpdiI6InBBMlRhL0hGREh5SFlXaTFqODFxMHc9PSIsInZhbHVlIjoiakkvWldrampsV0NyNVMzL0ZKVkdHa3VNMlh2NmROdGM4OFRHZk1GWjY5NU9kOGRSVVA0UEplVzZuOUxsK2tPMHE0N3NqOUZURi95UUNVYW9iYms2NFBiOTVRK0VSLzErNTJ5eUF0NndiMmJNcHZMSm1GR2FuS0FrTC9MTWF4dUkiLCJtYWMiOiI2OTY4NmNmYTQzZDgxOTJiZWNjOTE1OGVjNTE5YmRhOGQ1MjhlODIyZTkxNTZlNjAxZjJhZDIzNjE0YjIxOWQ5IiwidGFnIjoiIn0%3D"}],"url":"http://127.0.0.1:3002/api/v1/notifications/672d8faee81be2a028fcb8de","description":"<p>Esta solicitud <strong>DELETE</strong> se utiliza para <strong>eliminar</strong> una notificación existente en el sistema. La notificación se identifica mediante el <code>notification_id</code>, que se incluye en la Query como un parámetro. No se envía un cuerpo en la solicitud <strong>DELETE</strong>, solo es necesario el identificador de la notificación.</p>\n<h4 id=\"parámetros-de-la-solicitud\">Parámetros de la solicitud:</h4>\n<ul>\n<li><code>notification_id</code> (int) [Obligatorio]: El identificador único de la notificación que se desea eliminar. Este se incluye en la Query.</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: La notificación fue eliminada exitosamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"Notification with ID 1 eliminated successfully.\"<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si la notificación con el <code>notification_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Notification with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3002","path":["api","v1","notifications","672d8faee81be2a028fcb8de"],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"b24d4d48-408c-46b2-8a4c-4122b591396b"}],"id":"7f89f6d4-09fe-4334-9552-b9f4553d484c","description":"<p>Esta carpeta maneja toda la lógica relacionada con las <strong>notificaciones</strong> que el sistema envía a los usuarios. Las notificaciones pueden ser de diferentes tipos (email, SMS, push, etc.), y la carpeta contiene la lógica para crearlas, actualizarlas, y eliminarlas.</p>\n","_postman_id":"7f89f6d4-09fe-4334-9552-b9f4553d484c"},{"name":"Payments","item":[{"name":"Ordenar Pago","id":"9efa735f-24db-46b1-989e-77ca5ae5ad4f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"user_id\": 1,\n    \"items\": [\n      {\n        \"title\": \"Suscripcion optime \",\n        \"quantity\": 1,\n        \"unit_price\": 20.76,\n        \"currency_id\": \"MXN\"\n      }\n    ],\n    \"payer\": {\n      \"email\": \"test_user_123456@testuser.com\"\n    },\n    \"description\": \"Pago de prueba\"\n  }","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:8000/api/v1/payments/","description":"<p>Este método <strong>POST</strong> se utiliza para crear un nuevo pago a través de <strong>Mercado Pago</strong>. Cuando se realiza esta solicitud, el sistema interactúa con la API de Mercado Pago para generar una preferencia de pago, que puede ser utilizada para procesar el pago por parte del usuario.</p>\n<p><strong>Parámetros de la solicitud:</strong></p>\n<ul>\n<li><p><strong>user_id</strong> (int): El identificador del usuario que está realizando el pago.</p>\n</li>\n<li><p><strong>items</strong> (list): Una lista de artículos que se están comprando. Cada artículo debe tener:</p>\n<ul>\n<li><p><strong>title</strong> (string): El nombre o descripción del producto.</p>\n</li>\n<li><p><strong>quantity</strong> (int): La cantidad de artículos que se van a comprar.</p>\n</li>\n<li><p><strong>unit_price</strong> (float): El precio unitario del artículo.</p>\n</li>\n<li><p><strong>currency_id</strong> (string): La moneda utilizada para la transacción (por ejemplo, \"MXN\" para pesos mexicanos).</p>\n</li>\n</ul>\n</li>\n<li><p><strong>payer</strong> (dict): Información sobre el comprador. Debe incluir:</p>\n<ul>\n<li><strong>email</strong> (string): El correo electrónico del comprador.</li>\n</ul>\n</li>\n<li><p><strong>description</strong> (string): Una breve descripción del propósito o detalles del pago.</p>\n</li>\n</ul>\n<p><strong>Códigos de respuesta:</strong></p>\n<ul>\n<li><p><code>201 Created</code>: El pago se ha creado correctamente.</p>\n</li>\n<li><p><code>400 Bad Request</code>: Error en los parámetros enviados o en la solicitud.</p>\n</li>\n<li><p><code>500 Internal Server Error</code>: Error del servidor al procesar el pago.</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","v1","payments",""],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"9efa735f-24db-46b1-989e-77ca5ae5ad4f"}],"id":"9cabe332-47fb-4812-9c32-ee005c4caa2c","description":"<p>Este folder contiene las solicitudes necesarias para integrar y gestionar pagos a través de <strong>Mercado Pago</strong>. Aquí podrás crear y procesar pagos, obtener detalles de transacciones, y gestionar el estado de los mismos.</p>\n","_postman_id":"9cabe332-47fb-4812-9c32-ee005c4caa2c"},{"name":"Activities","item":[{"name":"Obtener Actividades","event":[{"listen":"test","script":{"id":"08d5f41d-6688-49d6-ba79-b36985909a95","exec":["pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});"],"type":"text/javascript","packages":{}}}],"id":"fe4daad5-2f44-4fba-887d-c7f1588cbf76","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"url":"http://localhost:3003/api/v1/act/9","description":"<p>Esta solicitud <strong>GET</strong> se utiliza para <strong>obtener</strong> los detalles de una actividad específica en el sistema. La actividad se identifica mediante su <code>activities_id</code>, que se incluye en la URL como un parámetro. La solicitud no incluye un cuerpo (body), pero el <code>activities_id</code> es necesario para especificar qué actividad deseas obtener.</p>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: La actividad fue encontrada y los detalles de la actividad se devuelven en la respuesta.</p>\n</li>\n<li><p>{<br />  \"id\": 1,<br />  \"title\": \"Proyecto Final\",<br />  \"description\": \"Crear una API REST para gestionar actividades.\",<br />  \"delivery_date\": \"2024-12-01\",<br />  \"link_classroom\": \"<a href=\"https://classroom.google.com/c/project-final\">https://classroom.google.com/c/project-final\"</a>,<br />  \"type\": \"exam\",<br />  \"status\": \"pending\",<br />  \"user_id\": 3<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si la actividad con el <code>activities_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Activity with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3003","path":["api","v1","act","9"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"fe4daad5-2f44-4fba-887d-c7f1588cbf76"},{"name":"Crear Actividades","event":[{"listen":"test","script":{"id":"7026722e-12db-4faa-bc8b-abac99baae66","exec":["pm.test(\"Successful POST request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});",""],"type":"text/javascript","packages":{}}}],"id":"fff5850f-77af-4bd9-8991-690cf84cf07c","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"user_id\": 3,\n    \"title\": \"Videos para estudiar lo que se verá en la proxima clase\",\n    \"description\": \"Nuevo material\",\n    \"type\": \"assignment\",\n    \"status\": \"sent\",\n    \"delivery_date\": \"2024-11-16\",\n    \"link_classroom\": \"http://link-to-classroom\"\n}","options":{"raw":{"language":"json"}}},"url":"http://52.72.86.85:8000/api/v1/act","description":"<p>Esta solicitud <strong>POST</strong> se utiliza para <strong>crear</strong> una nueva actividad en el sistema. Los datos de la actividad se envían en el cuerpo (body) de la solicitud como un objeto JSON, y la API responderá con un mensaje de éxito y el <code>id</code> de la actividad recién creada si la solicitud es exitosa.</p>\n<h4 id=\"parámetros-de-la-solicitud-body\">Parámetros de la solicitud (Body):</h4>\n<p>La solicitud <strong>POST</strong> debe incluir un cuerpo JSON con los siguientes campos:</p>\n<ul>\n<li><p><code>user_id</code> (int) [Obligatorio]: El ID del usuario que creó o está relacionado con la actividad.</p>\n</li>\n<li><p><code>title</code> (str) [Obligatorio]: El título de la actividad.</p>\n</li>\n<li><p><code>description</code> (str) [Obligatorio]: Descripción detallada de la actividad.</p>\n</li>\n<li><p><code>delivery_date</code> (date) [Obligatorio]: La fecha límite de entrega para la actividad (formato YYYY-MM-DD).</p>\n</li>\n<li><p><code>link_classroom</code> (str) [Obligatorio]: Un enlace a la actividad en Classroom o una plataforma externa.</p>\n</li>\n<li><p><code>type</code> (str) [Obligatorio]: El tipo de actividad (por ejemplo, \"exam\", \"assignment\").</p>\n</li>\n<li><p><code>status</code> (str) [Obligatorio]: El estado de la actividad (por ejemplo, \"pending\", \"completed\").</p>\n</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>201 Created</strong>: La actividad se creó exitosamente y se devuelve el <code>id</code> de la actividad creada.</p>\n</li>\n<li><p>{<br />  \"message\": \"Activity created successfully\",<br />  \"Activity_id\": 1<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si el usuario con el <code>user_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"User with ID 3 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","v1","act"],"host":["52","72","86","85"],"query":[],"variable":[]}},"response":[],"_postman_id":"fff5850f-77af-4bd9-8991-690cf84cf07c"},{"name":"Actualizar Actividades","event":[{"listen":"test","script":{"id":"f009e85e-9c44-413a-88f0-3ceb11ad1198","exec":["pm.test(\"Successful PUT request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204]);","});",""],"type":"text/javascript","packages":{}}}],"id":"db34b78e-4d95-42e8-8a18-c68c711258b2","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n\t\"title\": \"quizz\"\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3003/api/v1/act/10","description":"<p>Esta solicitud <strong>PUT</strong> se utiliza para <strong>actualizar</strong> una actividad existente en el sistema. La actividad se identifica mediante el <code>activities_id</code>, que se incluye en la URL como un parámetro. Los datos que se desean modificar se envían en el cuerpo (body) de la solicitud en formato JSON.</p>\n<h4 id=\"parámetros-del-cuerpo-body\">Parámetros del cuerpo (Body):</h4>\n<p>La solicitud <strong>PUT</strong> debe incluir un cuerpo JSON con los campos que se desean actualizar. Cualquier campo que no se desee modificar puede omitirse o enviarse como <code>null</code>.</p>\n<ul>\n<li><p><code>title</code> (str) [Opcional]: El título de la actividad.</p>\n</li>\n<li><p><code>description</code> (str) [Opcional]: Descripción detallada de la actividad.</p>\n</li>\n<li><p><code>delivery_date</code> (date) [Opcional]: La fecha límite de entrega para la actividad (formato YYYY-MM-DD).</p>\n</li>\n<li><p><code>link_classroom</code> (str) [Opcional]: Un enlace a la actividad en Classroom o una plataforma externa.</p>\n</li>\n<li><p><code>type</code> (str) [Opcional]: El tipo de actividad (por ejemplo, \"exam\", \"assignment\").</p>\n</li>\n<li><p><code>status</code> (str) [Opcional]: El estado de la actividad (por ejemplo, \"pending\", \"completed\").</p>\n</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: La actividad fue actualizada exitosamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"Activity updated successfully\"<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si la actividad con el <code>activities_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Activity with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3003","path":["api","v1","act","10"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"db34b78e-4d95-42e8-8a18-c68c711258b2"},{"name":"Eliminar Actividades","event":[{"listen":"test","script":{"id":"0c4e7f96-dba3-4a32-a87d-8257c9582769","exec":["pm.test(\"Successful DELETE request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204]);","});",""],"type":"text/javascript","packages":{}}}],"id":"079e8c9f-d66b-4ad8-9a17-6cfafdede5c6","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:3003/api/v1/act/?activities_id=9","description":"<p>Esta solicitud <strong>DELETE</strong> permite eliminar una actividad existente del sistema. La actividad se identifica mediante su <code>activities_id</code>, que se pasa como parámetro en la <strong>Query</strong>. No es necesario enviar un cuerpo en la solicitud, ya que toda la información requerida para la eliminación se proporciona a través del parámetro de la <strong>Query</strong>.</p>\n<h4 id=\"parámetros-de-la-solicitud\">Parámetros de la solicitud:</h4>\n<ul>\n<li><code>activities_id</code> (int) [Obligatorio]: El identificador único de la actividad que se desea eliminar. Este se incluye en la Query.</li>\n</ul>\n<h4 id=\"respuestas\">Respuestas:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: La actividad fue eliminada exitosamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"Activity with ID 1 eliminated successfully.\"<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si la actividad con el <code>activities_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Activity with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"3003","path":["api","v1","act",""],"host":["localhost"],"query":[{"key":"activities_id","value":"9"}],"variable":[]}},"response":[],"_postman_id":"079e8c9f-d66b-4ad8-9a17-6cfafdede5c6"}],"id":"48509378-4f24-4bd1-adc2-a4eeb0a98dd2","description":"<p>Esta carpeta contiene la lógica relacionada con las <strong>actividades académicas</strong> asignadas a los usuarios. Incluye funcionalidades para la gestión de actividades, como la creación, actualización, eliminación, y búsqueda de actividades.</p>\n","_postman_id":"48509378-4f24-4bd1-adc2-a4eeb0a98dd2"},{"name":"Schedules","item":[{"name":"Obtener Horario","event":[{"listen":"test","script":{"id":"571a8998-6991-494c-8c8b-e57b97a31096","exec":["pm.test(\"Status code is 200\", function () {","    pm.response.to.have.status(200);","});"],"type":"text/javascript","packages":{}}}],"id":"79b970a8-df6b-486c-936c-eb714da4815c","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://52.72.86.85:8000/api/v1/schedules/1","description":"<p>Esta solicitud GET se utiliza para obtener los horarios asociados a un usuario específico en el sistema, utilizando su <code>user_id</code>.</p>\n<h3 id=\"parámetros-de-la-solicitud\">Parámetros de la solicitud:</h3>\n<ul>\n<li><p><code>user_id</code> (int) [Obligatorio]: El identificador único del usuario cuyos horarios se desean obtener. Este se incluye en la URL.</p>\n</li>\n<li><p><code>skip</code> (int) [Opcional]: Número de elementos a omitir antes de comenzar a devolver los resultados. Útil para la paginación. El valor predeterminado es 0.</p>\n</li>\n<li><p><code>limit</code> (int) [Opcional]: Número máximo de horarios a devolver. Controla la cantidad de resultados que se mostrarán en una única solicitud. El valor predeterminado es 6, y el máximo permitido es 100.</p>\n</li>\n</ul>\n<p>Una solicitud exitosa devolverá los horarios dentro del rango especificado, y la respuesta incluirá detalles de cada horario como las asignaturas, días de la semana, y calificaciones relacionadas.  </p>\n<h4 id=\"respuestas\"><strong>Respuestas</strong>:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: La solicitud fue exitosa y devuelve los detalles del horario.</p>\n</li>\n<li><p>{<br />  \"id\": 1,<br />  \"title\": \"Horario de Primavera 2024\",<br />  \"description\": \"Horario de clases del semestre de primavera.\",<br />  \"start_date\": \"2024-01-15\",<br />  \"end_date\": \"2024-06-15\"<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si el horario con el <code>schedule_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Schedule with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","v1","schedules","1"],"host":["52","72","86","85"],"query":[],"variable":[]}},"response":[],"_postman_id":"79b970a8-df6b-486c-936c-eb714da4815c"},{"name":"Crear Horario","event":[{"listen":"test","script":{"id":"328adfaa-811b-44a7-a587-82caf60e2700","exec":["pm.test(\"Successful POST request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201]);","});",""],"type":"text/javascript","packages":{}}}],"id":"f629e9a4-284c-4360-8cf3-1bc48d9d856d","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Bearer <your_token>"}],"body":{"mode":"raw","raw":"{\n    \"user_id\": 7,\n    \"items\": [\n        {\n            \"name\": \"Mathematics\",\n            \"period\": 1,\n            \"group\": \"A\",\n            \"semester_grade\": 1,\n            \"serialization_raiting\": 0,\n            \"clearance_raiting\": 1,\n            \"monday\": [9, 10],\n            \"tuesday\": [9, 10],\n            \"wednesday\": [9, 10],\n            \"thursday\": [9, 10],\n            \"friday\": [9, 10]\n        },\n        {\n            \"name\": \"Physics\",\n            \"period\": 1,\n            \"group\": \"B\",\n            \"semester_grade\": 1,\n            \"serialization_raiting\": 0,\n            \"clearance_raiting\": 1,\n            \"monday\": [10, 11],\n            \"tuesday\": [10, 11],\n            \"wednesday\": [10, 11],\n            \"thursday\": [10, 11],\n            \"friday\": [10, 11]\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"http://52.72.86.85:8000/api/v1/schedules/","description":"<p>Esta solicitud <strong>POST</strong> se utiliza para crear un nuevo horario en el sistema, enviando los datos en el cuerpo de la solicitud.</p>\n<h4 id=\"parámetros-del-cuerpo-body\"><strong>Parámetros del cuerpo (Body)</strong>:</h4>\n<ul>\n<li><p><code>title</code> (str) [Obligatorio]: El título del horario.</p>\n</li>\n<li><p><code>description</code> (str) [Opcional]: Una descripción del horario.</p>\n</li>\n<li><p><code>start_date</code> (date) [Obligatorio]: La fecha de inicio del horario.</p>\n</li>\n<li><p><code>end_date</code> (date) [Obligatorio]: La fecha de finalización del horario.</p>\n</li>\n</ul>\n<h4 id=\"respuestas\"><strong>Respuestas</strong>:</h4>\n<ul>\n<li><p><strong>201 Created</strong>: El horario fue creado exitosamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"Schedule created successfully\",<br />  \"schedule_id\": 1<br />  }</p>\n</li>\n<li><p><strong>400 Bad Request</strong>: Si falta algún campo obligatorio o si hay un error en la solicitud.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Invalid data provided.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"http","port":"8000","path":["api","v1","schedules",""],"host":["52","72","86","85"],"query":[],"variable":[]}},"response":[],"_postman_id":"f629e9a4-284c-4360-8cf3-1bc48d9d856d"},{"name":"Actualizar Horario","event":[{"listen":"test","script":{"id":"6d8cefb5-e6c6-4cb1-b80c-2548a93a43b3","exec":["pm.test(\"Successful PUT request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 201, 204]);","});",""],"type":"text/javascript","packages":{}}}],"id":"bc8b93ec-d999-46d1-abad-2fb028c28f32","request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"user_id\": 6,\n    \"items\": [\n        {\n            \"name\": \"Matemáticas\",\n            \"period\": 1,\n            \"group\": \"A\",\n            \"semester_grade\": 85,\n            \"serialization_raiting\": 90,\n            \"clearance_raiting\": 80,\n            \"monday\": [8, 9],\n            \"tuesday\": [10],\n            \"wednesday\": [],\n            \"thursday\": [8],\n            \"friday\": []\n        },\n        {\n            \"name\": \"Física\",\n            \"period\": 2,\n            \"group\": \"B\",\n            \"semester_grade\": 88,\n            \"serialization_raiting\": 85,\n            \"clearance_raiting\": 75,\n            \"monday\": [],\n            \"tuesday\": [11],\n            \"wednesday\": [8, 9],\n            \"thursday\": [10],\n            \"friday\": []\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://bjl6a1y5a5.execute-api.us-east-1.amazonaws.com/optimeapi/v1/schedules/7","description":"<p>Esta solicitud <strong>PUT</strong> se utiliza para actualizar los detalles de un horario existente, identificado por su <code>schedule_id</code>. Solo los campos que se desean modificar deben incluirse en el cuerpo de la solicitud.</p>\n<h4 id=\"parámetros-de-la-solicitud\"><strong>Parámetros de la solicitud</strong>:</h4>\n<ul>\n<li><code>schedule_id</code> (int) [Obligatorio]: El identificador único del horario que se desea actualizar. Este se incluye en la URL.</li>\n</ul>\n<h4 id=\"parámetros-del-cuerpo-body\"><strong>Parámetros del cuerpo (Body)</strong>:</h4>\n<ul>\n<li><p><code>title</code> (str) [Opcional]: El título del horario.</p>\n</li>\n<li><p><code>description</code> (str) [Opcional]: Una descripción del horario.</p>\n</li>\n<li><p><code>start_date</code> (date) [Opcional]: La fecha de inicio del horario.</p>\n</li>\n<li><p><code>end_date</code> (date) [Opcional]: La fecha de finalización del horario.</p>\n</li>\n</ul>\n<h4 id=\"respuestas\"><strong>Respuestas</strong>:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: El horario fue actualizado exitosamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"Schedule updated successfully\"<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si el horario con el <code>schedule_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Schedule with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"https","path":["optimeapi","v1","schedules","7"],"host":["bjl6a1y5a5","execute-api","us-east-1","amazonaws","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"bc8b93ec-d999-46d1-abad-2fb028c28f32"},{"name":"Eliminar Horario","event":[{"listen":"test","script":{"id":"5e2d9b89-23de-479f-bdd4-8213a68a6d34","exec":["pm.test(\"Successful DELETE request\", function () {","    pm.expect(pm.response.code).to.be.oneOf([200, 202, 204]);","});",""],"type":"text/javascript","packages":{}}}],"id":"024b9e40-0ac0-4a65-b238-4185be4a3b86","request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"<token>"}]},"isInherited":false},"method":"DELETE","header":[],"body":{"mode":"formdata","formdata":[{"key":"","value":"","type":"text"}]},"url":"https://bjl6a1y5a5.execute-api.us-east-1.amazonaws.com/optime/api/v1/schedules/?schedule_id=8","description":"<p>Esta solicitud <strong>DELETE</strong> se utiliza para eliminar un horario existente en el sistema, identificado por su <code>schedule_id</code>, ue se incluye en la Query como un parámetro. No se envía un cuerpo en la solicitud <strong>DELETE</strong>, solo es necesario el identificador del horario.</p>\n<h4 id=\"parámetros-de-la-solicitud\"><strong>Parámetros de la solicitud</strong>:</h4>\n<ul>\n<li><code>schedule_id</code> (int) [Obligatorio]: El identificador único del horario que se desea eliminar. Este se incluye en la Query.</li>\n</ul>\n<h4 id=\"respuestas\"><strong>Respuestas</strong>:</h4>\n<ul>\n<li><p><strong>200 OK</strong>: El horario fue eliminado exitosamente.</p>\n</li>\n<li><p>{<br />  \"message\": \"Schedule with ID 1 eliminated successfully.\"<br />  }</p>\n</li>\n<li><p><strong>404 Not Found</strong>: Si el horario con el <code>schedule_id</code> proporcionado no existe.</p>\n</li>\n<li><p>{<br />  \"detail\": \"Schedule with ID 1 not found.\"<br />  }</p>\n</li>\n</ul>\n","urlObject":{"protocol":"https","path":["optime","api","v1","schedules",""],"host":["bjl6a1y5a5","execute-api","us-east-1","amazonaws","com"],"query":[{"key":"schedule_id","value":"8"}],"variable":[]}},"response":[],"_postman_id":"024b9e40-0ac0-4a65-b238-4185be4a3b86"}],"id":"18ce0756-791d-4dbc-a2bc-96232fae5101","description":"<p>Esta carpeta se encarga de todo lo relacionado con los <strong>horarios</strong> académicos. Los usuarios pueden gestionar sus horarios, actualizar sus detalles y obtener la información relacionada con los mismos.</p>\n","_postman_id":"18ce0756-791d-4dbc-a2bc-96232fae5101"},{"name":"Api Whatsapp","item":[{"name":"enviar-mensaje","id":"4ced819d-aa62-4435-b520-d9a504d6047b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Cookie","value":"XSRF-TOKEN=eyJpdiI6ImNxOU9oblVBak8yOE5GaFRELzR1R2c9PSIsInZhbHVlIjoiTXVTZEJkN1dXMzk2Qm54d0pjVzVsbEdDZ05aZjFjL1BGeW9xSldJV2FwVEJqWmJ6eGw2TzVZL1lsTHUvS0paeUFySFI2SGE0NWZaaWNLUEFiQUtRWmRVMllxaXVUT3V4ODMrZXFWNmlwcWZ3cUQ3ZlJ0NHV6WjRRdEdMZFE3a2YiLCJtYWMiOiIxMmI4NmYyYTM0YTc3ZGNhMjAzYTZlMjhmMjhkYzdjOGYzYTgyNTQxMDYyYTU3NzMxNjI0N2I4ZmY4ZTFhNTc3IiwidGFnIjoiIn0%3D; erymx_session=eyJpdiI6InBBMlRhL0hGREh5SFlXaTFqODFxMHc9PSIsInZhbHVlIjoiakkvWldrampsV0NyNVMzL0ZKVkdHa3VNMlh2NmROdGM4OFRHZk1GWjY5NU9kOGRSVVA0UEplVzZuOUxsK2tPMHE0N3NqOUZURi95UUNVYW9iYms2NFBiOTVRK0VSLzErNTJ5eUF0NndiMmJNcHZMSm1GR2FuS0FrTC9MTWF4dUkiLCJtYWMiOiI2OTY4NmNmYTQzZDgxOTJiZWNjOTE1OGVjNTE5YmRhOGQ1MjhlODIyZTkxNTZlNjAxZjJhZDIzNjE0YjIxOWQ5IiwidGFnIjoiIn0%3D"}],"body":{"mode":"raw","raw":"{\n    \"recipient_phone_number\": \"529515271070\",\n    \"status\": \"Declinado\",\n    \"amount\": \"90000.00\",\n    \"currency\": \"MXN\",\n    \"payment_id\": \"99922\"\n}","options":{"raw":{"language":"json"}}},"url":"https://bjl6a1y5a5.execute-api.us-east-1.amazonaws.com/optime/api/v1/send-payment-confirmation","urlObject":{"protocol":"https","path":["optime","api","v1","send-payment-confirmation"],"host":["bjl6a1y5a5","execute-api","us-east-1","amazonaws","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"4ced819d-aa62-4435-b520-d9a504d6047b"}],"id":"ef194ed8-f4c8-4f5c-87d4-08e08f3e8427","description":"<p>Este folder contiene las solicitudes necesarias para integrar y gestionar el envío de mensajes a través de la API de WhatsApp. Aquí podrás enviar mensajes a destinatarios específicos, elegir entre diferentes tipos de mensajes como plantillas o texto libre, y gestionar el contenido de los mensajes enviados a través de WhatsApp.</p>\n","_postman_id":"ef194ed8-f4c8-4f5c-87d4-08e08f3e8427"},{"name":"aws","item":[{"name":"Generar verificación de Two-Factor","id":"82bc5f5c-696c-44ae-984c-37a092559554","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"contact_id\": 1,\n    \"email\": \"221255@ids.upchiapas.edu.mx\"\n}","options":{"raw":{"language":"json"}}},"url":"https://vnl7qislofiherevwep4srfr3e0mnbav.lambda-url.us-east-1.on.aws/","urlObject":{"protocol":"https","path":[""],"host":["vnl7qislofiherevwep4srfr3e0mnbav","lambda-url","us-east-1","on","aws"],"query":[],"variable":[]}},"response":[],"_postman_id":"82bc5f5c-696c-44ae-984c-37a092559554"},{"name":"Verificación de codigo Two-Factor","id":"5650f204-7b06-4ca3-89e5-ac9a6f239964","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"contact_id\": \"100\",\n    \"otp\": \"620159\"\n}","options":{"raw":{"language":"json"}}},"url":"https://gazxiyw6xpb23pniw76bmgjibq0hlnuz.lambda-url.us-east-1.on.aws/","urlObject":{"protocol":"https","path":[""],"host":["gazxiyw6xpb23pniw76bmgjibq0hlnuz","lambda-url","us-east-1","on","aws"],"query":[],"variable":[]}},"response":[],"_postman_id":"5650f204-7b06-4ca3-89e5-ac9a6f239964"},{"name":"servicio-enviar-mail","id":"b126193b-f7d8-4062-9f95-b2c108797aa9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"email\": \"221255@ids.upchiapas.edu.mx\",\n    \"subject\": \"Asunto del correo\",\n    \"body\": \"<html><body><h1>Hola</h1><p>Este es el cuerpo del correo en formato HTML</p></body></html>\"\n}","options":{"raw":{"language":"json"}}},"url":"https://z6ek44h52vjowerl5tofndsr2i0ozqob.lambda-url.us-east-1.on.aws/","urlObject":{"protocol":"https","path":[""],"host":["z6ek44h52vjowerl5tofndsr2i0ozqob","lambda-url","us-east-1","on","aws"],"query":[],"variable":[]}},"response":[],"_postman_id":"b126193b-f7d8-4062-9f95-b2c108797aa9"},{"name":"Predict-Mineria","id":"971658e1-b128-451a-a18a-885f9a1ae1b6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\"user_id\": 2}","options":{"raw":{"language":"json"}}},"url":"http://52.72.86.85:5001/api/predict","urlObject":{"protocol":"http","port":"5001","path":["api","predict"],"host":["52","72","86","85"],"query":[],"variable":[]}},"response":[],"_postman_id":"971658e1-b128-451a-a18a-885f9a1ae1b6"},{"name":"save-minutes-model-mineria","id":"7bdf2a3c-c17e-40b7-b1fd-5d7dcb2453a9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"user_id\": 1,\n    \"minutes\": 10,\n    \"date\": \"2025-11-30\"\n}","options":{"raw":{"language":"json"}}},"url":"http://52.72.86.85:5001/api/save","urlObject":{"protocol":"http","port":"5001","path":["api","save"],"host":["52","72","86","85"],"query":[],"variable":[]}},"response":[],"_postman_id":"7bdf2a3c-c17e-40b7-b1fd-5d7dcb2453a9"},{"name":"get-tasks-google-classroom","id":"f4d62bd5-ffb4-4ffc-93f6-b6782810b764","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"token\": \"ya29.a0AeDClZCbryCmaudNBvZkxAh-HdBsfIYgu-mbZ_g_hnsYTSXBrCE4tgIQTyI0xtuzU41wTbwSIcTmU01OFebrccYXUwXq6it9wPooIMtnpi10dsdFYmvEYpts_DJn1Kfy1VzaG3y62bzQK8r8VG0FFmelsRyyL5IJ9QnIAuijaCgYKAdESARESFQHGX2MioVJPq6rYME9QhJHOHqoWUQ0175\",\n    \"refresh_token\": \"1//0fZd17bGhpqSTCgYIARAAGA8SNwF-L9IrcSjGdTvgZSOATJ0VIhhXwsyahiiHvBhIg93e4AyCaZlOn12HfZ-7ddtgRHaJ0bg9eNc\"\n}","options":{"raw":{"language":"json"}}},"url":"https://f2unwytwjwp6q2nfdskyvqkcka0wiala.lambda-url.us-east-1.on.aws/","urlObject":{"protocol":"https","path":[""],"host":["f2unwytwjwp6q2nfdskyvqkcka0wiala","lambda-url","us-east-1","on","aws"],"query":[],"variable":[]}},"response":[],"_postman_id":"f4d62bd5-ffb4-4ffc-93f6-b6782810b764"}],"id":"61187642-c12c-4c00-8463-ae77ba28a127","_postman_id":"61187642-c12c-4c00-8463-ae77ba28a127","description":""},{"name":"azure","item":[{"name":"create-schedule-ag","id":"bbee08b6-eb7f-452f-8d75-669aa2159745","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"cuatrimestre_alumno\": 8,\n    \"materias\": [\n        {\n            \"nombre\": \"Inteligencia Artificial\",\n            \"cuatrimestre\": 8,\n            \"grupo\": \"B\",\n            \"lunes\": [8, 9],\n            \"martes\": [8, 9],\n            \"miercoles\": [8],\n            \"jueves\": [8],\n            \"viernes\": []\n        },\n        {\n            \"nombre\": \"Inteligencia Artificial\",\n            \"cuatrimestre\": 8,\n            \"grupo\": \"A\",\n            \"lunes\": [10, 11],\n            \"martes\": [10, 11],\n            \"miercoles\": [10, 11],\n            \"jueves\": [],\n            \"viernes\": []\n        },\n        {\n            \"nombre\": \"Compiladores e Intérpretes\",\n            \"cuatrimestre\": 8,\n            \"grupo\": \"A\",\n            \"lunes\": [8, 9],\n            \"martes\": [8, 9],\n            \"miercoles\": [8, 9],\n            \"jueves\": [],\n            \"viernes\": []\n        },\n        {\n            \"nombre\": \"Compiladores e Intérpretes\",\n            \"cuatrimestre\": 8,\n            \"grupo\": \"B\",\n            \"lunes\": [10, 11],\n            \"martes\": [10, 11],\n            \"miercoles\": [10, 11],\n            \"jueves\": [],\n            \"viernes\": []\n        },\n        {\n            \"nombre\": \"Pruebas del Software\",\n            \"cuatrimestre\": 7,\n            \"grupo\": \"B\",\n            \"lunes\": [],\n            \"martes\": [14],\n            \"miercoles\": [],\n            \"jueves\": [8],\n            \"viernes\": []\n        },\n        {\n            \"nombre\": \"Pruebas del Software\",\n            \"cuatrimestre\": 7,\n            \"grupo\": \"A\",\n            \"lunes\": [],\n            \"martes\": [14],\n            \"miercoles\": [13],\n            \"jueves\": [],\n            \"viernes\": []\n        },\n        {\n            \"nombre\": \"Matemáticas Discretas\",\n            \"cuatrimestre\": 1,\n            \"grupo\": \"A\",\n            \"lunes\": [13],\n            \"martes\": [],\n            \"miercoles\": [13],\n            \"jueves\": [],\n            \"viernes\": []\n        },\n        {\n            \"nombre\": \"Mantenimiento de Software\",\n            \"cuatrimestre\": 8,\n            \"grupo\": \"A\",\n            \"lunes\": [],\n            \"martes\": [],\n            \"miercoles\": [],\n            \"jueves\": [],\n            \"viernes\": [15]\n        },\n        {\n            \"nombre\": \"Mantenimiento de Software\",\n            \"cuatrimestre\": 8,\n            \"grupo\": \"B\",\n            \"lunes\": [],\n            \"martes\": [],\n            \"miercoles\": [],\n            \"jueves\": [],\n            \"viernes\": [14]\n        },\n        {\n            \"nombre\": \"Estancia II\",\n            \"cuatrimestre\": 7,\n            \"grupo\": \"A\",\n            \"lunes\": [],\n            \"martes\": [],\n            \"miercoles\": [],\n            \"jueves\": [],\n            \"viernes\": [14]\n        }\n    ]\n}\n","options":{"raw":{"language":"json"}}},"url":"https://agoptimecreate.azurewebsites.net/api/genetico?code=mkhKsHY0zupMwpr536oyDHD1T4EPx5ivIDO7zNV2ON4JAzFuCGDNMQ%3D%3D","urlObject":{"protocol":"https","path":["api","genetico"],"host":["agoptimecreate","azurewebsites","net"],"query":[{"key":"code","value":"mkhKsHY0zupMwpr536oyDHD1T4EPx5ivIDO7zNV2ON4JAzFuCGDNMQ%3D%3D"}],"variable":[]}},"response":[],"_postman_id":"bbee08b6-eb7f-452f-8d75-669aa2159745"},{"name":"AG-LOCAL-TEST","id":"dcde6289-30da-4924-b1b7-f7729ce5a9db","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"cuatrimestre_alumno\": 8,\n    \"materias\": [\n        {\n            \"nombre\": \"Inglés III\",\n            \"cuatrimestre\": 3,\n            \"grupo\": \"A\",\n            \"lunes\": [8, 9],\n            \"martes\": [8, 9],\n            \"miercoles\": [8, 9],\n            \"jueves\": [8, 9],\n            \"viernes\": [8, 9]\n        },\n        {\n            \"nombre\": \"Arquitectura Orientada a Servicios\",\n            \"cuatrimestre\": 9,\n            \"grupo\": \"A\",\n            \"lunes\": [17, 18],\n            \"martes\": [17, 18],\n            \"miercoles\": [17, 18],\n            \"jueves\": [17, 18],\n            \"viernes\": [17, 18]\n        },\n        {\n            \"nombre\": \"Expresión Oral y Escrita II\",\n            \"cuatrimestre\": 9,\n            \"grupo\": \"B\",\n            \"lunes\": [17, 18],\n            \"martes\": [17, 18],\n            \"miercoles\": [17, 18],\n            \"jueves\": [17, 18],\n            \"viernes\": [17, 18]\n        },\n        {\n            \"nombre\": \"Probabilidad y Estadística\",\n            \"cuatrimestre\": 6,\n            \"grupo\": \"A\",\n            \"lunes\": [8, 9],\n            \"martes\": [8, 9],\n            \"miercoles\": [8, 9],\n            \"jueves\": [8, 9],\n            \"viernes\": [8, 9]\n        }\n    ]\n}\n","options":{"raw":{"language":"json"}}},"url":"http://127.0.0.1:5001/genetico","urlObject":{"protocol":"http","port":"5001","path":["genetico"],"host":["127","0","0","1"],"query":[],"variable":[]}},"response":[],"_postman_id":"dcde6289-30da-4924-b1b7-f7729ce5a9db"},{"name":"get-subjets-carrer","id":"f2567a68-24ed-4c2c-bd0d-d2e24afe9a68","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"map_id\": 2\n    \n}","options":{"raw":{"language":"json"}}},"url":"https://q3hinyahkg6ypwbfpmqszonexa0zhkzf.lambda-url.us-east-1.on.aws/","urlObject":{"protocol":"https","path":[""],"host":["q3hinyahkg6ypwbfpmqszonexa0zhkzf","lambda-url","us-east-1","on","aws"],"query":[],"variable":[]}},"response":[],"_postman_id":"f2567a68-24ed-4c2c-bd0d-d2e24afe9a68"}],"id":"bfa35d6a-ca98-4047-bf56-f73afc34e8e9","_postman_id":"bfa35d6a-ca98-4047-bf56-f73afc34e8e9","description":""},{"name":"chanels","item":[{"name":"create-message ","id":"180dc936-13b0-4542-afca-ad6af7aa3024","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"subject\": \"Anuncio importante\",\n    \"username\": \"Admin\",\n    \"content\": \"Este es un mensaje de prueba para RabbitMQ.\",\n    \"contact\": \"admin@example.com\"\n}","options":{"raw":{"language":"json"}}},"url":"https://bjl6a1y5a5.execute-api.us-east-1.amazonaws.com/optime/api/v1/message","urlObject":{"protocol":"https","path":["optime","api","v1","message"],"host":["bjl6a1y5a5","execute-api","us-east-1","amazonaws","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"180dc936-13b0-4542-afca-ad6af7aa3024"},{"name":"getmessages","id":"a4cec002-9375-4a08-a0d1-d1e39a49275e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://bjl6a1y5a5.execute-api.us-east-1.amazonaws.com/optime/api/v1/messages","urlObject":{"protocol":"https","path":["optime","api","v1","messages"],"host":["bjl6a1y5a5","execute-api","us-east-1","amazonaws","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"a4cec002-9375-4a08-a0d1-d1e39a49275e"},{"name":"delete-message","id":"689cda82-9792-4c19-aea3-0b78b531f868","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://bjl6a1y5a5.execute-api.us-east-1.amazonaws.com/optime/api/v1/delete/9","urlObject":{"protocol":"https","path":["optime","api","v1","delete","9"],"host":["bjl6a1y5a5","execute-api","us-east-1","amazonaws","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"689cda82-9792-4c19-aea3-0b78b531f868"}],"id":"fe96a00d-7755-4ff4-98be-6e827a3187e3","_postman_id":"fe96a00d-7755-4ff4-98be-6e827a3187e3","description":""},{"name":"Gateway","item":[{"name":"Users","item":[{"name":"GetUserById","id":"42915ada-6b56-44c9-9f77-d3e7dd413d27","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"accept","value":"application/json"},{"key":"Authorization","value":"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiZXhwIjoxNzMzNDQ2Nzg2fQ.x5izxts7-78A0Ife0j_PbaoNGjOljXPZlVKu7cFd680"}],"url":"https://bjl6a1y5a5.execute-api.us-east-1.amazonaws.com/optime/users/2","urlObject":{"protocol":"https","path":["optime","users","2"],"host":["bjl6a1y5a5","execute-api","us-east-1","amazonaws","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"42915ada-6b56-44c9-9f77-d3e7dd413d27"},{"name":"Login","id":"b8a8202c-437a-403d-94f5-0cc2847136a6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"username\": \"test\",\n    \"password\": \"test\"\n}","options":{"raw":{"language":"json"}}},"url":"https://services.optime-otech.xyz:3000/api/v1/users/login","urlObject":{"protocol":"https","port":"3000","path":["api","v1","users","login"],"host":["services","optime-otech","xyz"],"query":[],"variable":[]}},"response":[],"_postman_id":"b8a8202c-437a-403d-94f5-0cc2847136a6"}],"id":"c9eeb4c5-fcbe-4d85-9d07-4519a81ea323","_postman_id":"c9eeb4c5-fcbe-4d85-9d07-4519a81ea323","description":""}],"id":"0df157bc-46b1-4ae2-abf7-823aeb9adbbf","_postman_id":"0df157bc-46b1-4ae2-abf7-823aeb9adbbf","description":""}],"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""]}},{"listen":"test","script":{"type":"text/javascript","exec":[""]}}],"variable":[{"id":"530bbdd9-38d3-441e-92dc-61f171c18dc2","key":"id","value":"1"},{"id":"57b5ecc1-1ffd-4eb5-a9a4-fa78c5251c5d","key":"base_url","value":"https://postman-rest-api-learner.glitch.me/"}]}