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
src/api/laab-connection/controler/laab-connection.ts
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
| 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
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
A continuación, se muestra un ejemplo de body (payload) que puedes enviar en una solicitud POST para probar el endpoint:
URL del endpoint
POST http://localhost:1337/api/get-access-linkBody de ejemplo Laab2
{ "email": "example@example.com", "SKU": "1234", "vertical": "Edificio Hospital"}Respuesta
{ "status": 200, "access_link": "https://laab2.com/laab2/action/accesoAdministrativoAction.php?action=alumno&id_curso=xxxx&id_usr=xxxxx"}Body de ejemplo LaabPro
{ "email": "example@example.com", "SKU": "1234", "vertical": "Edificio Hospital"}Respuesta
{ "status": 200, "access_link": "https://laabpro.org/login?token=xxxxxxxxxxx"}