diff --git a/ordinis-domain/src/main/java/cloud/nstart/terravault/ordinis/domain/audit/AuditLogRepository.java b/ordinis-domain/src/main/java/cloud/nstart/terravault/ordinis/domain/audit/AuditLogRepository.java index 55280f7..deec49b 100644 --- a/ordinis-domain/src/main/java/cloud/nstart/terravault/ordinis/domain/audit/AuditLogRepository.java +++ b/ordinis-domain/src/main/java/cloud/nstart/terravault/ordinis/domain/audit/AuditLogRepository.java @@ -23,6 +23,10 @@ public interface AuditLogRepository extends JpaRepository { /** * Гибкий запрос для admin UI: фильтры nullable, NULL = «не фильтруем». * Сортировка задаётся {@link Pageable}. + * + *

Для {@code from}/{@code to} (OffsetDateTime) NULL не передаём — PostgreSQL не + * может вывести тип параметра из {@code IS NULL} проверки. Вместо этого + * controller подставляет {@link OffsetDateTime#MIN} / {@link OffsetDateTime#MAX}. */ @Query(""" SELECT a FROM AuditLog a @@ -30,8 +34,8 @@ public interface AuditLogRepository extends JpaRepository { AND (:userId IS NULL OR a.userId = :userId) AND (:action IS NULL OR a.action = :action) AND (:businessKey IS NULL OR a.businessKey = :businessKey) - AND (:from IS NULL OR a.eventTime >= :from) - AND (:to IS NULL OR a.eventTime <= :to) + AND a.eventTime >= :from + AND a.eventTime <= :to """) Page search( @Param("dictionaryName") String dictionaryName, diff --git a/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/AuditAdminController.java b/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/AuditAdminController.java index e983ea9..18eabe5 100644 --- a/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/AuditAdminController.java +++ b/ordinis-rest-api/src/main/java/cloud/nstart/terravault/ordinis/restapi/web/AuditAdminController.java @@ -52,8 +52,8 @@ public class AuditAdminController { nullIfBlank(userId), nullIfBlank(action), nullIfBlank(businessKey), - from, - to, + from == null ? OffsetDateTime.parse("0001-01-01T00:00:00Z") : from, + to == null ? OffsetDateTime.parse("9999-12-31T23:59:59Z") : to, PageRequest.of(page, Math.min(size, 200), Sort.by(Sort.Direction.DESC, "eventTime"))); return result.map(AuditEntry::from); } @@ -71,8 +71,8 @@ public class AuditAdminController { nullIfBlank(userId), nullIfBlank(action), nullIfBlank(businessKey), - from, - to, + from == null ? OffsetDateTime.parse("0001-01-01T00:00:00Z") : from, + to == null ? OffsetDateTime.parse("9999-12-31T23:59:59Z") : to, PageRequest.of(0, MAX_EXPORT_ROWS, Sort.by(Sort.Direction.DESC, "eventTime"))); StringBuilder csv = new StringBuilder(