import refreshTokenHelper from '../../utils/refreshTokenHelper' import fetchHelper from '../../utils/fetchHelper' const SECOND_SWEEP_DELAY_MS = 3000 const fetchSessionUuids = async (event: any, token: string, sessionUID: string): Promise => { const filter = encodeURIComponent(`SessionUID eq '${sessionUID.replace(/'/g, "''")}'`) const list: any = await fetchHelper( event, `models/cust_commissionactivity?$filter=${filter}&$top=500`, 'GET', token, null, ) const records = Array.isArray(list?.records) ? list.records : [] const uuids = records .map((r: any) => String(r?.uid ?? r?.['CUST_CommissionActivity_UU'] ?? '').trim()) .filter((u: string) => u.length > 0) console.log('[commission-activity] sweep found', uuids.length, 'rows for SessionUID', sessionUID, 'sample keys:', Object.keys(records?.[0] ?? {}).slice(0, 12)) return uuids } const deleteUuids = async (event: any, token: string, uuids: string[]) => { if (!uuids.length) return const results = await Promise.allSettled( uuids.map((uuid) => fetchHelper(event, `models/cust_commissionactivity/${uuid}`, 'DELETE', token, null), ), ) const firstFail = results.find((r) => r.status === 'rejected') as PromiseRejectedResult | undefined const firstOk = results.find((r) => r.status === 'fulfilled') as PromiseFulfilledResult | undefined console.log('[commission-activity] DELETE batch size', uuids.length, 'ok:', results.filter(r => r.status === 'fulfilled').length, 'failed:', results.filter(r => r.status === 'rejected').length, 'first response:', firstOk ? JSON.stringify(firstOk.value).slice(0, 300) : '(none)') if (firstFail) { const reason: any = firstFail.reason console.error('[commission-activity] DELETE rejected:', { statusCode: reason?.statusCode ?? reason?.response?.status, message: reason?.message, data: reason?.data, }) } } const sweep = async (event: any, token: string, sessionUID: string) => { const uuids = await fetchSessionUuids(event, token, sessionUID) await deleteUuids(event, token, uuids) } const discardSession = async (event: any, sessionUID: string) => { let token: string | null = null try { token = await getTokenHelper(event) } catch { return } if (!token) return try { await sweep(event, token, sessionUID) } catch (e: any) { console.error('[commission-activity] delete sweep failed:', { sessionUID, statusCode: e?.statusCode ?? e?.response?.status, message: e?.message, data: e?.data, }) try { const fresh: any = await refreshTokenHelper(event) if (!fresh) return token = fresh await sweep(event, token as string, sessionUID) } catch (retryErr: any) { console.error('[commission-activity] delete sweep failed after token refresh:', { sessionUID, message: retryErr?.message, }) return } } const finalToken = token setTimeout(() => { if (!finalToken) return sweep(event, finalToken as string, sessionUID).catch(() => {}) }, SECOND_SWEEP_DELAY_MS) } export default defineEventHandler(async (event) => { let body: any = null try { body = await readBody(event) } catch { body = null } const sessionUID = String(body?.sessionUID ?? '').trim() if (sessionUID) { discardSession(event, sessionUID).catch(() => {}) } setResponseStatus(event, 204) return null })