Загрузка данных


import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/*
Есть сервис, его endpoint-ы:
GET /contracts/live-ids возвращает список идентификаторов "живых" контрактов, например
    [1,2,3,...,5000]
GET /contracts/{id}     возвращает данные по конкретному контракту, например
  {
    "id": 1,
    "underlyings": [
      "Лукойл",
      "Сбер",
      "Яндекс"
    ],
    "description": "Много текста",
    "payments": [
      {
        "date": "2021-03-12",
        "value": 97.83,
        "status": "Выплачен"
      },
      ...
    ]
  }
Значения в payments могут меняться несколько (0 - 20) раз в день.
Контракты могут перестать быть "живыми" 1 раз в день.
Нужно спроектировать интеграцию по передаче данных всех живых контрактов с другим сервисом (BE публичного сайта) через kafka.
Ограничение на размер сообщения в этой kafka 1 Мб
Средний размер ответа /contracts/{id}: 10 Кб
*/
public class IntegrationService {

    private HttpClient httpClient;
    private KafkaProducer kafkaProducer;
    private ObjectMapper objectMapper;

    public void publishContracts() {
        // TODO: implement it
    }

    interface HttpClient {
        List<Long> getLiveContractIds();
        String getContract(Long id);
    }

    interface KafkaProducer {
        void send(String message);
    }

    interface ObjectMapper {
        String writeValueAsString(Object value);
        <T> T readValue(String value, Class<T> valueType);
    }

    public record Contract(
            Long id,
            List<String> underlyings,
            String description,
            List<Payment> payments
    ) { }

    public record Payment(
            LocalDate date,
            BigDecimal value,
            String status
    ) { }
}