Small cleanup
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import type { Static } from "@sinclair/typebox";
|
||||
import { t } from "elysia";
|
||||
import { sql, type Selectable, type Transaction } from "kysely";
|
||||
import type { DB } from "../database/out/db";
|
||||
import type { DB, JsonValue } from "../database/out/db";
|
||||
import { db } from "../database/db";
|
||||
import { log } from "../util";
|
||||
import { minToMs } from "@blade-and-brawn/domain";
|
||||
@@ -21,9 +21,25 @@ export class EventsService {
|
||||
static readonly CONCURRENCY_TIMEOUT_MS = minToMs(10);
|
||||
|
||||
private _lastCleanDate: Date = new Date(0);
|
||||
|
||||
get lastCleanDate() { return this._lastCleanDate; };
|
||||
|
||||
private static serializeError(err: unknown): JsonValue {
|
||||
if (err instanceof Error) {
|
||||
const payload = "payload" in err ? { payload: err.payload as JsonValue } : {};
|
||||
return { name: err.name, message: err.message, ...payload };
|
||||
}
|
||||
return String(err);
|
||||
}
|
||||
|
||||
static status(event: Pick<Selectable<DB["events"]>, "available_at" | "started_at" | "ended_at" | "has_failed">): EventStatus {
|
||||
if (!event.started_at) {
|
||||
if (Date.now() < event.available_at.getTime()) return "waiting";
|
||||
return "available";
|
||||
};
|
||||
if (!event.ended_at) return "processing";
|
||||
return event.has_failed ? "failed" : "fulfilled";
|
||||
}
|
||||
|
||||
async get(id: string, trx?: Transaction<DB>) {
|
||||
return await (trx ?? db).selectFrom("events")
|
||||
.selectAll()
|
||||
@@ -73,13 +89,18 @@ export class EventsService {
|
||||
.execute();
|
||||
}
|
||||
|
||||
static status(event: Pick<Selectable<DB["events"]>, "available_at" | "started_at" | "ended_at" | "has_failed">): EventStatus {
|
||||
if (!event.started_at) {
|
||||
if (Date.now() < event.available_at.getTime()) return "waiting";
|
||||
return "available";
|
||||
};
|
||||
if (!event.ended_at) return "processing";
|
||||
return event.has_failed ? "failed" : "fulfilled";
|
||||
async setState(id: string, state: JsonValue) {
|
||||
await db.updateTable("events")
|
||||
.set({ state })
|
||||
.where("id", "=", id)
|
||||
.execute();
|
||||
}
|
||||
|
||||
async setLastError(id: string, err: unknown) {
|
||||
await db.updateTable("events")
|
||||
.set({ last_error: EventsService.serializeError(err) })
|
||||
.where("id", "=", id)
|
||||
.execute();
|
||||
}
|
||||
|
||||
async fail(id: string, trx?: Transaction<DB>): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user