mirror of
https://github.com/marcogll/TaxHacker_s23.git
synced 2026-01-13 21:35:19 +00:00
241 lines
7.4 KiB
SQL
241 lines
7.4 KiB
SQL
-- 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;
|