import { string } from 'alga-js' import refreshTokenHelper from "../../utils/refreshTokenHelper" import forceLogoutHelper from "../../utils/forceLogoutHelper" import errorHandlingHelper from "../../utils/errorHandlingHelper" import getTokenHelper from "../../utils/getTokenHelper" import fetchHelper from "../../utils/fetchHelper" const handleFunc = async (event: any, authToken: any = null) => { let data: any = {} const token = authToken ?? await getTokenHelper(event) const body = await readBody(event) const searchTerm = body?.search || '' if (!searchTerm) { throw createError({ statusCode: 400, statusMessage: 'Search term is required' }) } // Build filter to search by Value, SKU, UPC, Name (contains), or MPN // Use 'contains' for Name search and 'eq' for exact matches on codes const escapedTerm = searchTerm.replace(/'/g, "''") const filter = string.urlEncode( `(Value eq '${escapedTerm}' OR SKU eq '${escapedTerm}' OR UPC eq '${escapedTerm}' OR MPN eq '${escapedTerm}' OR contains(Name, '${escapedTerm}')) AND (isActive eq true)` ) const res: any = await fetchHelper( event, `models/m_product?$filter=${filter}&$top=50&$expand=labelprinter`, 'GET', token, null ) if (res?.records && res.records.length > 0) { // Map products with necessary fields for label printing data.records = res.records.map((product: any) => ({ id: product.id, Name: product.Name, Value: product.Value, SKU: product.SKU, UPC: product.UPC, MPN: product.MPN, ASIN: product.ASIN, labelPrinterId: product.labelprinter?.id || null, labelPrinter: product.labelprinter?.identifier || null, organizationId: product.AD_Org_ID?.id || product.AD_Org_ID, organization: product.AD_Org_ID?.identifier || product.AD_Org_ID?.Name })) } else { data.records = [] } return data } export default defineEventHandler(async (event) => { let data: any = {} try { data = await handleFunc(event) } catch(err: any) { try { let authToken: any = await refreshTokenHelper(event) data = await handleFunc(event, authToken) } catch(error: any) { data = errorHandlingHelper(err?.data ?? err, error?.data ?? error) forceLogoutHelper(event, data) throw createError({ statusCode: err?.statusCode || 500, statusMessage: err?.statusMessage || 'Error searching products', data: data }) } } return data })