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;