integratedhub/services/reminderService.ts
2026-02-14 02:20:19 +00:00

83 lines
1.9 KiB
TypeScript

import { db } from "../db/db.ts";
import { reminders } from "../db/schema.ts";
import { Reminder } from "../db/interfaces.ts";
import { and, desc, eq } from "drizzle-orm";
// Create a new reminder
export async function createReminder(
user_id: string,
lease_id: string | null,
reminder_type: string,
title: string,
description: string | null,
due_date: number,
) {
const now = Date.now();
return await db.insert(reminders)
.values({
id: crypto.randomUUID(),
user_id,
lease_id,
reminder_type,
title,
description,
due_date,
is_completed: false,
created_on: now,
updated_on: now,
})
.returning();
}
// Get reminders for a user
export async function getRemindersByUserId(
user_id: string,
include_completed: boolean = false,
): Promise<Reminder[]> {
const conditions = [eq(reminders.user_id, user_id)];
if (!include_completed) {
conditions.push(eq(reminders.is_completed, false));
}
return await db.select()
.from(reminders)
.where(and(...conditions))
.orderBy(desc(reminders.due_date));
}
// Update an existing reminder
export async function updateReminder(
id: string,
updateData: Partial<Omit<Reminder, "id" | "user_id" | "created_on">>,
) {
const now = Date.now();
return await db.update(reminders)
.set({
...updateData,
updated_on: now,
})
.where(eq(reminders.id, id))
.returning();
}
// Mark a reminder as completed
export async function markReminderCompleted(
id: string,
is_completed: boolean = true,
) {
const now = Date.now();
return await db.update(reminders)
.set({
is_completed,
updated_on: now,
})
.where(eq(reminders.id, id))
.returning();
}
// Delete a reminder
export async function deleteReminder(id: string) {
return await db.delete(reminders).where(eq(reminders.id, id)).returning();
}