From 9af89da5902adee62366f0a4a69977d59f7b57bb Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Mon, 12 Jan 2026 21:37:26 +0100 Subject: [PATCH] Fix keyset paginate with dates --- api/src/base.ts | 3 +-- api/src/models/utils/keyset-paginate.ts | 6 +++++- api/src/otel.ts | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/api/src/base.ts b/api/src/base.ts index fcf1499c..c6ce0639 100644 --- a/api/src/base.ts +++ b/api/src/base.ts @@ -44,8 +44,7 @@ export const base = new Elysia({ name: "base" }) if (code === "NOT_FOUND") { return error; } - console.error(code, error); - logger.error("Elysia encountered an error. code={code} error={error.message}", { + logger.error("Request error code={code} error={error}", { code: code, error: error, }); diff --git a/api/src/models/utils/keyset-paginate.ts b/api/src/models/utils/keyset-paginate.ts index fa91b93d..07f32215 100644 --- a/api/src/models/utils/keyset-paginate.ts +++ b/api/src/models/utils/keyset-paginate.ts @@ -1,7 +1,9 @@ +import { Value } from "@sinclair/typebox/value"; import { and, eq, gt, isNull, lt, or, sql } from "drizzle-orm"; +import { t } from "elysia"; import type { Sort } from "./sort"; -type After = (string | number | boolean | undefined)[]; +type After = (string | number | boolean | Date | undefined)[]; // Create a filter (where) expression on the query to skip everything before/after the referenceID. // The generalized expression for this in pseudocode is: @@ -55,6 +57,8 @@ export const keysetPaginate = ({ let previous = undefined; for (const [i, by] of [...sort.sort, pkSort].entries()) { + if (Value.Check(t.String({ format: "date-time" }), cursor[i])) + cursor[i] = new Date(cursor[i]); const cmp = by.desc ? lt : gt; where = or( where, diff --git a/api/src/otel.ts b/api/src/otel.ts index 921eef6a..53b56c15 100644 --- a/api/src/otel.ts +++ b/api/src/otel.ts @@ -1,6 +1,6 @@ import { record as elysiaRecord } from "@elysiajs/opentelemetry"; import { getLogger } from "@logtape/logtape"; -import { metrics as metricapi, trace as traceapi } from "@opentelemetry/api"; +import { metrics as metricapi } from "@opentelemetry/api"; import { logs as logapi } from "@opentelemetry/api-logs"; import { SDK_INFO } from "@opentelemetry/core"; import { OTLPLogExporter as OLTPLogExporterGRPC } from "@opentelemetry/exporter-logs-otlp-grpc";