-- CreateTable CREATE TABLE "users" ( "id" UUID NOT NULL, "email" TEXT NOT NULL, "name" TEXT NOT NULL, "avatar" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, "membership_plan" TEXT, "membership_expires_at" TIMESTAMP(3), "is_email_verified" BOOLEAN NOT NULL DEFAULT false, "image" TEXT, CONSTRAINT "users_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "sessions" ( "id" UUID NOT NULL, "token" TEXT NOT NULL, "expires_at" TIMESTAMP(3) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, "ip_address" TEXT, "user_agent" TEXT, "user_id" UUID NOT NULL, CONSTRAINT "sessions_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "account" ( "id" TEXT NOT NULL, "account_id" TEXT NOT NULL, "provider_id" TEXT NOT NULL, "user_id" UUID NOT NULL, "access_token" TEXT, "refresh_token" TEXT, "id_token" TEXT, "access_token_expires_at" TIMESTAMP(3), "refresh_token_expires_at" TIMESTAMP(3), "scope" TEXT, "password" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "account_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "verification" ( "id" UUID NOT NULL, "identifier" TEXT NOT NULL, "value" TEXT NOT NULL, "expires_at" TIMESTAMP(3) NOT NULL, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "verification_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "settings" ( "id" UUID NOT NULL, "user_id" UUID NOT NULL, "code" TEXT NOT NULL, "name" TEXT NOT NULL, "description" TEXT, "value" TEXT, CONSTRAINT "settings_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "categories" ( "id" UUID NOT NULL, "user_id" UUID NOT NULL, "code" TEXT NOT NULL, "name" TEXT NOT NULL, "color" TEXT NOT NULL DEFAULT '#000000', "llm_prompt" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "categories_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "projects" ( "id" UUID NOT NULL, "user_id" UUID NOT NULL, "code" TEXT NOT NULL, "name" TEXT NOT NULL, "color" TEXT NOT NULL DEFAULT '#000000', "llm_prompt" TEXT, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "projects_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "fields" ( "id" UUID NOT NULL, "user_id" UUID NOT NULL, "code" TEXT NOT NULL, "name" TEXT NOT NULL, "type" TEXT NOT NULL DEFAULT 'string', "llm_prompt" TEXT, "options" JSONB, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "is_visible_in_list" BOOLEAN NOT NULL DEFAULT false, "is_visible_in_analysis" BOOLEAN NOT NULL DEFAULT false, "is_required" BOOLEAN NOT NULL DEFAULT false, "is_extra" BOOLEAN NOT NULL DEFAULT true, CONSTRAINT "fields_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "files" ( "id" UUID NOT NULL, "user_id" UUID NOT NULL, "filename" TEXT NOT NULL, "path" TEXT NOT NULL, "mimetype" TEXT NOT NULL, "metadata" JSONB, "is_reviewed" BOOLEAN NOT NULL DEFAULT false, "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "files_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "transactions" ( "id" UUID NOT NULL, "user_id" UUID NOT NULL, "name" TEXT, "description" TEXT, "merchant" TEXT, "total" INTEGER, "currency_code" TEXT, "converted_total" INTEGER, "converted_currency_code" TEXT, "type" TEXT DEFAULT 'expense', "note" TEXT, "files" JSONB NOT NULL DEFAULT '[]', "extra" JSONB, "category_code" TEXT, "project_code" TEXT, "issued_at" TIMESTAMP(3), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, "text" TEXT, CONSTRAINT "transactions_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "currencies" ( "id" UUID NOT NULL, "user_id" UUID, "code" TEXT NOT NULL, "name" TEXT NOT NULL, CONSTRAINT "currencies_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE UNIQUE INDEX "users_email_key" ON "users"("email"); -- CreateIndex CREATE UNIQUE INDEX "sessions_token_key" ON "sessions"("token"); -- CreateIndex CREATE UNIQUE INDEX "settings_user_id_code_key" ON "settings"("user_id", "code"); -- CreateIndex CREATE UNIQUE INDEX "categories_user_id_code_key" ON "categories"("user_id", "code"); -- CreateIndex CREATE UNIQUE INDEX "projects_user_id_code_key" ON "projects"("user_id", "code"); -- CreateIndex CREATE UNIQUE INDEX "fields_user_id_code_key" ON "fields"("user_id", "code"); -- CreateIndex CREATE INDEX "transactions_user_id_idx" ON "transactions"("user_id"); -- CreateIndex CREATE INDEX "transactions_project_code_idx" ON "transactions"("project_code"); -- CreateIndex CREATE INDEX "transactions_category_code_idx" ON "transactions"("category_code"); -- CreateIndex CREATE INDEX "transactions_issued_at_idx" ON "transactions"("issued_at"); -- CreateIndex CREATE INDEX "transactions_name_idx" ON "transactions"("name"); -- CreateIndex CREATE INDEX "transactions_merchant_idx" ON "transactions"("merchant"); -- CreateIndex CREATE INDEX "transactions_total_idx" ON "transactions"("total"); -- CreateIndex CREATE UNIQUE INDEX "currencies_user_id_code_key" ON "currencies"("user_id", "code"); -- AddForeignKey ALTER TABLE "sessions" ADD CONSTRAINT "sessions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "account" ADD CONSTRAINT "account_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "settings" ADD CONSTRAINT "settings_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "categories" ADD CONSTRAINT "categories_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "projects" ADD CONSTRAINT "projects_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "fields" ADD CONSTRAINT "fields_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "files" ADD CONSTRAINT "files_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "transactions" ADD CONSTRAINT "transactions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "transactions" ADD CONSTRAINT "transactions_category_code_user_id_fkey" FOREIGN KEY ("category_code", "user_id") REFERENCES "categories"("code", "user_id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "transactions" ADD CONSTRAINT "transactions_project_code_user_id_fkey" FOREIGN KEY ("project_code", "user_id") REFERENCES "projects"("code", "user_id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "currencies" ADD CONSTRAINT "currencies_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;