import { string } from 'alga-js' import refreshTokenHelper from "../../../utils/refreshTokenHelper" import forceLogoutHelper from "../../../utils/forceLogoutHelper" import errorHandlingHelper from "../../../utils/errorHandlingHelper" import fetchHelper from "../../../utils/fetchHelper" const handleFunc = async (event: any, authToken: any = null) => { let data: any = { records: [] } const token = authToken ?? await getTokenHelper(event) const query = getQuery(event) const searchTerm = query.search || query.q || '' const limit = parseInt(query.limit as string) || 20 if (!searchTerm || (searchTerm as string).length < 2) { return data } // Escape single quotes in search term const escapedSearchTerm = (searchTerm as string).replace(/'/g, "''") // Search by Value, Name, SKU, MPN (mpn), or UPC const searchFilter = `(contains(Value,'${escapedSearchTerm}') OR contains(Name,'${escapedSearchTerm}') OR contains(SKU,'${escapedSearchTerm}') OR contains(mpn,'${escapedSearchTerm}') OR contains(UPC,'${escapedSearchTerm}'))` const res: any = await fetchHelper( event, `models/m_product?$filter=${string.urlEncode(searchFilter)}&$select=m_product_id,Value,Name,SKU,mpn,UPC&$top=${limit}&$orderby=${string.urlEncode('Name asc')}`, 'GET', token, null ) if (res?.records) { // Map m_product_id to id for consistency data.records = res.records.map((r: any) => ({ id: r.m_product_id || r.M_Product_ID || r.id, Value: r.Value, Name: r.Name, SKU: r.SKU, MPN: r.mpn, UPC: r.UPC })) } 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) } } return data })