TransactionHistoryFilter.java
package com.github.jenkaby.bikerental.finance.domain.model;
import org.jspecify.annotations.Nullable;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public record TransactionHistoryFilter(
@Nullable LocalDate fromDate,
@Nullable LocalDate toDate,
@Nullable String sourceId,
@Nullable TransactionSourceType sourceType
) {
private static final TransactionHistoryFilter EMPTY = new TransactionHistoryFilter(null, null, null, null);
public static TransactionHistoryFilter empty() {
return EMPTY;
}
public Map<String, String> toMap() {
var result = new HashMap<String, String>();
result.put("fromDate", Optional.ofNullable(fromDate).map(this::toInstant).map(TransactionHistoryFilter::toString).orElse(null));
result.put("toDate", Optional.ofNullable(toDate).map(this::nextDay).map(this::toInstant).map(TransactionHistoryFilter::toString).orElse(null));
result.put("sourceId", sourceId);
result.put("sourceType", sourceType != null ? sourceType.name() : null);
return result;
}
private LocalDate nextDay(LocalDate date) {
return date.plusDays(1);
}
//
private Instant toInstant(LocalDate date) {
return date.atStartOfDay().toInstant(ZoneOffset.UTC);
}
private static String toString(Instant date) {
return DateTimeFormatter.ISO_INSTANT.format(date);
}
}