// Package domain defines all the domain models package domain import "time" // ListTrade es la representacion exportada de un trade de List Trading. type ListTrade struct { QuoteRequest FixMessageJSON `json:"quote_request"` } // FixMessageJSON es la representacion estructurada de un mensaje FIX para almacenamiento. type FixMessageJSON struct { Direction string `json:"direction"` MsgType string `json:"msg_type"` QuoteReqID string `json:"quote_req_id"` Header map[string]any `json:"header"` Body map[string]any `json:"body"` Trailer map[string]any `json:"trailer"` ReceiveTime time.Time `json:"receive_time"` } // Message es una fila de qfixdpl_messages, con la metadata del header FIX hoisted // para que los consumidores puedan ordenar/filtrar sin parsear el JSON. type Message struct { ID string `json:"id"` SenderCompID string `json:"sender_comp_id"` MsgSeqNum int `json:"msg_seq_num"` SendingTime time.Time `json:"sending_time"` CreatedAt time.Time `json:"created_at"` JMessage FixMessageJSON `json:"j_message"` } // LogEntry es el DTO para insertar/actualizar un log crudo en qfixdpl_logs. type LogEntry struct { QuoteReqID string RawMsg string } // Logs es la respuesta del endpoint GET /trades/:quoteReqID/logs. type Logs struct { Entries []string `json:"entries"` } // PersistenceStore define la interfaz de persistencia. type PersistenceStore interface { SaveMessage(msg Message) error SaveLog(entry LogEntry) error GetTodayMessages() ([]Message, error) GetLogsByQuoteReqID(quoteReqID string) (Logs, error) }