···11+CREATE TABLE "task_reminder_sent" (
22+ "id" text PRIMARY KEY NOT NULL,
33+ "task_id" text NOT NULL,
44+ "reminder_type" text NOT NULL,
55+ "created_at" timestamp DEFAULT now() NOT NULL,
66+ "updated_at" timestamp DEFAULT now() NOT NULL,
77+ CONSTRAINT "task_reminder_sent_task_type_unique" UNIQUE("task_id","reminder_type")
88+);
99+--> statement-breakpoint
1010+ALTER TABLE "task_reminder_sent" ADD CONSTRAINT "task_reminder_sent_task_id_task_id_fk" FOREIGN KEY ("task_id") REFERENCES "public"."task"("id") ON DELETE cascade ON UPDATE cascade;--> statement-breakpoint
1111+CREATE INDEX "task_reminder_sent_taskId_idx" ON "task_reminder_sent" USING btree ("task_id");--> statement-breakpoint
1212+CREATE INDEX "task_dueDate_idx" ON "task" USING btree ("due_date");
···11import { eq } from "drizzle-orm";
22import { HTTPException } from "hono/http-exception";
33import db from "../../database";
44-import { taskTable } from "../../database/schema";
44+import { taskReminderSentTable, taskTable } from "../../database/schema";
5566async function updateTaskDueDate({
77 id,
···1919 message: "Task not found",
2020 });
2121 }
2222+2323+ // Clear sent reminders so new due date triggers fresh notifications
2424+ await db
2525+ .delete(taskReminderSentTable)
2626+ .where(eq(taskReminderSentTable.taskId, id));
22272328 const [updatedTask] = await db
2429 .update(taskTable)