feat: support sending "new title" alerts to devices
This commit is contained in:
31
src/models/kv.ts
Normal file
31
src/models/kv.ts
Normal 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();
|
||||
}
|
||||
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user