1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 10:19:35 +01:00

fix(inventory): Instant durch OffsetDateTime für PostgreSQL-Kompatibilität ersetzen

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().
This commit is contained in:
Sebastian Frick 2026-02-25 17:32:22 +01:00
parent d4ac8cb1b9
commit a23c5a8985
2 changed files with 14 additions and 10 deletions

View file

@ -15,6 +15,8 @@ import org.springframework.stereotype.Repository;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.time.Instant; import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -117,8 +119,8 @@ public class JdbcStockMovementRepository implements StockMovementRepository {
public Result<RepositoryError, List<StockMovement>> findAllByPerformedAtBetween(Instant from, Instant to) { public Result<RepositoryError, List<StockMovement>> findAllByPerformedAtBetween(Instant from, Instant to) {
try { try {
var result = jdbc.sql("SELECT * FROM stock_movements WHERE performed_at >= :from AND performed_at <= :to ORDER BY performed_at DESC") 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("from", from.atOffset(ZoneOffset.UTC))
.param("to", to) .param("to", to.atOffset(ZoneOffset.UTC))
.query(this::mapRow) .query(this::mapRow)
.list(); .list();
return Result.success(result); return Result.success(result);
@ -132,7 +134,7 @@ public class JdbcStockMovementRepository implements StockMovementRepository {
public Result<RepositoryError, List<StockMovement>> findAllByPerformedAtAfter(Instant from) { public Result<RepositoryError, List<StockMovement>> findAllByPerformedAtAfter(Instant from) {
try { try {
var result = jdbc.sql("SELECT * FROM stock_movements WHERE performed_at >= :from ORDER BY performed_at DESC") 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) .query(this::mapRow)
.list(); .list();
return Result.success(result); return Result.success(result);
@ -146,7 +148,7 @@ public class JdbcStockMovementRepository implements StockMovementRepository {
public Result<RepositoryError, List<StockMovement>> findAllByPerformedAtBefore(Instant to) { public Result<RepositoryError, List<StockMovement>> findAllByPerformedAtBefore(Instant to) {
try { try {
var result = jdbc.sql("SELECT * FROM stock_movements WHERE performed_at <= :to ORDER BY performed_at DESC") 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) .query(this::mapRow)
.list(); .list();
return Result.success(result); return Result.success(result);
@ -181,7 +183,7 @@ public class JdbcStockMovementRepository implements StockMovementRepository {
.param("reason", movement.reason()) .param("reason", movement.reason())
.param("referenceDocumentId", movement.referenceDocumentId()) .param("referenceDocumentId", movement.referenceDocumentId())
.param("performedBy", movement.performedBy()) .param("performedBy", movement.performedBy())
.param("performedAt", movement.performedAt()) .param("performedAt", movement.performedAt().atOffset(ZoneOffset.UTC))
.update(); .update();
return Result.success(null); return Result.success(null);
@ -207,7 +209,7 @@ public class JdbcStockMovementRepository implements StockMovementRepository {
rs.getString("reason"), rs.getString("reason"),
rs.getString("reference_document_id"), rs.getString("reference_document_id"),
rs.getString("performed_by"), rs.getString("performed_by"),
rs.getObject("performed_at", Instant.class) rs.getObject("performed_at", OffsetDateTime.class).toInstant()
); );
} }
} }

View file

@ -16,6 +16,8 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -245,7 +247,7 @@ public class JdbcStockRepository implements StockRepository {
.param("quantityUnit", batch.quantity().uom().name()) .param("quantityUnit", batch.quantity().uom().name())
.param("expiryDate", batch.expiryDate()) .param("expiryDate", batch.expiryDate())
.param("status", batch.status().name()) .param("status", batch.status().name())
.param("receivedAt", batch.receivedAt()) .param("receivedAt", batch.receivedAt().atOffset(ZoneOffset.UTC))
.update(); .update();
} }
@ -262,7 +264,7 @@ public class JdbcStockRepository implements StockRepository {
.param("quantityAmount", reservation.quantity().amount()) .param("quantityAmount", reservation.quantity().amount())
.param("quantityUnit", reservation.quantity().uom().name()) .param("quantityUnit", reservation.quantity().uom().name())
.param("priority", reservation.priority().name()) .param("priority", reservation.priority().name())
.param("reservedAt", reservation.reservedAt()) .param("reservedAt", reservation.reservedAt().atOffset(ZoneOffset.UTC))
.update(); .update();
for (StockBatchAllocation allocation : reservation.allocations()) { for (StockBatchAllocation allocation : reservation.allocations()) {
@ -372,7 +374,7 @@ public class JdbcStockRepository implements StockRepository {
), ),
rs.getObject("expiry_date", LocalDate.class), rs.getObject("expiry_date", LocalDate.class),
StockBatchStatus.valueOf(rs.getString("status")), 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")) UnitOfMeasure.valueOf(rs.getString("quantity_unit"))
), ),
ReservationPriority.valueOf(rs.getString("priority")), ReservationPriority.valueOf(rs.getString("priority")),
rs.getObject("reserved_at", Instant.class) rs.getObject("reserved_at", OffsetDateTime.class).toInstant()
); );
} }