Controlador para Laab2 y LaabPro
Este controlador maneja la lógica necesaria para validar datos de usuario y producto, verificar la compra, y generar un enlace de acceso al curso correspondiente en Laab2 o LaabPro con el uso de las funciones que hay en service.
Archivo
Section titled “Archivo”src/api/laab-connection/controler/laab-connection.ts
Descripción General
Section titled “Descripción General”El método getAccessLink es un punto de entrada que recibe el SKU del producto, el email del usuario y la vertical.
Su propósito es:
- Validar que se han recibido
email,SKUyvertical. - Obtener el producto asociado al SKU.
- Verificar que el usuario ha realizado una compra válida del producto.
- Validar condiciones adicionales (fecha, contrato firmado, pago completado).
- Buscar al usuario en el sistema.
- Procesar el acceso con Laab2 o LaabPro según corresponda.
- Devolver el estado del usuario (con URL de acceso o error).
📥 Parámetros del Body
Section titled “📥 Parámetros del Body”| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
email | string | ✅ | Correo del usuario que ha realizado la compra |
SKU | string | ✅ | Código único del producto adquirido |
vertical | string | ✅ | Nombre de la vertical para buscar la carpeta donde este el private.pem |
Laab Connection Controller
Section titled “Laab Connection Controller”import { ERROR_NECESSARY_DATA_NOT_PROVIDED, ERROR_CHECKING_PRODUCT, ERROR_CHECKING_ORDER, ERROR_CHECKING_USER,} from "../../../constants/errors";const LAAB_CONNECTION_SERVE = "api::laab-connection.laab-connection";
module.exports = { getAccessLink: async (ctx) => { const { SKU, email, vertical } = ctx.request.body;
if (!SKU || !email || !vertical) { ctx.badRequest(ERROR_NECESSARY_DATA_NOT_PROVIDED); return; }
const product = await strapi .service(LAAB_CONNECTION_SERVE) .getProductBySKU(SKU);
if (!product) { ctx.badRequest(ERROR_CHECKING_PRODUCT); return; }
const order = await strapi .service(LAAB_CONNECTION_SERVE) .getLastOrderByEmailProductSKU(email, SKU, vertical);
if (!order) { ctx.badRequest(ERROR_CHECKING_ORDER); return; }
const validations = strapi .service(LAAB_CONNECTION_SERVE) .checkValidations(order);
if ( validations?.date?.status === 500 || validations?.contract?.status === 500 || validations?.payment?.status === 500 ) { ctx.body = validations; return; }
const groupId = order.products[0].laabConnection.groupLaabID; const laabproCourseId = order.products[0].laabConnection.courseLaabID;
const price = order.products[0].purchasePrice; const discountPercentage = order.products[0].discount ? order.products[0].discount : 0;
const user = await strapi .service(LAAB_CONNECTION_SERVE) .getUserByEmail(email); if (!user) { ctx.badRequest(ERROR_CHECKING_USER); return; }
const { name, surnames } = strapi .service(LAAB_CONNECTION_SERVE) .separateNameSurnames(user);
const userStatus = await strapi .service(LAAB_CONNECTION_SERVE) .manageAccessLaab2Laabpro( user, name, surnames, groupId, price, discountPercentage, SKU, laabproCourseId, vertical ); ctx.body = userStatus; },};Ejemplo de uso en pruebas
Section titled “Ejemplo de uso en pruebas”A continuación, se muestra un ejemplo de body (payload) que puedes enviar en una solicitud POST para probar el endpoint:
URL del endpoint
Section titled “URL del endpoint”POST http://localhost:1337/api/get-access-linkBody de ejemplo Laab2
Section titled “Body de ejemplo Laab2”{ "email": "example@example.com", "SKU": "1234", "vertical": "Edificio Hospital"}Respuesta
Section titled “Respuesta”{ "status": 200, "access_link": "https://laab2.com/laab2/action/accesoAdministrativoAction.php?action=alumno&id_curso=xxxx&id_usr=xxxxx"}Body de ejemplo LaabPro
Section titled “Body de ejemplo LaabPro”{ "email": "example@example.com", "SKU": "1234", "vertical": "Edificio Hospital"}Respuesta
Section titled “Respuesta”{ "status": 200, "access_link": "https://laabpro.org/login?token=xxxxxxxxxxx"}