src / database.ts
import * as path from "path";
import * as fs from "fs";
import * as os from "os";
const DB_FILE = "reminders.json";
interface Reminder {
id: number;
datetime: string;
message: string;
created_at: string;
}
interface Database {
reminders: Reminder[];
nextId: number;
}
let db: Database | null = null;
function getDbPath(): string {
const home = os.homedir();
const dir = path.join(home, ".lmstudio", "plugin-data", "reminder-llm");
fs.mkdirSync(dir, { recursive: true });
return path.join(dir, DB_FILE);
}
function loadDb(): Database {
if (db) return db;
const p = getDbPath();
if (fs.existsSync(p)) {
db = JSON.parse(fs.readFileSync(p, "utf-8"));
} else {
db = { reminders: [], nextId: 1 };
}
return db!;
}
function saveDb(): void {
if (!db) return;
fs.writeFileSync(getDbPath(), JSON.stringify(db, null, 2), "utf-8");
}
export async function addReminder(datetime: string, message: string, remindBefore: number = 0): Promise<number> {
const d = loadDb();
const id = d.nextId++;
d.reminders.push({ id, datetime, message, created_at: new Date().toISOString() });
saveDb();
return id;
}
export async function getAllReminders(): Promise<Reminder[]> {
return loadDb().reminders.sort((a, b) => new Date(a.datetime).getTime() - new Date(b.datetime).getTime());
}
export async function deleteReminder(id: number): Promise<boolean> {
const d = loadDb();
const i = d.reminders.findIndex(r => r.id === id);
if (i > -1) { d.reminders.splice(i, 1); saveDb(); return true; }
return false;
}
export async function deleteAllReminders(): Promise<number> {
const d = loadDb();
const c = d.reminders.length;
d.reminders = [];
d.nextId = 1;
saveDb();
return c;
}
export async function updateReminder(id: number, datetime?: string, message?: string): Promise<boolean> {
const d = loadDb();
const r = d.reminders.find(r => r.id === id);
if (!r) return false;
if (datetime !== undefined) r.datetime = datetime;
if (message !== undefined) r.message = message;
saveDb();
return true;
}