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
) { }
}