Add PreRenderDynamicImagesCron for dynamic image variant caching and idempotency guard for order bookings.

This commit is contained in:
Jeppe Bundgaard
2026-03-18 13:59:48 +01:00
parent 90acf50b55
commit 6b928cfce7
4 changed files with 429 additions and 1 deletions
@@ -561,7 +561,7 @@ class orderBookingRoute
'reg_1' => (string)($data['reg_1'] ?? ''),
'reg_2' => $this->normalizeNullableString($data['reg_2'] ?? null),
'reg_3' => $this->normalizeNullableString($data['reg_3'] ?? null),
'datetime' => (string)($data['datetime'] ?? ''),
'datetime' => $this->normalizeDatetimeForFingerprint((string)($data['datetime'] ?? '')),
'note' => $this->normalizeNullableString($data['note'] ?? null),
'reference' => $this->normalizeNullableString($data['reference'] ?? null),
'po' => $this->normalizeNullableString($data['po'] ?? null),
@@ -619,6 +619,25 @@ class orderBookingRoute
return $normalized;
}
private function normalizeDatetimeForFingerprint(string $datetime): string
{
$value = trim($datetime);
if ($value === '') {
return '';
}
$formats = ['Y-m-d H:i:s', 'Y-m-d H:i', 'Y-m-d'];
foreach ($formats as $format) {
$parsed = \DateTime::createFromFormat($format, $value);
if ($parsed !== false) {
// Use minute precision so rapid retries do not bypass idempotency because of second-level drift.
return $parsed->format('Y-m-d H:i');
}
}
return $value;
}
private function getBookingFromIdempotencyCache(string $fingerprint): ?order_bookings_o
{
try {