package com.example.trading.gateway.order; import com.example.trading.contracts.v1.Side; import com.example.trading.contracts.v1.SubmitOrderRequest; import org.springframework.stereotype.Component; @Component public class FixToProtobufMapper { public SubmitOrderRequest map(IncomingOrder order) { return SubmitOrderRequest.newBuilder() .setClientOrderId(order.clientOrderId()) .setSenderCompId(order.senderCompId()) .setTargetCompId(order.targetCompId()) .setSymbol(order.symbol()) .setSide(switch (order.side()) { case BUY -> Side.SIDE_BUY; case SELL -> Side.SIDE_SELL; }) .setQuantity(Long.toString(order.quantity())) .setLimitPrice(order.price().toPlainString()) // QuickFIX/J represents FIX UTC timestamps as LocalDateTime. // Use the original timestamp, never the clock or the JVM's default zone. // Production exchange calendars may use a different trading date. .setTradingDate(order.transactTime().toLocalDate().toString()) .build(); } }