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:
- 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();- Procesar y organizar estos detalles en formato Markdown.
- 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:
- 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) } }- 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:
- 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 `';