// Reemplaza al enum OrderStatus export type OrderStatus = | 'pending' | 'running' | 'finished' | 'failed' | 'dlx'; // Reemplaza al enum OrderTypes export type OrderType = | 'activate' | 'preactivate' | 'cancel' | 'pause' | 'reactivate' | 'unknown'; export const OrderTypeOptions = new Set([ 'activate', 'preactivate', 'cancel', 'pause', 'reactivate', 'unknown' ]) // Interfaz para la tabla order_tracking export interface OrderTracking { id: number; correlation_id: string; exchange?: string | null; routing_key?: string | null; order_type: OrderType; payload?: Record | null; // Por no especificar el tipo del json hasta que no se cree status: OrderStatus; retry_count: number; error_message?: string | null; error_stacktrace?: string | null; /* TODO: Importante decidir si trabajar con fecha y tener que crear los objetos o seguir como string */ start_date: string | Date; update_date: string | Date; finish_date?: string | Date | null; // desde la 1.1.0 webhook_host?: string | null; webhook_endpoint?: string | null; } // Interfaz para la tabla order_history export interface OrderHistory { id: number; order_id: number; previous_status: OrderStatus; new_status: OrderStatus; change_reason?: string | null; change_date: Date; } // Tipo útil para la creación (Omitiendo campos generados por la DB) export type CreateOrderDTO = Pick< OrderTracking, // Aqui realmente no importan los campos 'correlation_id' | 'exchange' | 'routing_key' | 'order_type' | 'payload' | 'webhook_host' | 'webhook_endpoint' >; type IdOrCorrelationID = ( { id: number, correlation_id?: never } | { id?: never, correlation_id: string } ) export type UpdateOrderDTO = IdOrCorrelationID & { new_status: OrderStatus, reason?: string } export type FinishOrderDTO = IdOrCorrelationID & { reason?: string, end_date?: Date } export type ErrorOrderDTO = IdOrCorrelationID & { status: "failed" | "dlx", reason: string, error?: string, stackTrace?: string } /* * Se considera cada entrada de conditions como un filtro sobre un campo * cada fila se podrá expresar como campo:filtro * ```json * { * "value": "-gte 200" // Un valor >= 200 * "text": "-eq 'busqueda' " // El campo tiene que ser exactamente 'busqueada' * } * ``` * TODO: sacar opciones de paginación * */ export type OrderQuery = { conditions: Record, limit?: number | undefined, offset?: number | undefined, }