166 lines
4.8 KiB
SQL
166 lines
4.8 KiB
SQL
CREATE EXTENSION IF NOT EXISTS "citext";
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "FieldType" AS ENUM ('text', 'number', 'date', 'textarea', 'boolean');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Form" (
|
|
"id" SERIAL NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Form_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Category" (
|
|
"id" SERIAL NOT NULL,
|
|
"form_id" INTEGER NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"sort_order" INTEGER NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "Category_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Field" (
|
|
"id" SERIAL NOT NULL,
|
|
"category_id" INTEGER NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"type" "FieldType" NOT NULL,
|
|
"description" TEXT,
|
|
"sort_order" INTEGER NOT NULL,
|
|
|
|
CONSTRAINT "Field_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Response" (
|
|
"id" SERIAL NOT NULL,
|
|
"form_id" INTEGER NOT NULL,
|
|
"submitted_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Response_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ResponseValue" (
|
|
"id" SERIAL NOT NULL,
|
|
"response_id" INTEGER NOT NULL,
|
|
"field_id" INTEGER NOT NULL,
|
|
"value" TEXT,
|
|
|
|
CONSTRAINT "ResponseValue_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "MantisSummary" (
|
|
"id" SERIAL NOT NULL,
|
|
"summary_date" DATE NOT NULL,
|
|
"summary_text" TEXT NOT NULL,
|
|
"generated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "MantisSummary_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Setting" (
|
|
"key" TEXT NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Setting_pkey" PRIMARY KEY ("key")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"username" CITEXT NOT NULL,
|
|
"email" CITEXT,
|
|
"fullName" TEXT,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "UserPreference" (
|
|
"id" SERIAL NOT NULL,
|
|
"user_id" TEXT NOT NULL,
|
|
"key" TEXT NOT NULL,
|
|
"value" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "UserPreference_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Authenticator" (
|
|
"id" TEXT NOT NULL,
|
|
"credential_id" TEXT NOT NULL,
|
|
"credential_public_key" BYTEA NOT NULL,
|
|
"counter" BIGINT NOT NULL,
|
|
"credential_device_type" TEXT NOT NULL,
|
|
"credential_backed_up" BOOLEAN NOT NULL,
|
|
"transports" TEXT,
|
|
"user_id" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "Authenticator_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ChatThread" (
|
|
"id" TEXT NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "ChatThread_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ChatMessage" (
|
|
"id" TEXT NOT NULL,
|
|
"thread_id" TEXT NOT NULL,
|
|
"sender" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "ChatMessage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "MantisSummary_summary_date_key" ON "MantisSummary"("summary_date");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "UserPreference_user_id_key_key" ON "UserPreference"("user_id", "key");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Authenticator_credential_id_key" ON "Authenticator"("credential_id");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Category" ADD CONSTRAINT "Category_form_id_fkey" FOREIGN KEY ("form_id") REFERENCES "Form"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Field" ADD CONSTRAINT "Field_category_id_fkey" FOREIGN KEY ("category_id") REFERENCES "Category"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Response" ADD CONSTRAINT "Response_form_id_fkey" FOREIGN KEY ("form_id") REFERENCES "Form"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ResponseValue" ADD CONSTRAINT "ResponseValue_response_id_fkey" FOREIGN KEY ("response_id") REFERENCES "Response"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ResponseValue" ADD CONSTRAINT "ResponseValue_field_id_fkey" FOREIGN KEY ("field_id") REFERENCES "Field"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "UserPreference" ADD CONSTRAINT "UserPreference_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Authenticator" ADD CONSTRAINT "Authenticator_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ChatMessage" ADD CONSTRAINT "ChatMessage_thread_id_fkey" FOREIGN KEY ("thread_id") REFERENCES "ChatThread"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|