Skip to content

Get Laabpro Info

El objetivo central de este sistema es llenar el campo subject_text de los productos cuando obtain_laabpro_info es verdadero.

El proceso implica:

  1. Consultar una URL externa para obtener los detalles.
const fetchURL= process.env.LAABPRO_API_CONTENTS
const response = await fetch(fetchURL+id, {
method: 'GET',
})
if(!response.ok) {
const errorData = await response.json()
console.error('Error details:', errorData)
throw new Error( NETWORK_ERROR )
}
const jsonResponse = await response.json();
  1. Procesar y organizar estos detalles en formato Markdown.
  2. Almacenar el resultado en el campo subject_text del registro del producto si el producto no está publicado.
const collection = 'api::product.product'
const where = {documentId: documentID}
const populate = {}
const select = [
"publishedAt"
]
const product = await findOne(collection, select, where, populate)
if(product.publishedAt == null) {
const data = {subject_text: result}
await update(collection, where, data)
}

Fichero Lifecycles.ts

Este fichero define funciones de ciclo de vida para manejar eventos después de actualizar y crear registros en Strapi V5. Contiene dos funciones principales:

  1. afterUpdate: Se ejecuta después de actualizar un registro. Verifica si obtain_laabpro_info es true y, si lo es, realiza las siguientes acciones.
    • Llama al servicio de product para obtener más información usando getApiInfo.
    • Actualiza el campo obtain_laabpro_info a false en la base de datos.
afterUpdate: async(ctx) => {
const documentID = ctx.result.documentId
const obtainLaabpro = ctx.result.obtain_laabpro_info
const id_course_laabpro = ctx.result.id_course_laabpro
const title = ''+ctx.result.title
if(obtainLaabpro === true){
await strapi.service('api::product.product').getApiInfo(id_course_laabpro, title, documentID)
const collection = 'api::product.product'
const where = {documentId: documentID}
const data = {obtain_laabpro_info: false}
await update(collection, where, data)
}
}
  1. afterCreate: Es similar a afterUpdate, pero se ejecuta después de crear un nuevo registro.

Fichero product.ts (Service)

Este fichero define el servicio de product para Strapi V5. Contiene una función principal:

  1. getApiInfo: Realiza una solicitud GET a una API externa (LAABPRO_API_CONTENTS) con el ID del curso como parámetro.
const fetchURL= process.env.LAABPRO_API_CONTENTS
const response = await fetch(fetchURL+id, {
method: 'GET',
})

Si la respuesta es exitosa:

  • Procesa los datos recibidos usando la función organizeData.
  • Verifica si el producto no está publicado (publshedAt es null).
  • Si no está publicado, actualiza el campo subject_text con los datos organizados.
if(product.publishedAt == null) {
const data = {subject_text: result}
await update(collection, where, data)
}

La función organizeData procesa la respuesta de la API y formatea los datos en un formato Markdown para almacenar en la base de datos.

const sections = entries.body.sections
var names = []
var content = []
var name, resultName, resultContent, result = ''
sections.forEach(element => {
name = element.name
content.push(element.contents)
names.push(name)
});
var cont = 1
names.forEach(el => {
resultName = ' #### '+cont+'. '+el+'\n'
resultContent = ''
content[cont-1].forEach(element => {
var content = '- '+element.name+' \n'
resultContent += content
});
result = result + resultName
result = result + resultContent
cont++
resultName = ''
});
result = '` \n'+result+'\n `';