import { createOperacion } from '../../utils/queries' /** * POST /api/operaciones * Crea una nueva operación con sus lotes de entrada y salida * * Body: * { * tipo: string, // ingreso, despulpado, oreado, etc. * fecha?: string, // ISO date (opcional, default: ahora) * lugar_id?: number, * meta?: object, * inputs: [ // Lotes de entrada * { lote_id: string, cantidad_kg?: number } * ], * outputs: [ // Lotes de salida (se crearán) * { codigo?: string, tipo: string, cantidad_kg?: number, meta?: object } * ] * } */ export default defineEventHandler(async (event) => { try { const body = await readBody(event) // Validaciones básicas if (!body.tipo) { throw createError({ statusCode: 400, statusMessage: 'El campo "tipo" es requerido', }) } if (!body.inputs || !Array.isArray(body.inputs)) { throw createError({ statusCode: 400, statusMessage: 'El campo "inputs" es requerido y debe ser un array', }) } if (!body.outputs || !Array.isArray(body.outputs)) { throw createError({ statusCode: 400, statusMessage: 'El campo "outputs" es requerido y debe ser un array', }) } // Validar que cada input tenga lote_id for (const input of body.inputs) { if (!input.lote_id) { throw createError({ statusCode: 400, statusMessage: 'Cada input debe tener un "lote_id"', }) } } // Validar que cada output tenga tipo for (const output of body.outputs) { if (!output.tipo) { throw createError({ statusCode: 400, statusMessage: 'Cada output debe tener un "tipo"', }) } } const result = await createOperacion({ tipo: body.tipo, fecha: body.fecha ? new Date(body.fecha) : undefined, lugar_id: body.lugar_id, meta: body.meta, inputs: body.inputs, outputs: body.outputs, }) return { success: true, data: { operacion: result.operacion, lotes_creados: result.lotes_creados, }, } } catch (error: any) { console.error('Error creando operación:', error) if (error.statusCode) { throw error } throw createError({ statusCode: 500, statusMessage: 'Error creando operación', data: { message: error.message }, }) } })