feat: support sending "new title" alerts to devices

This commit is contained in:
2024-09-02 13:02:05 -04:00
parent ae99918524
commit 4fe22bccf3
16 changed files with 381 additions and 5 deletions

31
src/models/kv.ts Normal file
View File

@@ -0,0 +1,31 @@
import { eq } from "drizzle-orm";
import type { Env } from "~/types/env";
import { getDb } from "./db";
import { keyValueTable } from "./schema";
export type Key = (typeof keyValueTable.key.enumValues)[number];
export function getValue(env: Env, key: Key): Promise<string | undefined> {
return getDb(env)
.select()
.from(keyValueTable)
.where(eq(keyValueTable.key, key))
.then((results) => results[0]?.value);
}
export function setValue(env: Env, key: Key, value: string) {
return getDb(env)
.insert(keyValueTable)
.values({ key, value })
.onConflictDoUpdate({ set: { value }, target: [keyValueTable.key] })
.run();
}
export function deleteValue(env: Env, key: Key) {
return getDb(env)
.delete(keyValueTable)
.where(eq(keyValueTable.key, key))
.run();
}

View File

@@ -29,4 +29,9 @@ export const watchStatusTable = sqliteTable(
}),
);
export const tables = [watchStatusTable, deviceTokensTable];
export const keyValueTable = sqliteTable("key_value", {
key: text("key", { enum: ["schedule_last_checked_at"] }).primaryKey(),
value: text("value").notNull(),
});
export const tables = [watchStatusTable, deviceTokensTable, keyValueTable];