diff --git a/server/db.ts b/server/db.ts index d96a4049d..b39e999f7 100644 --- a/server/db.ts +++ b/server/db.ts @@ -6,6 +6,7 @@ const __dirname = new URL('.', import.meta.url).pathname; export type SQLQuery = sqlite.ISqlite.SqlType; export interface Database { get(sql: SQLQuery, ...args: unknown[]): Promise; + each(sql: SQLQuery, callback: (err: unknown, row: T) => void): Promise; all(sql: SQLQuery, ...args: unknown[]): Promise; close(): Promise; } diff --git a/server/index.ts b/server/index.ts index 7df24aa1d..6e8a6e9f3 100644 --- a/server/index.ts +++ b/server/index.ts @@ -108,6 +108,11 @@ export class LazyDatabase implements Database { return Sentry.startSpan(this.buildSpanOptions(sql), () => this.db!.get(sql, ...args)); } + async each(sql: SQLQuery, callback: (err: unknown, row: T) => void): Promise { + await this.init(); + return Sentry.startSpan(this.buildSpanOptions(sql), () => this.db!.each(sql, callback)); + } + async all(sql: SQLQuery, ...args: unknown[]): Promise { await this.init(); return Sentry.startSpan(this.buildSpanOptions(sql), () => this.db!.all(sql, ...args)); diff --git a/server/routes/admin.js b/server/routes/admin.js index d0e7a46e2..20ff09cd2 100644 --- a/server/routes/admin.js +++ b/server/routes/admin.js @@ -224,10 +224,10 @@ router.get('/admin/stats/users-chart/:locale', handleErrorAsync(async (req, res) .padStart(2, '0')}`; const stats = {}; - for (const { id, users } of await req.db.all(SQL`SELECT id, users FROM stats WHERE locale = ${req.params.locale} ORDER BY id ASC`)) { + await req.db.each(SQL`SELECT id, users FROM stats WHERE locale = ${req.params.locale} ORDER BY id ASC`, (_err, { id, users }) => { const date = formatDate(new Date(decodeTime(id))); stats[date] = users; // overwrite with the latest one for the day - } + }); const incrementsChart = {}; let prevUsers = null;