From a23c5a8985f5fb1240e5175c36ce5bfe32f08da0 Mon Sep 17 00:00:00 2001 From: Sebastian Frick Date: Wed, 25 Feb 2026 17:32:22 +0100 Subject: [PATCH] =?UTF-8?q?fix(inventory):=20Instant=20durch=20OffsetDateT?= =?UTF-8?q?ime=20f=C3=BCr=20PostgreSQL-Kompatibilit=C3=A4t=20ersetzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PostgreSQL JDBC-Treiber kann java.time.Instant nicht direkt an TIMESTAMP WITH TIME ZONE binden. Schreibparameter werden nun via atOffset(UTC) konvertiert, Lesezugriffe über OffsetDateTime.toInstant(). --- .../repository/JdbcStockMovementRepository.java | 14 ++++++++------ .../repository/JdbcStockRepository.java | 10 ++++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockMovementRepository.java b/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockMovementRepository.java index 672b10c..5a40c04 100644 --- a/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockMovementRepository.java +++ b/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockMovementRepository.java @@ -15,6 +15,8 @@ import org.springframework.stereotype.Repository; import java.sql.ResultSet; import java.sql.SQLException; import java.time.Instant; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; import java.util.List; import java.util.Optional; @@ -117,8 +119,8 @@ public class JdbcStockMovementRepository implements StockMovementRepository { public Result> findAllByPerformedAtBetween(Instant from, Instant to) { try { var result = jdbc.sql("SELECT * FROM stock_movements WHERE performed_at >= :from AND performed_at <= :to ORDER BY performed_at DESC") - .param("from", from) - .param("to", to) + .param("from", from.atOffset(ZoneOffset.UTC)) + .param("to", to.atOffset(ZoneOffset.UTC)) .query(this::mapRow) .list(); return Result.success(result); @@ -132,7 +134,7 @@ public class JdbcStockMovementRepository implements StockMovementRepository { public Result> findAllByPerformedAtAfter(Instant from) { try { var result = jdbc.sql("SELECT * FROM stock_movements WHERE performed_at >= :from ORDER BY performed_at DESC") - .param("from", from) + .param("from", from.atOffset(ZoneOffset.UTC)) .query(this::mapRow) .list(); return Result.success(result); @@ -146,7 +148,7 @@ public class JdbcStockMovementRepository implements StockMovementRepository { public Result> findAllByPerformedAtBefore(Instant to) { try { var result = jdbc.sql("SELECT * FROM stock_movements WHERE performed_at <= :to ORDER BY performed_at DESC") - .param("to", to) + .param("to", to.atOffset(ZoneOffset.UTC)) .query(this::mapRow) .list(); return Result.success(result); @@ -181,7 +183,7 @@ public class JdbcStockMovementRepository implements StockMovementRepository { .param("reason", movement.reason()) .param("referenceDocumentId", movement.referenceDocumentId()) .param("performedBy", movement.performedBy()) - .param("performedAt", movement.performedAt()) + .param("performedAt", movement.performedAt().atOffset(ZoneOffset.UTC)) .update(); return Result.success(null); @@ -207,7 +209,7 @@ public class JdbcStockMovementRepository implements StockMovementRepository { rs.getString("reason"), rs.getString("reference_document_id"), rs.getString("performed_by"), - rs.getObject("performed_at", Instant.class) + rs.getObject("performed_at", OffsetDateTime.class).toInstant() ); } } diff --git a/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockRepository.java b/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockRepository.java index 235564a..ab3af78 100644 --- a/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockRepository.java +++ b/backend/src/main/java/de/effigenix/infrastructure/inventory/persistence/repository/JdbcStockRepository.java @@ -16,6 +16,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.time.Instant; import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -245,7 +247,7 @@ public class JdbcStockRepository implements StockRepository { .param("quantityUnit", batch.quantity().uom().name()) .param("expiryDate", batch.expiryDate()) .param("status", batch.status().name()) - .param("receivedAt", batch.receivedAt()) + .param("receivedAt", batch.receivedAt().atOffset(ZoneOffset.UTC)) .update(); } @@ -262,7 +264,7 @@ public class JdbcStockRepository implements StockRepository { .param("quantityAmount", reservation.quantity().amount()) .param("quantityUnit", reservation.quantity().uom().name()) .param("priority", reservation.priority().name()) - .param("reservedAt", reservation.reservedAt()) + .param("reservedAt", reservation.reservedAt().atOffset(ZoneOffset.UTC)) .update(); for (StockBatchAllocation allocation : reservation.allocations()) { @@ -372,7 +374,7 @@ public class JdbcStockRepository implements StockRepository { ), rs.getObject("expiry_date", LocalDate.class), StockBatchStatus.valueOf(rs.getString("status")), - rs.getObject("received_at", Instant.class) + rs.getObject("received_at", OffsetDateTime.class).toInstant() ); } @@ -386,7 +388,7 @@ public class JdbcStockRepository implements StockRepository { UnitOfMeasure.valueOf(rs.getString("quantity_unit")) ), ReservationPriority.valueOf(rs.getString("priority")), - rs.getObject("reserved_at", Instant.class) + rs.getObject("reserved_at", OffsetDateTime.class).toInstant() ); }