// 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 } export type ErrorOrderDTO = IdOrCorrelationID & { status: "failed" | "dlx", reason: string, error?: string, stackTrace?: string }