Add recurring expense functionality (#263)

* code complete

* Smaller updates

* delete ambitious TODOs (add to PR)

* add transactionality to recurring expense creation

* Remove unnecessary `let`s

* Add default english labels to non-en-US translations

* Accept `es.json` translations

* add condition to ensure links are only modified when applicable
This commit is contained in:
trandall
2025-04-19 12:23:23 -07:00
committed by GitHub
parent 2bced00f82
commit 94c101cf7b
17 changed files with 464 additions and 3 deletions

View File

@@ -0,0 +1,29 @@
-- CreateEnum
CREATE TYPE "RecurrenceRule" AS ENUM ('NONE', 'DAILY', 'WEEKLY', 'MONTHLY');
-- AlterTable
ALTER TABLE "Expense" ADD COLUMN "recurrenceRule" "RecurrenceRule" DEFAULT 'NONE',
ADD COLUMN "recurringExpenseLinkId" TEXT;
-- CreateTable
CREATE TABLE "RecurringExpenseLink" (
"id" TEXT NOT NULL,
"groupId" TEXT NOT NULL,
"currentFrameExpenseId" TEXT NOT NULL,
"nextExpenseCreatedAt" TIMESTAMP(3),
"nextExpenseDate" TIMESTAMP(3) NOT NULL,
CONSTRAINT "RecurringExpenseLink_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "RecurringExpenseLink_currentFrameExpenseId_key" ON "RecurringExpenseLink"("currentFrameExpenseId");
-- CreateIndex
CREATE INDEX "RecurringExpenseLink_groupId_idx" ON "RecurringExpenseLink"("groupId");
-- CreateIndex
CREATE INDEX "RecurringExpenseLink_groupId_nextExpenseCreatedAt_nextExpen_idx" ON "RecurringExpenseLink"("groupId", "nextExpenseCreatedAt", "nextExpenseDate" DESC);
-- AddForeignKey
ALTER TABLE "RecurringExpenseLink" ADD CONSTRAINT "RecurringExpenseLink_currentFrameExpenseId_fkey" FOREIGN KEY ("currentFrameExpenseId") REFERENCES "Expense"("id") ON DELETE CASCADE ON UPDATE CASCADE;