Skip to content

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:

  1. Validar que se han recibido email, SKU y vertical.
  2. Obtener el producto asociado al SKU.
  3. Verificar que el usuario ha realizado una compra válida del producto.
  4. Validar condiciones adicionales (fecha, contrato firmado, pago completado).
  5. Buscar al usuario en el sistema.
  6. Procesar el acceso con Laab2 o LaabPro según corresponda.
  7. Devolver el estado del usuario (con URL de acceso o error).

📥 Parámetros del Body

NombreTipoObligatorioDescripción
emailstringCorreo del usuario que ha realizado la compra
SKUstringCódigo único del producto adquirido
verticalstringNombre 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-link

Body 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"
}