70 lines
1.6 KiB
TypeScript
70 lines
1.6 KiB
TypeScript
import { Context } from "hono";
|
|
|
|
const getJsonObjectValue = <T = any>(
|
|
value: string | any
|
|
): T | null => {
|
|
if (value == undefined || value == null) {
|
|
return null;
|
|
}
|
|
if (typeof value === "object") {
|
|
return value as T;
|
|
}
|
|
if (typeof value !== "string") {
|
|
return null;
|
|
}
|
|
try {
|
|
return JSON.parse(value) as T;
|
|
} catch (e) {
|
|
console.error(`GetJsonValue: Failed to parse ${value}`, e);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
export const getJsonSetting = async <T = any>(
|
|
c: Context<HonoCustomType>, key: string
|
|
): Promise<T | null> => {
|
|
const value = await getSetting(c, key);
|
|
if (!value) {
|
|
return null;
|
|
}
|
|
try {
|
|
return JSON.parse(value) as T;
|
|
} catch (e) {
|
|
console.error(`GetJsonSetting: Failed to parse ${key}`, e);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export const getSetting = async (
|
|
c: Context<HonoCustomType>, key: string
|
|
): Promise<string | null> => {
|
|
try {
|
|
const value = await c.env.DB.prepare(
|
|
`SELECT value FROM settings where key = ?`
|
|
).bind(key).first<string>("value");
|
|
return value;
|
|
} catch (error) {
|
|
console.error(`GetSetting: Failed to get ${key}`, error);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
export const saveSetting = async (
|
|
c: Context<HonoCustomType>,
|
|
key: string, value: string
|
|
) => {
|
|
await c.env.DB.prepare(
|
|
`INSERT INTO settings (key, value) VALUES (?, ?)`
|
|
+ ` ON CONFLICT(key) DO UPDATE SET value = ?, updated_at = datetime('now')`
|
|
).bind(key, value, value).run();
|
|
return true;
|
|
}
|
|
|
|
export default {
|
|
getJsonObjectValue,
|
|
getJsonSetting,
|
|
getSetting,
|
|
saveSetting,
|
|
}
|