CalendarEvents.java
package com.tdmconsult.ete.services.yahoo.dto;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import lombok.Data;
import org.jspecify.annotations.Nullable;
@Data
public class CalendarEvents {
@Nullable
private Earnings earnings;
public Optional<LocalDate> getFirstEarningsDate() {
return Optional.ofNullable(earnings)
.map(Earnings::getEarningsDate)
.filter(Predicate.not(List::isEmpty))
.map(List::getFirst)
.map(EarningsDate::getRaw)
.map(epochSeconds -> Instant.ofEpochSecond(epochSeconds)
.atZone(ZoneId.systemDefault())
.toLocalDate());
}
@Data
public static class Earnings {
private List<EarningsDate> earningsDate = new ArrayList<>();
@Nullable
private Boolean isEarningsDateEstimate;
}
@Data
public static class EarningsDate {
private long raw;
@Nullable
private String fmt;
}
// {"calendarEvents":{
// "maxAge":1,
// "earnings":{
// "earningsDate":[{
// "raw":1793304000,
// "fmt":"2026-10-29"}],
// "earningsCallDate":[{
// "raw":1785445200,
// "fmt":"2026-07-30"}],
// "isEarningsDateEstimate":true,
// "earningsAverage":{"raw":0.44394,"fmt":"0.44"},
// "earningsLow":{"raw":-0.81,"fmt":"-0.81"},
// "earningsHigh":{"raw":1.0,"fmt":"1.00"},
// "revenueAverage":{"raw":1187796000,"fmt":"1.19B","longFmt":"1,187,796,000"},
// "revenueLow":{"raw":1187796000,"fmt":"1.19B","longFmt":"1,187,796,000"},
// "revenueHigh":{"raw":1187796000,"fmt":"1.19B","longFmt":"1,187,796,000"}},
// "exDividendDate":{},
// "dividendDate":{}
// }
// }
}