import { createHandler } from './_shared/middleware' import { update as adminUpdate, list as adminList } from './admin-data' function adminDataList(ctx: any, entity: string, filters: Record) { return adminList({ ...ctx, query: { ...(ctx.query || {}), entity, ...filters } } as any, {}) } function adminDataUpdate(ctx: any, entity: string, id: string, fields: Record) { return adminUpdate({ ...ctx, query: { ...(ctx.query || {}), entity, id } } as any, fields) } export const handler = createHandler(async (ctx, body) => { const { item_id, action } = (body || {}) as { item_id?: string; action?: 'request' | 'approve' | 'reject' } if (!item_id) { const e: any = new Error('item_id is required') e.statusCode = 400 throw e } if (!action || !['request', 'approve', 'reject'].includes(action)) { const e: any = new Error("action must be 'request', 'approve', or 'reject'") e.statusCode = 400 throw e } const itemResult = await adminDataList(ctx, 'items', { id: item_id, limit: '1' }) const item = Array.isArray(itemResult) ? itemResult[0] : (itemResult as any)?.data?.[0] if (!item) { const e: any = new Error('Work item not found') e.statusCode = 404 throw e } const principalId = ctx.principal?.id const currentData = item.data || {} const now = new Date().toISOString() let approvalStatus = currentData.production_approval_status || 'pending' let approverId = currentData.approver_id || null let approvedAt = currentData.approved_at || null if (action === 'request') { approvalStatus = 'requested' } else if (action === 'approve') { approvalStatus = 'approved' approverId = principalId approvedAt = now } else if (action === 'reject') { approvalStatus = 'rejected' approverId = principalId approvedAt = now } const updated = await adminDataUpdate(ctx, 'items', item_id, { data: { ...currentData, production_approval_status: approvalStatus, approver_id: approverId, approved_at: approvedAt, }, }) return { ok: true, action, approval_status: approvalStatus, item: updated } })