1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 08:29:36 +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.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<RepositoryError, List<StockMovement>> 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<RepositoryError, List<StockMovement>> 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<RepositoryError, List<StockMovement>> 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()
);
}
}

View file

@ -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()
);
}