Bunch of updates to scheduling
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
-- Add POLL to CalendarItemSource enum
|
||||
ALTER TYPE "CalendarItemSource" ADD VALUE IF NOT EXISTS 'POLL';
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "scheduling_polls" ADD COLUMN "auto_finalize" BOOLEAN NOT NULL DEFAULT false;
|
||||
ALTER TABLE "scheduling_polls" ADD COLUMN "auto_finalize_threshold" INTEGER;
|
||||
ALTER TABLE "scheduling_polls" ADD COLUMN "auto_convert_to_calendar" BOOLEAN NOT NULL DEFAULT false;
|
||||
ALTER TABLE "scheduling_polls" ADD COLUMN "auto_convert_to_gancio" BOOLEAN NOT NULL DEFAULT false;
|
||||
ALTER TABLE "scheduling_polls" ADD COLUMN "auto_convert_to_shift" BOOLEAN NOT NULL DEFAULT false;
|
||||
ALTER TABLE "scheduling_polls" ADD COLUMN "tie_breaker" TEXT NOT NULL DEFAULT 'earliest';
|
||||
ALTER TABLE "scheduling_polls" ADD COLUMN "auto_finalize_job_id" TEXT;
|
||||
ALTER TABLE "scheduling_polls" ADD COLUMN "converted_calendar_item_id" TEXT;
|
||||
@@ -0,0 +1,160 @@
|
||||
-- AlterEnum
|
||||
ALTER TYPE "ContactActivityType" ADD VALUE 'POLL_VOTED';
|
||||
|
||||
-- AlterEnum
|
||||
ALTER TYPE "ContactSource" ADD VALUE 'POLL_VOTE';
|
||||
|
||||
-- AlterEnum
|
||||
ALTER TYPE "SignupSource" ADD VALUE 'POLL_CONVERSION';
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "contacts" ADD COLUMN "pronouns" TEXT;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "scheduling_poll_votes" ADD COLUMN "contact_id" TEXT;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "scheduling_polls" ADD COLUMN "auto_enroll_voters" BOOLEAN NOT NULL DEFAULT true;
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "users" ADD COLUMN "pronouns" TEXT;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "participant_needs" (
|
||||
"id" TEXT NOT NULL,
|
||||
"user_id" TEXT,
|
||||
"contact_id" TEXT,
|
||||
"needs_wheelchair" BOOLEAN NOT NULL DEFAULT false,
|
||||
"needs_ground_floor" BOOLEAN NOT NULL DEFAULT false,
|
||||
"needs_hearing_loop" BOOLEAN NOT NULL DEFAULT false,
|
||||
"needs_sign_language" BOOLEAN NOT NULL DEFAULT false,
|
||||
"other_accessibility" TEXT,
|
||||
"is_vegan" BOOLEAN NOT NULL DEFAULT false,
|
||||
"is_vegetarian" BOOLEAN NOT NULL DEFAULT false,
|
||||
"is_gluten_free" BOOLEAN NOT NULL DEFAULT false,
|
||||
"is_halal" BOOLEAN NOT NULL DEFAULT false,
|
||||
"is_kosher" BOOLEAN NOT NULL DEFAULT false,
|
||||
"has_nut_allergy" BOOLEAN NOT NULL DEFAULT false,
|
||||
"other_dietary" TEXT,
|
||||
"needs_childcare" BOOLEAN NOT NULL DEFAULT false,
|
||||
"childcare_details" TEXT,
|
||||
"needs_transportation" BOOLEAN NOT NULL DEFAULT false,
|
||||
"transportation_notes" TEXT,
|
||||
"preferred_language" TEXT DEFAULT 'en',
|
||||
"needs_translation" BOOLEAN NOT NULL DEFAULT false,
|
||||
"translation_language" TEXT,
|
||||
"visibility_consent" TEXT NOT NULL DEFAULT 'organizer_only',
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "participant_needs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "meeting_agendas" (
|
||||
"id" TEXT NOT NULL,
|
||||
"shift_id" TEXT,
|
||||
"poll_id" TEXT,
|
||||
"title" TEXT NOT NULL,
|
||||
"items" JSONB NOT NULL DEFAULT '[]',
|
||||
"status" TEXT NOT NULL DEFAULT 'draft',
|
||||
"created_by_user_id" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "meeting_agendas_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "meeting_minutes" (
|
||||
"id" TEXT NOT NULL,
|
||||
"agenda_id" TEXT NOT NULL,
|
||||
"notes" TEXT NOT NULL,
|
||||
"decisions" JSONB NOT NULL DEFAULT '[]',
|
||||
"attendees" JSONB NOT NULL DEFAULT '[]',
|
||||
"approved_at" TIMESTAMP(3),
|
||||
"approved_by_user_id" TEXT,
|
||||
"created_by_user_id" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "meeting_minutes_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "action_items" (
|
||||
"id" TEXT NOT NULL,
|
||||
"agenda_id" TEXT,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"assignee_user_id" TEXT,
|
||||
"due_date" TIMESTAMP(3),
|
||||
"status" TEXT NOT NULL DEFAULT 'open',
|
||||
"priority" TEXT NOT NULL DEFAULT 'normal',
|
||||
"completed_at" TIMESTAMP(3),
|
||||
"created_by_user_id" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "action_items_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "participant_needs_user_id_key" ON "participant_needs"("user_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "participant_needs_contact_id_key" ON "participant_needs"("contact_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "meeting_agendas_shift_id_key" ON "meeting_agendas"("shift_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "meeting_agendas_poll_id_key" ON "meeting_agendas"("poll_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "meeting_minutes_agenda_id_key" ON "meeting_minutes"("agenda_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "action_items_assignee_user_id_status_idx" ON "action_items"("assignee_user_id", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "action_items_due_date_idx" ON "action_items"("due_date");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "scheduling_poll_votes_contact_id_idx" ON "scheduling_poll_votes"("contact_id");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "scheduling_poll_votes" ADD CONSTRAINT "scheduling_poll_votes_contact_id_fkey" FOREIGN KEY ("contact_id") REFERENCES "contacts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "participant_needs" ADD CONSTRAINT "participant_needs_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "participant_needs" ADD CONSTRAINT "participant_needs_contact_id_fkey" FOREIGN KEY ("contact_id") REFERENCES "contacts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "meeting_agendas" ADD CONSTRAINT "meeting_agendas_shift_id_fkey" FOREIGN KEY ("shift_id") REFERENCES "shifts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "meeting_agendas" ADD CONSTRAINT "meeting_agendas_poll_id_fkey" FOREIGN KEY ("poll_id") REFERENCES "scheduling_polls"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "meeting_agendas" ADD CONSTRAINT "meeting_agendas_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "meeting_minutes" ADD CONSTRAINT "meeting_minutes_agenda_id_fkey" FOREIGN KEY ("agenda_id") REFERENCES "meeting_agendas"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "meeting_minutes" ADD CONSTRAINT "meeting_minutes_approved_by_user_id_fkey" FOREIGN KEY ("approved_by_user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "meeting_minutes" ADD CONSTRAINT "meeting_minutes_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "action_items" ADD CONSTRAINT "action_items_agenda_id_fkey" FOREIGN KEY ("agenda_id") REFERENCES "meeting_agendas"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "action_items" ADD CONSTRAINT "action_items_assignee_user_id_fkey" FOREIGN KEY ("assignee_user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "action_items" ADD CONSTRAINT "action_items_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
Reference in New Issue
Block a user