Files
mdm-ordinis/ordinis-rest-api/src
Zimin A.N. d908febc91 fix(snapshots): handle Instant return from pgJDBC 42.7+ (was 500)
ClassCastException on every GET /api/v1/dictionaries/{name}/snapshots:
  java.lang.ClassCastException: class java.time.Instant cannot be cast
  to class java.sql.Timestamp

Root cause: pgJDBC 42.7+ возвращает timestamptz из native query как
java.time.Instant, а старый код жёстко кастил в java.sql.Timestamp.
42.6 возвращал Timestamp — отсюда и тесты с Timestamp проходили,
а runtime ломался.

Fix: helper `toBucketOffsetDateTime(Object raw, OffsetDateTime now)`
ловит все 3 возможных типа от драйвера:
  - java.sql.Timestamp (pgJDBC 42.6 и ранее)
  - java.time.Instant (pgJDBC 42.7+ — current behavior)
  - java.time.OffsetDateTime (если jdbc.timestamp.return-type=offset-date-time)

При любом другом типе бросаем IllegalStateException — fail-loud вместо
silent CCE на каждом запросе.

Tests:
  + snapshots_acceptsInstantFromPg42_7Driver — regression на конкретный
    bug (Instant from current driver)
  + snapshots_acceptsOffsetDateTime — defensive coverage
  + snapshots_rejectsUnexpectedTimestampType — fail-loud branch

Existing tests (с Timestamp) сохранены для backward-compat.
2026-05-19 23:01:37 +03:00
..