Merge branch 'chore/squash-prisma-migrations'

This commit is contained in:
bunker-admin 2026-04-16 17:36:36 -06:00
commit 6d562da4b2
50 changed files with 2366 additions and 2595 deletions

View File

@ -1,509 +0,0 @@
-- CreateEnum
CREATE TYPE "UserRole" AS ENUM ('SUPER_ADMIN', 'INFLUENCE_ADMIN', 'MAP_ADMIN', 'USER', 'TEMP');
-- CreateEnum
CREATE TYPE "UserStatus" AS ENUM ('ACTIVE', 'INACTIVE', 'SUSPENDED', 'EXPIRED');
-- CreateEnum
CREATE TYPE "UserCreatedVia" AS ENUM ('ADMIN', 'PUBLIC_SHIFT_SIGNUP', 'STANDARD');
-- CreateEnum
CREATE TYPE "CampaignStatus" AS ENUM ('DRAFT', 'ACTIVE', 'PAUSED', 'ARCHIVED');
-- CreateEnum
CREATE TYPE "GovernmentLevel" AS ENUM ('FEDERAL', 'PROVINCIAL', 'MUNICIPAL', 'SCHOOL_BOARD');
-- CreateEnum
CREATE TYPE "EmailMethod" AS ENUM ('SMTP', 'MAILTO');
-- CreateEnum
CREATE TYPE "CampaignEmailStatus" AS ENUM ('SENT', 'FAILED', 'CLICKED', 'USER_INFO_CAPTURED');
-- CreateEnum
CREATE TYPE "ResponseType" AS ENUM ('EMAIL', 'LETTER', 'PHONE_CALL', 'MEETING', 'SOCIAL_MEDIA', 'OTHER');
-- CreateEnum
CREATE TYPE "ResponseStatus" AS ENUM ('PENDING', 'APPROVED', 'REJECTED');
-- CreateEnum
CREATE TYPE "SupportLevel" AS ENUM ('1', '2', '3', '4');
-- CreateEnum
CREATE TYPE "GeocodeProvider" AS ENUM ('MAPBOX', 'NOMINATIM', 'PHOTON', 'LOCATIONIQ', 'ARCGIS', 'UNKNOWN');
-- CreateEnum
CREATE TYPE "ShiftStatus" AS ENUM ('OPEN', 'FULL', 'CANCELLED');
-- CreateEnum
CREATE TYPE "SignupStatus" AS ENUM ('CONFIRMED', 'CANCELLED');
-- CreateEnum
CREATE TYPE "SignupSource" AS ENUM ('AUTHENTICATED', 'PUBLIC', 'ADMIN');
-- CreateEnum
CREATE TYPE "CutCategory" AS ENUM ('CUSTOM', 'WARD', 'NEIGHBORHOOD', 'DISTRICT');
-- CreateTable
CREATE TABLE "users" (
"id" TEXT NOT NULL,
"email" TEXT NOT NULL,
"password" TEXT NOT NULL,
"name" TEXT,
"phone" TEXT,
"role" "UserRole" NOT NULL DEFAULT 'USER',
"status" "UserStatus" NOT NULL DEFAULT 'ACTIVE',
"permissions" JSONB,
"createdVia" "UserCreatedVia" NOT NULL DEFAULT 'STANDARD',
"expiresAt" TIMESTAMP(3),
"expireDays" INTEGER,
"lastLoginAt" TIMESTAMP(3),
"emailVerified" BOOLEAN NOT NULL DEFAULT false,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "refresh_tokens" (
"id" TEXT NOT NULL,
"token" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"expiresAt" TIMESTAMP(3) NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "refresh_tokens_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "campaigns" (
"id" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"emailSubject" TEXT NOT NULL,
"emailBody" TEXT NOT NULL,
"callToAction" TEXT,
"coverPhoto" TEXT,
"status" "CampaignStatus" NOT NULL DEFAULT 'DRAFT',
"allowSmtpEmail" BOOLEAN NOT NULL DEFAULT true,
"allowMailtoLink" BOOLEAN NOT NULL DEFAULT true,
"collectUserInfo" BOOLEAN NOT NULL DEFAULT true,
"showEmailCount" BOOLEAN NOT NULL DEFAULT true,
"showCallCount" BOOLEAN NOT NULL DEFAULT true,
"allowEmailEditing" BOOLEAN NOT NULL DEFAULT false,
"allowCustomRecipients" BOOLEAN NOT NULL DEFAULT false,
"showResponseWall" BOOLEAN NOT NULL DEFAULT false,
"highlightCampaign" BOOLEAN NOT NULL DEFAULT false,
"targetGovernmentLevels" "GovernmentLevel"[],
"createdByUserId" TEXT,
"createdByUserEmail" TEXT,
"createdByUserName" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "campaigns_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "representatives" (
"id" TEXT NOT NULL,
"postalCode" TEXT NOT NULL,
"name" TEXT,
"email" TEXT,
"districtName" TEXT,
"electedOffice" TEXT,
"partyName" TEXT,
"representativeSetName" TEXT,
"url" TEXT,
"photoUrl" TEXT,
"offices" JSONB,
"cachedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "representatives_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "campaign_emails" (
"id" TEXT NOT NULL,
"campaignId" TEXT NOT NULL,
"campaignSlug" TEXT NOT NULL,
"userId" TEXT,
"userEmail" TEXT,
"userName" TEXT,
"userPostalCode" TEXT,
"recipientEmail" TEXT NOT NULL,
"recipientName" TEXT,
"recipientTitle" TEXT,
"recipientLevel" "GovernmentLevel",
"emailMethod" "EmailMethod" NOT NULL,
"subject" TEXT NOT NULL,
"message" TEXT NOT NULL,
"status" "CampaignEmailStatus" NOT NULL DEFAULT 'SENT',
"senderIp" TEXT,
"sentAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "campaign_emails_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "representative_responses" (
"id" TEXT NOT NULL,
"campaignId" TEXT NOT NULL,
"campaignSlug" TEXT NOT NULL,
"representativeName" TEXT NOT NULL,
"representativeTitle" TEXT,
"representativeLevel" "GovernmentLevel" NOT NULL,
"representativeEmail" TEXT,
"responseType" "ResponseType" NOT NULL,
"responseText" TEXT NOT NULL,
"userComment" TEXT,
"screenshotUrl" TEXT,
"submittedByUserId" TEXT,
"submittedByName" TEXT,
"submittedByEmail" TEXT,
"isAnonymous" BOOLEAN NOT NULL DEFAULT false,
"status" "ResponseStatus" NOT NULL DEFAULT 'PENDING',
"isVerified" BOOLEAN NOT NULL DEFAULT false,
"verificationToken" TEXT,
"verificationSentAt" TIMESTAMP(3),
"verifiedAt" TIMESTAMP(3),
"verifiedBy" TEXT,
"upvoteCount" INTEGER NOT NULL DEFAULT 0,
"submittedIp" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "representative_responses_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "response_upvotes" (
"id" TEXT NOT NULL,
"responseId" TEXT NOT NULL,
"userId" TEXT,
"userEmail" TEXT,
"upvotedIp" TEXT,
CONSTRAINT "response_upvotes_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "custom_recipients" (
"id" TEXT NOT NULL,
"campaignId" TEXT NOT NULL,
"campaignSlug" TEXT NOT NULL,
"recipientName" TEXT NOT NULL,
"recipientEmail" TEXT NOT NULL,
"recipientTitle" TEXT,
"recipientOrganization" TEXT,
"notes" TEXT,
"isActive" BOOLEAN NOT NULL DEFAULT true,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "custom_recipients_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "postal_code_cache" (
"id" TEXT NOT NULL,
"postalCode" TEXT NOT NULL,
"city" TEXT,
"province" TEXT,
"centroidLat" DECIMAL(10,8),
"centroidLng" DECIMAL(11,8),
"lastUpdated" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "postal_code_cache_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "email_logs" (
"id" TEXT NOT NULL,
"recipientEmail" TEXT NOT NULL,
"senderName" TEXT NOT NULL,
"senderEmail" TEXT NOT NULL,
"subject" TEXT,
"message" TEXT,
"postalCode" TEXT,
"status" TEXT NOT NULL DEFAULT 'sent',
"senderIp" TEXT,
"sentAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "email_logs_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "email_verifications" (
"id" TEXT NOT NULL,
"token" TEXT NOT NULL,
"email" TEXT NOT NULL,
"tempCampaignData" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"expiresAt" TIMESTAMP(3) NOT NULL,
"used" BOOLEAN NOT NULL DEFAULT false,
CONSTRAINT "email_verifications_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "calls" (
"id" TEXT NOT NULL,
"representativeName" TEXT NOT NULL,
"representativeTitle" TEXT,
"phoneNumber" TEXT NOT NULL,
"officeType" TEXT,
"callerName" TEXT,
"callerEmail" TEXT,
"postalCode" TEXT,
"campaignId" TEXT,
"campaignSlug" TEXT,
"callerIp" TEXT,
"calledAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "calls_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "locations" (
"id" TEXT NOT NULL,
"latitude" DECIMAL(10,8),
"longitude" DECIMAL(11,8),
"firstName" TEXT,
"lastName" TEXT,
"email" TEXT,
"phone" TEXT,
"unitNumber" TEXT,
"supportLevel" "SupportLevel",
"address" TEXT,
"sign" BOOLEAN NOT NULL DEFAULT false,
"signSize" TEXT,
"notes" TEXT,
"geocodeConfidence" INTEGER,
"geocodeProvider" "GeocodeProvider",
"createdByUserId" TEXT,
"updatedByUserId" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "locations_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "shifts" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"date" DATE NOT NULL,
"startTime" TEXT NOT NULL,
"endTime" TEXT NOT NULL,
"location" TEXT,
"maxVolunteers" INTEGER NOT NULL,
"currentVolunteers" INTEGER NOT NULL DEFAULT 0,
"status" "ShiftStatus" NOT NULL DEFAULT 'OPEN',
"isPublic" BOOLEAN NOT NULL DEFAULT false,
"createdBy" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "shifts_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "shift_signups" (
"id" TEXT NOT NULL,
"shiftId" TEXT NOT NULL,
"shiftTitle" TEXT,
"userId" TEXT,
"userEmail" TEXT NOT NULL,
"userName" TEXT,
"userPhone" TEXT,
"signupDate" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"status" "SignupStatus" NOT NULL DEFAULT 'CONFIRMED',
"signupSource" "SignupSource" NOT NULL DEFAULT 'AUTHENTICATED',
CONSTRAINT "shift_signups_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "cuts" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT,
"color" TEXT NOT NULL DEFAULT '#3388ff',
"opacity" DECIMAL(3,2) NOT NULL DEFAULT 0.3,
"category" "CutCategory",
"isPublic" BOOLEAN NOT NULL DEFAULT false,
"isOfficial" BOOLEAN NOT NULL DEFAULT false,
"geojson" TEXT NOT NULL,
"bounds" TEXT,
"showLocations" BOOLEAN NOT NULL DEFAULT true,
"exportEnabled" BOOLEAN NOT NULL DEFAULT true,
"assignedTo" TEXT,
"filterSettings" JSONB,
"lastCanvassed" TIMESTAMP(3),
"completionPercentage" INTEGER NOT NULL DEFAULT 0,
"createdByUserId" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "cuts_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "map_settings" (
"id" TEXT NOT NULL,
"latitude" DECIMAL(10,8),
"longitude" DECIMAL(11,8),
"zoom" INTEGER,
"walkSheetTitle" TEXT,
"walkSheetSubtitle" TEXT,
"walkSheetFooter" TEXT,
"qrCode1Url" TEXT,
"qrCode1Label" TEXT,
"qrCode2Url" TEXT,
"qrCode2Label" TEXT,
"qrCode3Url" TEXT,
"qrCode3Label" TEXT,
"createdBy" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "map_settings_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "landing_pages" (
"id" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"blocks" JSONB NOT NULL,
"htmlOutput" TEXT,
"cssOutput" TEXT,
"mkdocsPath" TEXT,
"published" BOOLEAN NOT NULL DEFAULT false,
"seoTitle" TEXT,
"seoDescription" TEXT,
"seoImage" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "landing_pages_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "page_blocks" (
"id" TEXT NOT NULL,
"type" TEXT NOT NULL,
"label" TEXT NOT NULL,
"schema" JSONB NOT NULL,
"defaults" JSONB NOT NULL,
"thumbnail" TEXT,
"category" TEXT,
"sortOrder" INTEGER NOT NULL DEFAULT 0,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "page_blocks_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
-- CreateIndex
CREATE UNIQUE INDEX "refresh_tokens_token_key" ON "refresh_tokens"("token");
-- CreateIndex
CREATE INDEX "refresh_tokens_userId_idx" ON "refresh_tokens"("userId");
-- CreateIndex
CREATE UNIQUE INDEX "campaigns_slug_key" ON "campaigns"("slug");
-- CreateIndex
CREATE INDEX "representatives_postalCode_idx" ON "representatives"("postalCode");
-- CreateIndex
CREATE INDEX "campaign_emails_campaignId_idx" ON "campaign_emails"("campaignId");
-- CreateIndex
CREATE INDEX "campaign_emails_campaignSlug_idx" ON "campaign_emails"("campaignSlug");
-- CreateIndex
CREATE INDEX "representative_responses_campaignId_idx" ON "representative_responses"("campaignId");
-- CreateIndex
CREATE INDEX "representative_responses_campaignSlug_idx" ON "representative_responses"("campaignSlug");
-- CreateIndex
CREATE UNIQUE INDEX "response_upvotes_responseId_userId_key" ON "response_upvotes"("responseId", "userId");
-- CreateIndex
CREATE UNIQUE INDEX "response_upvotes_responseId_upvotedIp_key" ON "response_upvotes"("responseId", "upvotedIp");
-- CreateIndex
CREATE INDEX "custom_recipients_campaignId_idx" ON "custom_recipients"("campaignId");
-- CreateIndex
CREATE UNIQUE INDEX "postal_code_cache_postalCode_key" ON "postal_code_cache"("postalCode");
-- CreateIndex
CREATE UNIQUE INDEX "email_verifications_token_key" ON "email_verifications"("token");
-- CreateIndex
CREATE INDEX "calls_campaignId_idx" ON "calls"("campaignId");
-- CreateIndex
CREATE INDEX "shift_signups_shiftId_idx" ON "shift_signups"("shiftId");
-- CreateIndex
CREATE UNIQUE INDEX "shift_signups_shiftId_userEmail_key" ON "shift_signups"("shiftId", "userEmail");
-- CreateIndex
CREATE UNIQUE INDEX "landing_pages_slug_key" ON "landing_pages"("slug");
-- AddForeignKey
ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "campaigns" ADD CONSTRAINT "campaigns_createdByUserId_fkey" FOREIGN KEY ("createdByUserId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "campaign_emails" ADD CONSTRAINT "campaign_emails_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "campaigns"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "campaign_emails" ADD CONSTRAINT "campaign_emails_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "representative_responses" ADD CONSTRAINT "representative_responses_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "campaigns"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "representative_responses" ADD CONSTRAINT "representative_responses_submittedByUserId_fkey" FOREIGN KEY ("submittedByUserId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "response_upvotes" ADD CONSTRAINT "response_upvotes_responseId_fkey" FOREIGN KEY ("responseId") REFERENCES "representative_responses"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "response_upvotes" ADD CONSTRAINT "response_upvotes_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "custom_recipients" ADD CONSTRAINT "custom_recipients_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "campaigns"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "calls" ADD CONSTRAINT "calls_campaignId_fkey" FOREIGN KEY ("campaignId") REFERENCES "campaigns"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "locations" ADD CONSTRAINT "locations_createdByUserId_fkey" FOREIGN KEY ("createdByUserId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "locations" ADD CONSTRAINT "locations_updatedByUserId_fkey" FOREIGN KEY ("updatedByUserId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "shift_signups" ADD CONSTRAINT "shift_signups_shiftId_fkey" FOREIGN KEY ("shiftId") REFERENCES "shifts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "shift_signups" ADD CONSTRAINT "shift_signups_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "cuts" ADD CONSTRAINT "cuts_createdByUserId_fkey" FOREIGN KEY ("createdByUserId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,5 +0,0 @@
-- AlterTable
ALTER TABLE "locations" ADD COLUMN "buildingUse" INTEGER,
ADD COLUMN "federalDistrict" TEXT,
ADD COLUMN "postalCode" TEXT,
ADD COLUMN "province" TEXT;

View File

@ -1,8 +0,0 @@
-- CreateEnum
CREATE TYPE "EditorMode" AS ENUM ('VISUAL', 'CODE');
-- AlterEnum
ALTER TYPE "CampaignEmailStatus" ADD VALUE 'QUEUED';
-- AlterTable
ALTER TABLE "landing_pages" ADD COLUMN "editorMode" "EditorMode" NOT NULL DEFAULT 'VISUAL';

View File

@ -1,8 +0,0 @@
-- CreateEnum
CREATE TYPE "MkdocsExportMode" AS ENUM ('THEMED', 'STANDALONE');
-- AlterTable
ALTER TABLE "landing_pages" ADD COLUMN "mkdocsExportMode" "MkdocsExportMode" NOT NULL DEFAULT 'THEMED',
ADD COLUMN "mkdocsHideNav" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "mkdocsHideToc" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "mkdocsStubPath" TEXT;

View File

@ -1,25 +0,0 @@
-- CreateTable
CREATE TABLE "site_settings" (
"id" TEXT NOT NULL,
"organizationName" TEXT NOT NULL DEFAULT 'Changemaker Lite',
"organizationShortName" TEXT NOT NULL DEFAULT 'CML',
"organizationLogoUrl" TEXT,
"organizationFaviconUrl" TEXT,
"adminColorPrimary" TEXT NOT NULL DEFAULT '#9d4edd',
"adminColorBgBase" TEXT NOT NULL DEFAULT '#1a1025',
"publicColorPrimary" TEXT NOT NULL DEFAULT '#3498db',
"publicColorBgBase" TEXT NOT NULL DEFAULT '#0d1b2a',
"publicColorBgContainer" TEXT NOT NULL DEFAULT '#1b2838',
"publicHeaderGradient" TEXT NOT NULL DEFAULT 'linear-gradient(135deg, #005a9c 0%, #007acc 100%)',
"footerText" TEXT NOT NULL DEFAULT 'Powered by Changemaker Lite',
"loginSubtitle" TEXT NOT NULL DEFAULT 'Admin',
"emailFromName" TEXT NOT NULL DEFAULT 'Changemaker Lite',
"enableInfluence" BOOLEAN NOT NULL DEFAULT true,
"enableMap" BOOLEAN NOT NULL DEFAULT true,
"enableNewsletter" BOOLEAN NOT NULL DEFAULT true,
"enableLandingPages" BOOLEAN NOT NULL DEFAULT true,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "site_settings_pkey" PRIMARY KEY ("id")
);

View File

@ -1,92 +0,0 @@
-- CreateEnum
CREATE TYPE "VisitOutcome" AS ENUM ('NOT_HOME', 'REFUSED', 'MOVED', 'ALREADY_VOTED', 'SPOKE_WITH', 'LEFT_LITERATURE', 'COME_BACK_LATER');
-- CreateEnum
CREATE TYPE "CanvassSessionStatus" AS ENUM ('ACTIVE', 'COMPLETED', 'ABANDONED');
-- AlterTable
ALTER TABLE "shifts" ADD COLUMN "cutId" TEXT;
-- CreateTable
CREATE TABLE "canvass_sessions" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"cutId" TEXT NOT NULL,
"shiftId" TEXT,
"status" "CanvassSessionStatus" NOT NULL DEFAULT 'ACTIVE',
"startedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"endedAt" TIMESTAMP(3),
"startLatitude" DECIMAL(10,8),
"startLongitude" DECIMAL(11,8),
CONSTRAINT "canvass_sessions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "canvass_visits" (
"id" TEXT NOT NULL,
"locationId" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"shiftId" TEXT,
"sessionId" TEXT,
"outcome" "VisitOutcome" NOT NULL,
"supportLevel" "SupportLevel",
"signRequested" BOOLEAN NOT NULL DEFAULT false,
"signSize" TEXT,
"notes" TEXT,
"durationSeconds" INTEGER,
"visitedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "canvass_visits_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "canvass_sessions_userId_idx" ON "canvass_sessions"("userId");
-- CreateIndex
CREATE INDEX "canvass_sessions_cutId_idx" ON "canvass_sessions"("cutId");
-- CreateIndex
CREATE INDEX "canvass_sessions_shiftId_idx" ON "canvass_sessions"("shiftId");
-- CreateIndex
CREATE INDEX "canvass_visits_locationId_idx" ON "canvass_visits"("locationId");
-- CreateIndex
CREATE INDEX "canvass_visits_userId_idx" ON "canvass_visits"("userId");
-- CreateIndex
CREATE INDEX "canvass_visits_shiftId_idx" ON "canvass_visits"("shiftId");
-- CreateIndex
CREATE INDEX "canvass_visits_sessionId_idx" ON "canvass_visits"("sessionId");
-- CreateIndex
CREATE INDEX "canvass_visits_visitedAt_idx" ON "canvass_visits"("visitedAt");
-- CreateIndex
CREATE INDEX "shifts_cutId_idx" ON "shifts"("cutId");
-- AddForeignKey
ALTER TABLE "shifts" ADD CONSTRAINT "shifts_cutId_fkey" FOREIGN KEY ("cutId") REFERENCES "cuts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "canvass_sessions" ADD CONSTRAINT "canvass_sessions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "canvass_sessions" ADD CONSTRAINT "canvass_sessions_cutId_fkey" FOREIGN KEY ("cutId") REFERENCES "cuts"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "canvass_sessions" ADD CONSTRAINT "canvass_sessions_shiftId_fkey" FOREIGN KEY ("shiftId") REFERENCES "shifts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "canvass_visits" ADD CONSTRAINT "canvass_visits_locationId_fkey" FOREIGN KEY ("locationId") REFERENCES "locations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "canvass_visits" ADD CONSTRAINT "canvass_visits_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "canvass_visits" ADD CONSTRAINT "canvass_visits_shiftId_fkey" FOREIGN KEY ("shiftId") REFERENCES "shifts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "canvass_visits" ADD CONSTRAINT "canvass_visits_sessionId_fkey" FOREIGN KEY ("sessionId") REFERENCES "canvass_sessions"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,59 +0,0 @@
-- CreateEnum
CREATE TYPE "TrackPointEvent" AS ENUM ('LOCATION_ADDED', 'VISIT_RECORDED', 'SESSION_STARTED', 'SESSION_ENDED');
-- CreateTable
CREATE TABLE "tracking_sessions" (
"id" TEXT NOT NULL,
"userId" TEXT NOT NULL,
"canvassSessionId" TEXT,
"startedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"endedAt" TIMESTAMP(3),
"isActive" BOOLEAN NOT NULL DEFAULT true,
"totalPoints" INTEGER NOT NULL DEFAULT 0,
"totalDistanceM" DOUBLE PRECISION NOT NULL DEFAULT 0,
"lastLatitude" DECIMAL(10,8),
"lastLongitude" DECIMAL(11,8),
"lastRecordedAt" TIMESTAMP(3),
CONSTRAINT "tracking_sessions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "track_points" (
"id" TEXT NOT NULL,
"trackingSessionId" TEXT NOT NULL,
"latitude" DECIMAL(10,8) NOT NULL,
"longitude" DECIMAL(11,8) NOT NULL,
"accuracy" DOUBLE PRECISION,
"recordedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"eventType" "TrackPointEvent",
CONSTRAINT "track_points_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "tracking_sessions_canvassSessionId_key" ON "tracking_sessions"("canvassSessionId");
-- CreateIndex
CREATE INDEX "tracking_sessions_userId_idx" ON "tracking_sessions"("userId");
-- CreateIndex
CREATE INDEX "tracking_sessions_isActive_idx" ON "tracking_sessions"("isActive");
-- CreateIndex
CREATE INDEX "tracking_sessions_isActive_lastRecordedAt_idx" ON "tracking_sessions"("isActive", "lastRecordedAt");
-- CreateIndex
CREATE INDEX "track_points_trackingSessionId_recordedAt_idx" ON "track_points"("trackingSessionId", "recordedAt");
-- CreateIndex
CREATE INDEX "track_points_recordedAt_idx" ON "track_points"("recordedAt");
-- AddForeignKey
ALTER TABLE "tracking_sessions" ADD CONSTRAINT "tracking_sessions_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tracking_sessions" ADD CONSTRAINT "tracking_sessions_canvassSessionId_fkey" FOREIGN KEY ("canvassSessionId") REFERENCES "canvass_sessions"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "track_points" ADD CONSTRAINT "track_points_trackingSessionId_fkey" FOREIGN KEY ("trackingSessionId") REFERENCES "tracking_sessions"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -1,8 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN IF NOT EXISTS "smtpHost" TEXT NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS "smtpPort" INTEGER NOT NULL DEFAULT 0,
ADD COLUMN IF NOT EXISTS "smtpUser" TEXT NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS "smtpPass" TEXT NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS "smtpFromAddress" TEXT NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS "emailTestMode" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN IF NOT EXISTS "testEmailRecipient" TEXT NOT NULL DEFAULT '';

View File

@ -1,4 +0,0 @@
-- AlterEnum: Add GOOGLE to GeocodeProvider enum
-- This enables Google Maps API integration for Phase 2 geocoding improvements
ALTER TYPE "GeocodeProvider" ADD VALUE IF NOT EXISTS 'GOOGLE' BEFORE 'MAPBOX';

View File

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN IF NOT EXISTS "notifyAdminShiftCancellation" BOOLEAN NOT NULL DEFAULT true;

View File

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE "shifts" ADD COLUMN "gancioEventId" INTEGER;

View File

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN IF NOT EXISTS "enable_events" BOOLEAN NOT NULL DEFAULT false;

View File

@ -1,2 +0,0 @@
-- AlterEnum
ALTER TYPE "UserCreatedVia" ADD VALUE IF NOT EXISTS 'QUICK_JOIN_INVITE';

View File

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE "ads" ADD COLUMN "placements" JSONB DEFAULT '[]';

View File

@ -1,14 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "notifyVolunteerShiftThankYou" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "notify_volunteer_reengagement" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "reengagement_cooldown_days" INTEGER NOT NULL DEFAULT 30,
ADD COLUMN "reengagement_inactive_days" INTEGER NOT NULL DEFAULT 30;
-- AlterTable
ALTER TABLE "sms_conversations" ADD COLUMN "contactId" TEXT;
-- CreateIndex
CREATE INDEX "sms_conversations_contactId_idx" ON "sms_conversations"("contactId");
-- AddForeignKey
ALTER TABLE "sms_conversations" ADD CONSTRAINT "sms_conversations_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "contacts"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,5 +0,0 @@
-- AlterTable
ALTER TABLE "landing_pages" ADD COLUMN "listed" BOOLEAN NOT NULL DEFAULT false;
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "homepage_tagline" TEXT;

View File

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "enable_social" BOOLEAN NOT NULL DEFAULT false;

View File

@ -1,3 +0,0 @@
-- AlterTable
ALTER TABLE "notification_preferences" ADD COLUMN "digest_frequency" TEXT NOT NULL DEFAULT 'none',
ADD COLUMN "last_digest_sent_at" TIMESTAMP(3);

View File

@ -1,38 +0,0 @@
-- CreateEnum
CREATE TYPE "SocialGroupType" AS ENUM ('SHIFT_TEAM', 'CAMPAIGN_TEAM', 'CUSTOM');
-- CreateTable
CREATE TABLE "social_groups" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"type" "SocialGroupType" NOT NULL,
"reference_id" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "social_groups_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "social_group_members" (
"id" TEXT NOT NULL,
"group_id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"joined_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "social_group_members_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "idx_social_groups_type_ref" ON "social_groups"("type", "reference_id");
-- CreateIndex
CREATE INDEX "idx_social_group_members_user" ON "social_group_members"("user_id");
-- CreateIndex
CREATE UNIQUE INDEX "idx_social_group_members_unique" ON "social_group_members"("group_id", "user_id");
-- AddForeignKey
ALTER TABLE "social_group_members" ADD CONSTRAINT "social_group_members_group_id_fkey" FOREIGN KEY ("group_id") REFERENCES "social_groups"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "social_group_members" ADD CONSTRAINT "social_group_members_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "enable_meet" BOOLEAN NOT NULL DEFAULT false;

View File

@ -1,25 +0,0 @@
-- CreateTable
CREATE TABLE "meetings" (
"id" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"jitsi_room" TEXT NOT NULL,
"is_active" BOOLEAN NOT NULL DEFAULT true,
"created_by_user_id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
"start_time" TIMESTAMP(3),
"end_time" TIMESTAMP(3),
CONSTRAINT "meetings_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "meetings_slug_key" ON "meetings"("slug");
-- CreateIndex
CREATE UNIQUE INDEX "meetings_jitsi_room_key" ON "meetings"("jitsi_room");
-- AddForeignKey
ALTER TABLE "meetings" ADD CONSTRAINT "meetings_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -1,20 +0,0 @@
-- AlterEnum
ALTER TYPE "NotificationType" ADD VALUE 'group_call';
-- AlterTable
ALTER TABLE "shifts" ADD COLUMN "meetingId" TEXT;
-- AlterTable
ALTER TABLE "social_groups" ADD COLUMN "meeting_id" TEXT;
-- CreateIndex
CREATE UNIQUE INDEX "shifts_meetingId_key" ON "shifts"("meetingId");
-- CreateIndex
CREATE UNIQUE INDEX "social_groups_meeting_id_key" ON "social_groups"("meeting_id");
-- AddForeignKey
ALTER TABLE "shifts" ADD CONSTRAINT "shifts_meetingId_fkey" FOREIGN KEY ("meetingId") REFERENCES "meetings"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "social_groups" ADD CONSTRAINT "social_groups_meeting_id_fkey" FOREIGN KEY ("meeting_id") REFERENCES "meetings"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,5 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "sms_shift_reminder_hours" INTEGER NOT NULL DEFAULT 24,
ADD COLUMN "sms_shift_reminders" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "sms_shift_signup_confirm" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "sms_volunteer_welcome" BOOLEAN NOT NULL DEFAULT false;

View File

@ -1,127 +0,0 @@
-- CreateEnum
CREATE TYPE "SchedulingPollStatus" AS ENUM ('OPEN', 'CLOSED', 'FINALIZED', 'CANCELLED');
-- CreateEnum
CREATE TYPE "PollVoteValue" AS ENUM ('YES', 'IF_NEED_BE', 'NO');
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "enable_meeting_planner" BOOLEAN NOT NULL DEFAULT false;
-- CreateTable
CREATE TABLE "scheduling_polls" (
"id" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"location" TEXT,
"status" "SchedulingPollStatus" NOT NULL DEFAULT 'OPEN',
"timezone" TEXT NOT NULL DEFAULT 'America/Edmonton',
"finalized_option_id" TEXT,
"converted_shift_id" TEXT,
"converted_gancio_event_id" INTEGER,
"voting_deadline" TIMESTAMP(3),
"allow_anonymous" BOOLEAN NOT NULL DEFAULT true,
"notify_on_vote" BOOLEAN NOT NULL DEFAULT true,
"created_by_user_id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "scheduling_polls_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "scheduling_poll_options" (
"id" TEXT NOT NULL,
"poll_id" TEXT NOT NULL,
"date" DATE NOT NULL,
"start_time" TEXT NOT NULL,
"end_time" TEXT NOT NULL,
"sort_order" INTEGER NOT NULL DEFAULT 0,
CONSTRAINT "scheduling_poll_options_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "scheduling_poll_votes" (
"id" TEXT NOT NULL,
"poll_id" TEXT NOT NULL,
"option_id" TEXT NOT NULL,
"user_id" TEXT,
"voter_name" TEXT NOT NULL,
"voter_email" TEXT,
"voter_token" TEXT,
"value" "PollVoteValue" NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "scheduling_poll_votes_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "scheduling_poll_comments" (
"id" TEXT NOT NULL,
"poll_id" TEXT NOT NULL,
"user_id" TEXT,
"author_name" TEXT NOT NULL,
"content" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "scheduling_poll_comments_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "scheduling_polls_slug_key" ON "scheduling_polls"("slug");
-- CreateIndex
CREATE UNIQUE INDEX "scheduling_polls_finalized_option_id_key" ON "scheduling_polls"("finalized_option_id");
-- CreateIndex
CREATE UNIQUE INDEX "scheduling_polls_converted_shift_id_key" ON "scheduling_polls"("converted_shift_id");
-- CreateIndex
CREATE INDEX "scheduling_polls_created_by_user_id_idx" ON "scheduling_polls"("created_by_user_id");
-- CreateIndex
CREATE INDEX "scheduling_polls_status_idx" ON "scheduling_polls"("status");
-- CreateIndex
CREATE INDEX "scheduling_poll_options_poll_id_idx" ON "scheduling_poll_options"("poll_id");
-- CreateIndex
CREATE INDEX "scheduling_poll_votes_poll_id_idx" ON "scheduling_poll_votes"("poll_id");
-- CreateIndex
CREATE UNIQUE INDEX "scheduling_poll_votes_option_id_user_id_key" ON "scheduling_poll_votes"("option_id", "user_id");
-- CreateIndex
CREATE UNIQUE INDEX "scheduling_poll_votes_option_id_voter_token_key" ON "scheduling_poll_votes"("option_id", "voter_token");
-- CreateIndex
CREATE INDEX "scheduling_poll_comments_poll_id_idx" ON "scheduling_poll_comments"("poll_id");
-- AddForeignKey
ALTER TABLE "scheduling_polls" ADD CONSTRAINT "scheduling_polls_finalized_option_id_fkey" FOREIGN KEY ("finalized_option_id") REFERENCES "scheduling_poll_options"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "scheduling_polls" ADD CONSTRAINT "scheduling_polls_converted_shift_id_fkey" FOREIGN KEY ("converted_shift_id") REFERENCES "shifts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "scheduling_polls" ADD CONSTRAINT "scheduling_polls_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "scheduling_poll_options" ADD CONSTRAINT "scheduling_poll_options_poll_id_fkey" FOREIGN KEY ("poll_id") REFERENCES "scheduling_polls"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "scheduling_poll_votes" ADD CONSTRAINT "scheduling_poll_votes_poll_id_fkey" FOREIGN KEY ("poll_id") REFERENCES "scheduling_polls"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "scheduling_poll_votes" ADD CONSTRAINT "scheduling_poll_votes_option_id_fkey" FOREIGN KEY ("option_id") REFERENCES "scheduling_poll_options"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "scheduling_poll_votes" ADD CONSTRAINT "scheduling_poll_votes_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "scheduling_poll_comments" ADD CONSTRAINT "scheduling_poll_comments_poll_id_fkey" FOREIGN KEY ("poll_id") REFERENCES "scheduling_polls"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "scheduling_poll_comments" ADD CONSTRAINT "scheduling_poll_comments_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,249 +0,0 @@
-- CreateEnum
CREATE TYPE "ImpactStoryType" AS ENUM ('MILESTONE', 'VICTORY', 'RESPONSE', 'CUSTOM');
-- CreateEnum
CREATE TYPE "ImpactStoryStatus" AS ENUM ('DRAFT', 'PUBLISHED', 'ARCHIVED');
-- CreateEnum
CREATE TYPE "SpotlightStatus" AS ENUM ('NOMINATED', 'APPROVED', 'FEATURED', 'ARCHIVED');
-- CreateEnum
CREATE TYPE "ChallengeStatus" AS ENUM ('DRAFT', 'UPCOMING', 'ACTIVE', 'COMPLETED', 'CANCELLED');
-- CreateEnum
CREATE TYPE "ChallengeMetric" AS ENUM ('DOORS_KNOCKED', 'EMAILS_SENT', 'SHIFTS_ATTENDED', 'RESPONSES_SUBMITTED', 'REFERRALS_MADE');
-- AlterEnum
-- This migration adds more than one value to an enum.
-- With PostgreSQL versions 11 and earlier, this is not possible
-- in a single migration. This can be worked around by creating
-- multiple migrations, each migration adding only one value to
-- the enum.
ALTER TYPE "NotificationType" ADD VALUE 'impact_story';
ALTER TYPE "NotificationType" ADD VALUE 'referral_completed';
ALTER TYPE "NotificationType" ADD VALUE 'challenge_update';
-- AlterTable
ALTER TABLE "privacy_settings" ADD COLUMN "show_on_leaderboard" BOOLEAN DEFAULT true;
-- CreateTable
CREATE TABLE "invite_codes" (
"id" TEXT NOT NULL,
"code" TEXT NOT NULL,
"created_by_user_id" TEXT NOT NULL,
"max_uses" INTEGER NOT NULL DEFAULT 0,
"used_count" INTEGER NOT NULL DEFAULT 0,
"expires_at" TIMESTAMP(3),
"is_active" BOOLEAN NOT NULL DEFAULT true,
"note" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "invite_codes_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "referrals" (
"id" SERIAL NOT NULL,
"referrer_id" TEXT NOT NULL,
"referred_user_id" TEXT NOT NULL,
"invite_code_id" TEXT,
"referral_source" TEXT,
"completed_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "referrals_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "impact_stories" (
"id" TEXT NOT NULL,
"campaign_id" TEXT NOT NULL,
"type" "ImpactStoryType" NOT NULL,
"status" "ImpactStoryStatus" NOT NULL DEFAULT 'DRAFT',
"title" TEXT NOT NULL,
"body" TEXT NOT NULL,
"cover_image_url" TEXT,
"milestone_value" INTEGER,
"milestone_metric" TEXT,
"created_by_user_id" TEXT,
"published_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "impact_stories_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "campaign_milestones" (
"id" SERIAL NOT NULL,
"campaign_id" TEXT NOT NULL,
"metric" TEXT NOT NULL,
"threshold" INTEGER NOT NULL,
"reached_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"story_generated" BOOLEAN NOT NULL DEFAULT false,
CONSTRAINT "campaign_milestones_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "volunteer_spotlights" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"status" "SpotlightStatus" NOT NULL DEFAULT 'NOMINATED',
"headline" TEXT,
"story" TEXT,
"featured_month" TEXT,
"nominated_by_user_id" TEXT,
"approved_by_user_id" TEXT,
"approved_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "volunteer_spotlights_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "challenges" (
"id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"metric" "ChallengeMetric" NOT NULL,
"status" "ChallengeStatus" NOT NULL DEFAULT 'DRAFT',
"starts_at" TIMESTAMP(3) NOT NULL,
"ends_at" TIMESTAMP(3) NOT NULL,
"min_team_size" INTEGER NOT NULL DEFAULT 2,
"max_team_size" INTEGER NOT NULL DEFAULT 10,
"max_teams" INTEGER,
"created_by_user_id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "challenges_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "challenge_teams" (
"id" TEXT NOT NULL,
"challenge_id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"captain_user_id" TEXT NOT NULL,
"score" INTEGER NOT NULL DEFAULT 0,
"last_scored_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "challenge_teams_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "challenge_team_members" (
"id" SERIAL NOT NULL,
"team_id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"score" INTEGER NOT NULL DEFAULT 0,
"joined_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "challenge_team_members_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "invite_codes_code_key" ON "invite_codes"("code");
-- CreateIndex
CREATE INDEX "idx_invite_codes_code" ON "invite_codes"("code");
-- CreateIndex
CREATE INDEX "idx_invite_codes_created_by" ON "invite_codes"("created_by_user_id");
-- CreateIndex
CREATE UNIQUE INDEX "referrals_referred_user_id_key" ON "referrals"("referred_user_id");
-- CreateIndex
CREATE INDEX "idx_referrals_referrer" ON "referrals"("referrer_id");
-- CreateIndex
CREATE INDEX "idx_impact_stories_campaign" ON "impact_stories"("campaign_id");
-- CreateIndex
CREATE INDEX "idx_impact_stories_status" ON "impact_stories"("status");
-- CreateIndex
CREATE INDEX "idx_impact_stories_type" ON "impact_stories"("type");
-- CreateIndex
CREATE UNIQUE INDEX "campaign_milestones_campaign_id_metric_threshold_key" ON "campaign_milestones"("campaign_id", "metric", "threshold");
-- CreateIndex
CREATE INDEX "idx_volunteer_spotlights_user" ON "volunteer_spotlights"("user_id");
-- CreateIndex
CREATE INDEX "idx_volunteer_spotlights_status" ON "volunteer_spotlights"("status");
-- CreateIndex
CREATE INDEX "idx_volunteer_spotlights_month" ON "volunteer_spotlights"("featured_month");
-- CreateIndex
CREATE INDEX "idx_challenges_status" ON "challenges"("status");
-- CreateIndex
CREATE INDEX "idx_challenges_starts_at" ON "challenges"("starts_at");
-- CreateIndex
CREATE INDEX "idx_challenge_teams_challenge" ON "challenge_teams"("challenge_id");
-- CreateIndex
CREATE INDEX "idx_challenge_teams_score" ON "challenge_teams"("score");
-- CreateIndex
CREATE UNIQUE INDEX "challenge_teams_challenge_id_name_key" ON "challenge_teams"("challenge_id", "name");
-- CreateIndex
CREATE INDEX "idx_challenge_team_members_user" ON "challenge_team_members"("user_id");
-- CreateIndex
CREATE UNIQUE INDEX "challenge_team_members_team_id_user_id_key" ON "challenge_team_members"("team_id", "user_id");
-- AddForeignKey
ALTER TABLE "invite_codes" ADD CONSTRAINT "invite_codes_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "referrals" ADD CONSTRAINT "referrals_referrer_id_fkey" FOREIGN KEY ("referrer_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "referrals" ADD CONSTRAINT "referrals_referred_user_id_fkey" FOREIGN KEY ("referred_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "referrals" ADD CONSTRAINT "referrals_invite_code_id_fkey" FOREIGN KEY ("invite_code_id") REFERENCES "invite_codes"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "impact_stories" ADD CONSTRAINT "impact_stories_campaign_id_fkey" FOREIGN KEY ("campaign_id") REFERENCES "campaigns"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "impact_stories" ADD CONSTRAINT "impact_stories_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "campaign_milestones" ADD CONSTRAINT "campaign_milestones_campaign_id_fkey" FOREIGN KEY ("campaign_id") REFERENCES "campaigns"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "volunteer_spotlights" ADD CONSTRAINT "volunteer_spotlights_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "volunteer_spotlights" ADD CONSTRAINT "volunteer_spotlights_nominated_by_user_id_fkey" FOREIGN KEY ("nominated_by_user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "volunteer_spotlights" ADD CONSTRAINT "volunteer_spotlights_approved_by_user_id_fkey" FOREIGN KEY ("approved_by_user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "challenges" ADD CONSTRAINT "challenges_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "challenge_teams" ADD CONSTRAINT "challenge_teams_challenge_id_fkey" FOREIGN KEY ("challenge_id") REFERENCES "challenges"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "challenge_teams" ADD CONSTRAINT "challenge_teams_captain_user_id_fkey" FOREIGN KEY ("captain_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "challenge_team_members" ADD CONSTRAINT "challenge_team_members_team_id_fkey" FOREIGN KEY ("team_id") REFERENCES "challenge_teams"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "challenge_team_members" ADD CONSTRAINT "challenge_team_members_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -1,176 +0,0 @@
-- CreateEnum
CREATE TYPE "TicketedEventStatus" AS ENUM ('DRAFT', 'PENDING_APPROVAL', 'PUBLISHED', 'CANCELLED', 'COMPLETED');
-- CreateEnum
CREATE TYPE "TicketedEventVisibility" AS ENUM ('PUBLIC', 'UNLISTED', 'PRIVATE');
-- CreateEnum
CREATE TYPE "TicketTierType" AS ENUM ('PAID', 'FREE', 'DONATION');
-- CreateEnum
CREATE TYPE "TicketStatus" AS ENUM ('VALID', 'CHECKED_IN', 'CANCELLED', 'REFUNDED');
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "enable_ticketed_events" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "require_event_approval" BOOLEAN NOT NULL DEFAULT true;
-- CreateTable
CREATE TABLE "ticketed_events" (
"id" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"rich_description" TEXT,
"date" DATE NOT NULL,
"start_time" TEXT NOT NULL,
"end_time" TEXT NOT NULL,
"doors_open_time" TEXT,
"venue_name" TEXT,
"venue_address" TEXT,
"latitude" DECIMAL(10,7),
"longitude" DECIMAL(10,7),
"status" "TicketedEventStatus" NOT NULL DEFAULT 'DRAFT',
"visibility" "TicketedEventVisibility" NOT NULL DEFAULT 'PUBLIC',
"invite_code" TEXT,
"cover_image_url" TEXT,
"max_attendees" INTEGER,
"current_attendees" INTEGER NOT NULL DEFAULT 0,
"gancio_event_id" INTEGER,
"created_by_user_id" TEXT NOT NULL,
"organizer_name" TEXT,
"organizer_email" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ticketed_events_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "ticket_tiers" (
"id" TEXT NOT NULL,
"event_id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT,
"tier_type" "TicketTierType" NOT NULL,
"price_cad" INTEGER NOT NULL DEFAULT 0,
"min_donation_cad" INTEGER,
"max_quantity" INTEGER,
"sold_count" INTEGER NOT NULL DEFAULT 0,
"max_per_order" INTEGER NOT NULL DEFAULT 10,
"sales_start_at" TIMESTAMP(3),
"sales_end_at" TIMESTAMP(3),
"sort_order" INTEGER NOT NULL DEFAULT 0,
"is_active" BOOLEAN NOT NULL DEFAULT true,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "ticket_tiers_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "tickets" (
"id" TEXT NOT NULL,
"ticket_code" TEXT NOT NULL,
"token_hash" TEXT NOT NULL,
"event_id" TEXT NOT NULL,
"tier_id" TEXT NOT NULL,
"order_id" TEXT,
"holder_email" TEXT NOT NULL,
"holder_name" TEXT,
"user_id" TEXT,
"status" "TicketStatus" NOT NULL DEFAULT 'VALID',
"checked_in_at" TIMESTAMP(3),
"checked_in_by_user_id" TEXT,
"issued_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "tickets_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "check_ins" (
"id" TEXT NOT NULL,
"ticket_id" TEXT NOT NULL,
"event_id" TEXT NOT NULL,
"checked_in_by_user_id" TEXT,
"method" TEXT NOT NULL,
"checked_in_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"notes" TEXT,
CONSTRAINT "check_ins_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "ticketed_events_slug_key" ON "ticketed_events"("slug");
-- CreateIndex
CREATE UNIQUE INDEX "ticketed_events_invite_code_key" ON "ticketed_events"("invite_code");
-- CreateIndex
CREATE INDEX "idx_ticketed_events_status" ON "ticketed_events"("status");
-- CreateIndex
CREATE INDEX "idx_ticketed_events_date" ON "ticketed_events"("date");
-- CreateIndex
CREATE INDEX "idx_ticketed_events_visibility" ON "ticketed_events"("visibility");
-- CreateIndex
CREATE INDEX "idx_ticketed_events_creator" ON "ticketed_events"("created_by_user_id");
-- CreateIndex
CREATE INDEX "idx_ticket_tiers_event" ON "ticket_tiers"("event_id");
-- CreateIndex
CREATE UNIQUE INDEX "tickets_ticket_code_key" ON "tickets"("ticket_code");
-- CreateIndex
CREATE UNIQUE INDEX "tickets_token_hash_key" ON "tickets"("token_hash");
-- CreateIndex
CREATE INDEX "idx_tickets_event" ON "tickets"("event_id");
-- CreateIndex
CREATE INDEX "idx_tickets_tier" ON "tickets"("tier_id");
-- CreateIndex
CREATE INDEX "idx_tickets_order" ON "tickets"("order_id");
-- CreateIndex
CREATE INDEX "idx_tickets_holder_email" ON "tickets"("holder_email");
-- CreateIndex
CREATE INDEX "idx_tickets_status" ON "tickets"("status");
-- CreateIndex
CREATE INDEX "idx_checkins_event" ON "check_ins"("event_id");
-- CreateIndex
CREATE INDEX "idx_checkins_ticket" ON "check_ins"("ticket_id");
-- AddForeignKey
ALTER TABLE "ticketed_events" ADD CONSTRAINT "ticketed_events_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "ticket_tiers" ADD CONSTRAINT "ticket_tiers_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "ticketed_events"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tickets" ADD CONSTRAINT "tickets_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "ticketed_events"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tickets" ADD CONSTRAINT "tickets_tier_id_fkey" FOREIGN KEY ("tier_id") REFERENCES "ticket_tiers"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tickets" ADD CONSTRAINT "tickets_order_id_fkey" FOREIGN KEY ("order_id") REFERENCES "orders"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "tickets" ADD CONSTRAINT "tickets_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "check_ins" ADD CONSTRAINT "check_ins_ticket_id_fkey" FOREIGN KEY ("ticket_id") REFERENCES "tickets"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "check_ins" ADD CONSTRAINT "check_ins_event_id_fkey" FOREIGN KEY ("event_id") REFERENCES "ticketed_events"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "check_ins" ADD CONSTRAINT "check_ins_checked_in_by_user_id_fkey" FOREIGN KEY ("checked_in_by_user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,12 +0,0 @@
-- CreateEnum
CREATE TYPE "EventFormat" AS ENUM ('IN_PERSON', 'ONLINE', 'HYBRID');
-- AlterTable
ALTER TABLE "ticketed_events" ADD COLUMN "event_format" "EventFormat" NOT NULL DEFAULT 'IN_PERSON',
ADD COLUMN "meeting_id" TEXT;
-- CreateIndex
CREATE UNIQUE INDEX "ticketed_events_meeting_id_key" ON "ticketed_events"("meeting_id");
-- AddForeignKey
ALTER TABLE "ticketed_events" ADD CONSTRAINT "ticketed_events_meeting_id_fkey" FOREIGN KEY ("meeting_id") REFERENCES "meetings"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,258 +0,0 @@
-- CreateEnum
CREATE TYPE "CalendarLayerType" AS ENUM ('SYSTEM', 'USER', 'EXTERNAL');
-- CreateEnum
CREATE TYPE "CalendarSystemType" AS ENUM ('SHIFTS', 'TICKETS', 'POLLS', 'PUBLIC_EVENTS');
-- CreateEnum
CREATE TYPE "CalendarVisibility" AS ENUM ('PRIVATE', 'FRIENDS', 'PUBLIC');
-- CreateEnum
CREATE TYPE "CalendarItemType" AS ENUM ('EVENT', 'TIME_BLOCK', 'REMINDER');
-- CreateEnum
CREATE TYPE "CalendarBusyStatus" AS ENUM ('BUSY', 'TENTATIVE', 'FREE');
-- CreateEnum
CREATE TYPE "CalendarShowDetailsTo" AS ENUM ('NOBODY', 'FRIENDS', 'EVERYONE');
-- CreateEnum
CREATE TYPE "CalendarItemSource" AS ENUM ('MANUAL', 'ICS_FEED');
-- CreateEnum
CREATE TYPE "CalendarRecurrenceFrequency" AS ENUM ('DAILY', 'WEEKLY', 'BIWEEKLY', 'MONTHLY');
-- CreateEnum
CREATE TYPE "CalendarFeedStatus" AS ENUM ('OK', 'ERROR', 'PENDING');
-- CreateEnum
CREATE TYPE "CalendarFeedInterval" AS ENUM ('FIFTEEN_MIN', 'HOURLY', 'SIX_HOUR', 'DAILY');
-- CreateEnum
CREATE TYPE "SharedViewType" AS ENUM ('MANUAL', 'ROLE_BASED');
-- CreateEnum
CREATE TYPE "SharedViewScope" AS ENUM ('MEMBERS', 'PUBLIC');
-- CreateEnum
CREATE TYPE "SharedViewMemberStatus" AS ENUM ('INVITED', 'ACCEPTED', 'DECLINED');
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "enable_social_calendar" BOOLEAN NOT NULL DEFAULT false;
-- CreateTable
CREATE TABLE "calendar_layers" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"layer_type" "CalendarLayerType" NOT NULL,
"system_type" "CalendarSystemType",
"color" TEXT NOT NULL DEFAULT '#1890ff',
"visibility" "CalendarVisibility" NOT NULL DEFAULT 'PRIVATE',
"is_enabled" BOOLEAN NOT NULL DEFAULT true,
"sort_order" INTEGER NOT NULL DEFAULT 0,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "calendar_layers_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "calendar_items" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"layer_id" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"date" DATE NOT NULL,
"start_time" TEXT NOT NULL,
"end_time" TEXT NOT NULL,
"is_all_day" BOOLEAN NOT NULL DEFAULT false,
"item_type" "CalendarItemType" NOT NULL DEFAULT 'EVENT',
"location" TEXT,
"color" TEXT,
"visibility" "CalendarVisibility",
"busy_status" "CalendarBusyStatus" NOT NULL DEFAULT 'BUSY',
"show_details_to" "CalendarShowDetailsTo" NOT NULL DEFAULT 'FRIENDS',
"recurrence_rule" JSONB,
"recurrence_end" TIMESTAMP(3),
"series_id" TEXT,
"is_exception" BOOLEAN NOT NULL DEFAULT false,
"source_type" "CalendarItemSource" NOT NULL DEFAULT 'MANUAL',
"source_id" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "calendar_items_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "calendar_feeds" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"url" TEXT NOT NULL,
"layer_id" TEXT NOT NULL,
"refresh_interval" "CalendarFeedInterval" NOT NULL DEFAULT 'HOURLY',
"last_fetched_at" TIMESTAMP(3),
"last_status" "CalendarFeedStatus" NOT NULL DEFAULT 'PENDING',
"last_error" TEXT,
"item_count" INTEGER NOT NULL DEFAULT 0,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "calendar_feeds_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "shared_calendar_views" (
"id" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT,
"owner_id" TEXT NOT NULL,
"view_type" "SharedViewType" NOT NULL DEFAULT 'MANUAL',
"auto_include_roles" JSONB,
"included_layer_types" JSONB NOT NULL DEFAULT '[]',
"share_scope" "SharedViewScope" NOT NULL DEFAULT 'MEMBERS',
"share_token" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "shared_calendar_views_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "shared_calendar_members" (
"id" TEXT NOT NULL,
"view_id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"status" "SharedViewMemberStatus" NOT NULL DEFAULT 'INVITED',
"color" TEXT NOT NULL DEFAULT '#1890ff',
"joined_at" TIMESTAMP(3),
CONSTRAINT "shared_calendar_members_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "shared_view_comments" (
"id" TEXT NOT NULL,
"view_id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"item_date" TEXT NOT NULL,
"item_id" TEXT,
"content" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "shared_view_comments_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "shared_view_reactions" (
"id" TEXT NOT NULL,
"view_id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"item_id" TEXT NOT NULL,
"emoji" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "shared_view_reactions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "calendar_export_tokens" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"token" TEXT NOT NULL,
"include_personal" BOOLEAN NOT NULL DEFAULT false,
"include_layers" JSONB,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "calendar_export_tokens_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "idx_calendar_layers_user" ON "calendar_layers"("user_id");
-- CreateIndex
CREATE UNIQUE INDEX "idx_calendar_layers_user_system" ON "calendar_layers"("user_id", "system_type");
-- CreateIndex
CREATE INDEX "idx_calendar_items_user_date" ON "calendar_items"("user_id", "date");
-- CreateIndex
CREATE INDEX "idx_calendar_items_layer_date" ON "calendar_items"("layer_id", "date");
-- CreateIndex
CREATE INDEX "idx_calendar_items_series" ON "calendar_items"("series_id");
-- CreateIndex
CREATE INDEX "idx_calendar_items_source" ON "calendar_items"("source_type", "source_id");
-- CreateIndex
CREATE UNIQUE INDEX "calendar_feeds_layer_id_key" ON "calendar_feeds"("layer_id");
-- CreateIndex
CREATE INDEX "idx_calendar_feeds_user" ON "calendar_feeds"("user_id");
-- CreateIndex
CREATE UNIQUE INDEX "shared_calendar_views_share_token_key" ON "shared_calendar_views"("share_token");
-- CreateIndex
CREATE INDEX "idx_shared_views_owner" ON "shared_calendar_views"("owner_id");
-- CreateIndex
CREATE INDEX "idx_shared_members_user" ON "shared_calendar_members"("user_id");
-- CreateIndex
CREATE UNIQUE INDEX "idx_shared_members_view_user" ON "shared_calendar_members"("view_id", "user_id");
-- CreateIndex
CREATE INDEX "idx_shared_comments_view_date" ON "shared_view_comments"("view_id", "item_date");
-- CreateIndex
CREATE UNIQUE INDEX "idx_shared_reactions_unique" ON "shared_view_reactions"("view_id", "user_id", "item_id", "emoji");
-- CreateIndex
CREATE UNIQUE INDEX "calendar_export_tokens_token_key" ON "calendar_export_tokens"("token");
-- CreateIndex
CREATE INDEX "idx_calendar_export_tokens_user" ON "calendar_export_tokens"("user_id");
-- AddForeignKey
ALTER TABLE "calendar_layers" ADD CONSTRAINT "calendar_layers_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "calendar_items" ADD CONSTRAINT "calendar_items_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "calendar_items" ADD CONSTRAINT "calendar_items_layer_id_fkey" FOREIGN KEY ("layer_id") REFERENCES "calendar_layers"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "calendar_feeds" ADD CONSTRAINT "calendar_feeds_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "calendar_feeds" ADD CONSTRAINT "calendar_feeds_layer_id_fkey" FOREIGN KEY ("layer_id") REFERENCES "calendar_layers"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "shared_calendar_views" ADD CONSTRAINT "shared_calendar_views_owner_id_fkey" FOREIGN KEY ("owner_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "shared_calendar_members" ADD CONSTRAINT "shared_calendar_members_view_id_fkey" FOREIGN KEY ("view_id") REFERENCES "shared_calendar_views"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "shared_calendar_members" ADD CONSTRAINT "shared_calendar_members_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "shared_view_comments" ADD CONSTRAINT "shared_view_comments_view_id_fkey" FOREIGN KEY ("view_id") REFERENCES "shared_calendar_views"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "shared_view_comments" ADD CONSTRAINT "shared_view_comments_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "shared_view_reactions" ADD CONSTRAINT "shared_view_reactions_view_id_fkey" FOREIGN KEY ("view_id") REFERENCES "shared_calendar_views"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "shared_view_reactions" ADD CONSTRAINT "shared_view_reactions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "calendar_export_tokens" ADD CONSTRAINT "calendar_export_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -1,11 +0,0 @@
-- AlterEnum
-- This migration adds more than one value to an enum.
-- With PostgreSQL versions 11 and earlier, this is not possible
-- in a single migration. This can be worked around by creating
-- multiple migrations, each migration adding only one value to
-- the enum.
ALTER TYPE "NotificationType" ADD VALUE 'shared_view_invite';
ALTER TYPE "NotificationType" ADD VALUE 'shared_view_accepted';
ALTER TYPE "NotificationType" ADD VALUE 'calendar_event_invite';

View File

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE "scheduling_polls" ADD COLUMN "is_private" BOOLEAN NOT NULL DEFAULT false;

View File

@ -1,5 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "auto_upgrade_pull_services" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "auto_upgrade_schedule" TEXT NOT NULL DEFAULT 'daily-3am',
ADD COLUMN "enable_auto_upgrade" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "notify_admin_auto_upgrade" BOOLEAN NOT NULL DEFAULT true;

View File

@ -1,7 +0,0 @@
-- AlterEnum
ALTER TYPE "UserRole" ADD VALUE IF NOT EXISTS 'BROADCAST_ADMIN';
ALTER TYPE "UserRole" ADD VALUE IF NOT EXISTS 'CONTENT_ADMIN';
ALTER TYPE "UserRole" ADD VALUE IF NOT EXISTS 'MEDIA_ADMIN';
ALTER TYPE "UserRole" ADD VALUE IF NOT EXISTS 'PAYMENTS_ADMIN';
ALTER TYPE "UserRole" ADD VALUE IF NOT EXISTS 'EVENTS_ADMIN';
ALTER TYPE "UserRole" ADD VALUE IF NOT EXISTS 'SOCIAL_ADMIN';

View File

@ -1,16 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN IF NOT EXISTS "enable_docs_collaboration" BOOLEAN NOT NULL DEFAULT false;
-- CreateTable
CREATE TABLE IF NOT EXISTS "doc_collab_state" (
"id" TEXT NOT NULL,
"document_id" TEXT NOT NULL,
"state" BYTEA NOT NULL,
"updated_at" TIMESTAMP(3) NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "doc_collab_state_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX IF NOT EXISTS "doc_collab_state_document_id_key" ON "doc_collab_state"("document_id");

View File

@ -1,16 +0,0 @@
-- AlterEnum
-- Add operational notification types for shift/canvass/reengagement notifications
ALTER TYPE "NotificationType" ADD VALUE 'shift_signup_confirmed';
ALTER TYPE "NotificationType" ADD VALUE 'shift_reminder';
ALTER TYPE "NotificationType" ADD VALUE 'shift_cancelled';
ALTER TYPE "NotificationType" ADD VALUE 'canvass_session_summary';
ALTER TYPE "NotificationType" ADD VALUE 'reengagement';
-- AlterTable: Add campaign attribution to donation orders
ALTER TABLE "orders" ADD COLUMN "influence_campaign_id" TEXT;
-- CreateIndex
CREATE INDEX "idx_orders_influence_campaign" ON "orders"("influence_campaign_id");
-- AddForeignKey
ALTER TABLE "orders" ADD CONSTRAINT "orders_influence_campaign_id_fkey" FOREIGN KEY ("influence_campaign_id") REFERENCES "campaigns"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,12 +0,0 @@
-- 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;

View File

@ -1,160 +0,0 @@
-- 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;

View File

@ -1,3 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "gitea_registry_url" TEXT NOT NULL DEFAULT 'gitea.bnkops.com/admin',
ADD COLUMN "use_registry_for_upgrade" BOOLEAN NOT NULL DEFAULT false;

View File

@ -1,76 +0,0 @@
-- CreateEnum
CREATE TYPE "DocShareLinkStatus" AS ENUM ('ACTIVE', 'REVOKED', 'EXPIRED');
-- AlterEnum
ALTER TYPE "ContactActivityType" ADD VALUE IF NOT EXISTS 'POLL_VOTED';
-- CreateTable
CREATE TABLE "doc_access_policies" (
"id" TEXT NOT NULL,
"document_path" TEXT NOT NULL,
"is_directory" BOOLEAN NOT NULL DEFAULT false,
"allowed_editors" JSONB NOT NULL DEFAULT '[]',
"created_by_id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "doc_access_policies_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "doc_share_links" (
"id" TEXT NOT NULL,
"document_path" TEXT NOT NULL,
"share_token" TEXT NOT NULL,
"status" "DocShareLinkStatus" NOT NULL DEFAULT 'ACTIVE',
"can_edit" BOOLEAN NOT NULL DEFAULT true,
"expires_at" TIMESTAMP(3),
"max_uses" INTEGER,
"use_count" INTEGER NOT NULL DEFAULT 0,
"guest_name" TEXT,
"created_by_id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "doc_share_links_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "doc_watches" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"file_path" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "doc_watches_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "doc_access_policies_document_path_key" ON "doc_access_policies"("document_path");
-- CreateIndex
CREATE INDEX "doc_access_policies_created_by_id_idx" ON "doc_access_policies"("created_by_id");
-- CreateIndex
CREATE UNIQUE INDEX "doc_share_links_share_token_key" ON "doc_share_links"("share_token");
-- CreateIndex
CREATE INDEX "doc_share_links_document_path_idx" ON "doc_share_links"("document_path");
-- CreateIndex
CREATE INDEX "doc_share_links_created_by_id_idx" ON "doc_share_links"("created_by_id");
-- CreateIndex
CREATE INDEX "doc_watches_file_path_idx" ON "doc_watches"("file_path");
-- CreateIndex
CREATE UNIQUE INDEX "doc_watches_user_id_file_path_key" ON "doc_watches"("user_id", "file_path");
-- AddForeignKey
ALTER TABLE "doc_access_policies" ADD CONSTRAINT "doc_access_policies_created_by_id_fkey" FOREIGN KEY ("created_by_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "doc_share_links" ADD CONSTRAINT "doc_share_links_created_by_id_fkey" FOREIGN KEY ("created_by_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "doc_watches" ADD CONSTRAINT "doc_watches_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -1,3 +0,0 @@
-- AlterTable: Add reserved_count for ticket overselling prevention
-- Tracks pending Stripe checkout sessions to prevent concurrent overselling
ALTER TABLE "ticket_tiers" ADD COLUMN "reserved_count" INTEGER NOT NULL DEFAULT 0;

View File

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "gitea_setup_complete" BOOLEAN NOT NULL DEFAULT false;

View File

@ -1,168 +0,0 @@
-- CreateEnum
CREATE TYPE "StrawPollType" AS ENUM ('SINGLE_CHOICE', 'YES_NO_ABSTAIN');
-- CreateEnum
CREATE TYPE "StrawPollStatus" AS ENUM ('DRAFT', 'ACTIVE', 'CLOSED', 'ARCHIVED');
-- CreateEnum
CREATE TYPE "StrawPollIdentityMode" AS ENUM ('ANONYMOUS', 'TOKEN_GATED', 'AUTHENTICATED', 'MIXED');
-- CreateEnum
CREATE TYPE "StrawPollResultVisibility" AS ENUM ('LIVE', 'AFTER_VOTE', 'AFTER_CLOSE', 'CREATOR_ONLY', 'PUBLIC_ALWAYS');
-- AlterEnum
-- This migration adds more than one value to an enum.
-- With PostgreSQL versions 11 and earlier, this is not possible
-- in a single migration. This can be worked around by creating
-- multiple migrations, each migration adding only one value to
-- the enum.
ALTER TYPE "NotificationType" ADD VALUE 'poll_closed';
ALTER TYPE "NotificationType" ADD VALUE 'poll_results_available';
ALTER TYPE "NotificationType" ADD VALUE 'poll_challenge';
-- AlterEnum
ALTER TYPE "UserRole" ADD VALUE 'POLLS_ADMIN';
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "enable_polls" BOOLEAN NOT NULL DEFAULT false;
-- CreateTable
CREATE TABLE "straw_polls" (
"id" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"title" VARCHAR(200) NOT NULL,
"description" TEXT,
"type" "StrawPollType" NOT NULL,
"status" "StrawPollStatus" NOT NULL DEFAULT 'DRAFT',
"identity_mode" "StrawPollIdentityMode" NOT NULL DEFAULT 'ANONYMOUS',
"result_visibility" "StrawPollResultVisibility" NOT NULL DEFAULT 'LIVE',
"allow_comments" BOOLEAN NOT NULL DEFAULT true,
"closes_at" TIMESTAMP(3),
"close_threshold" INTEGER,
"auto_close_job_id" TEXT,
"is_private" BOOLEAN NOT NULL DEFAULT false,
"created_by_user_id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "straw_polls_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "straw_poll_options" (
"id" TEXT NOT NULL,
"poll_id" TEXT NOT NULL,
"label" VARCHAR(500) NOT NULL,
"sort_order" INTEGER NOT NULL DEFAULT 0,
CONSTRAINT "straw_poll_options_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "straw_poll_votes" (
"id" TEXT NOT NULL,
"poll_id" TEXT NOT NULL,
"option_id" TEXT NOT NULL,
"user_id" TEXT,
"voter_name" VARCHAR(100),
"voter_token" TEXT,
"voter_ip" TEXT,
"contact_id" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "straw_poll_votes_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "straw_poll_comments" (
"id" TEXT NOT NULL,
"poll_id" TEXT NOT NULL,
"user_id" TEXT,
"author_name" VARCHAR(100) NOT NULL,
"content" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "straw_poll_comments_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "straw_poll_challenges" (
"id" TEXT NOT NULL,
"poll_id" TEXT NOT NULL,
"challenger_user_id" TEXT NOT NULL,
"challenged_user_id" TEXT NOT NULL,
"completed_at" TIMESTAMP(3),
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "straw_poll_challenges_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "straw_polls_slug_key" ON "straw_polls"("slug");
-- CreateIndex
CREATE INDEX "straw_polls_created_by_user_id_idx" ON "straw_polls"("created_by_user_id");
-- CreateIndex
CREATE INDEX "straw_polls_status_idx" ON "straw_polls"("status");
-- CreateIndex
CREATE INDEX "straw_poll_options_poll_id_idx" ON "straw_poll_options"("poll_id");
-- CreateIndex
CREATE INDEX "straw_poll_votes_poll_id_idx" ON "straw_poll_votes"("poll_id");
-- CreateIndex
CREATE INDEX "straw_poll_votes_option_id_idx" ON "straw_poll_votes"("option_id");
-- CreateIndex
CREATE UNIQUE INDEX "straw_poll_votes_poll_id_user_id_key" ON "straw_poll_votes"("poll_id", "user_id");
-- CreateIndex
CREATE UNIQUE INDEX "straw_poll_votes_poll_id_voter_token_key" ON "straw_poll_votes"("poll_id", "voter_token");
-- CreateIndex
CREATE UNIQUE INDEX "straw_poll_votes_poll_id_voter_ip_key" ON "straw_poll_votes"("poll_id", "voter_ip");
-- CreateIndex
CREATE INDEX "straw_poll_comments_poll_id_idx" ON "straw_poll_comments"("poll_id");
-- CreateIndex
CREATE UNIQUE INDEX "straw_poll_challenges_poll_id_challenger_user_id_challenged_key" ON "straw_poll_challenges"("poll_id", "challenger_user_id", "challenged_user_id");
-- AddForeignKey
ALTER TABLE "straw_polls" ADD CONSTRAINT "straw_polls_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_options" ADD CONSTRAINT "straw_poll_options_poll_id_fkey" FOREIGN KEY ("poll_id") REFERENCES "straw_polls"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_votes" ADD CONSTRAINT "straw_poll_votes_poll_id_fkey" FOREIGN KEY ("poll_id") REFERENCES "straw_polls"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_votes" ADD CONSTRAINT "straw_poll_votes_option_id_fkey" FOREIGN KEY ("option_id") REFERENCES "straw_poll_options"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_votes" ADD CONSTRAINT "straw_poll_votes_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_votes" ADD CONSTRAINT "straw_poll_votes_contact_id_fkey" FOREIGN KEY ("contact_id") REFERENCES "contacts"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_comments" ADD CONSTRAINT "straw_poll_comments_poll_id_fkey" FOREIGN KEY ("poll_id") REFERENCES "straw_polls"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_comments" ADD CONSTRAINT "straw_poll_comments_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_challenges" ADD CONSTRAINT "straw_poll_challenges_poll_id_fkey" FOREIGN KEY ("poll_id") REFERENCES "straw_polls"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_challenges" ADD CONSTRAINT "straw_poll_challenges_challenger_user_id_fkey" FOREIGN KEY ("challenger_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "straw_poll_challenges" ADD CONSTRAINT "straw_poll_challenges_challenged_user_id_fkey" FOREIGN KEY ("challenged_user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;

View File

@ -1,18 +0,0 @@
-- AlterEnum: Add DISPUTED status for chargeback tracking
ALTER TYPE "OrderStatus" ADD VALUE 'DISPUTED';
-- DropForeignKey: Make paymentId optional on audit log
ALTER TABLE "payment_audit_log" DROP CONSTRAINT "payment_audit_log_payment_id_fkey";
-- AlterTable: Add orderId column, make paymentId nullable
ALTER TABLE "payment_audit_log" ADD COLUMN "order_id" TEXT,
ALTER COLUMN "payment_id" DROP NOT NULL;
-- CreateIndex
CREATE INDEX "idx_payment_audit_log_order" ON "payment_audit_log"("order_id");
-- AddForeignKey (nullable)
ALTER TABLE "payment_audit_log" ADD CONSTRAINT "payment_audit_log_payment_id_fkey" FOREIGN KEY ("payment_id") REFERENCES "payments"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "payment_audit_log" ADD CONSTRAINT "payment_audit_log_order_id_fkey" FOREIGN KEY ("order_id") REFERENCES "orders"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,4 +0,0 @@
-- Add SHIFT, MEETING, TICKETED_EVENT to CalendarItemSource enum
ALTER TYPE "CalendarItemSource" ADD VALUE IF NOT EXISTS 'SHIFT';
ALTER TYPE "CalendarItemSource" ADD VALUE IF NOT EXISTS 'MEETING';
ALTER TYPE "CalendarItemSource" ADD VALUE IF NOT EXISTS 'TICKETED_EVENT';

View File

@ -1,39 +0,0 @@
-- AlterEnum
ALTER TYPE "UserRole" ADD VALUE 'ANALYTICS_ADMIN';
-- AlterTable
ALTER TABLE "docs_page_views" ADD COLUMN "city" VARCHAR(100),
ADD COLUMN "country" VARCHAR(2),
ADD COLUMN "ip_address_hash" VARCHAR(64),
ADD COLUMN "latitude" DOUBLE PRECISION,
ADD COLUMN "longitude" DOUBLE PRECISION,
ADD COLUMN "region" VARCHAR(100);
-- AlterTable
ALTER TABLE "photo_views" ADD COLUMN "city" VARCHAR(100),
ADD COLUMN "country" VARCHAR(2),
ADD COLUMN "latitude" DOUBLE PRECISION,
ADD COLUMN "longitude" DOUBLE PRECISION,
ADD COLUMN "region" VARCHAR(100);
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "analytics_geo_enabled" BOOLEAN NOT NULL DEFAULT true,
ADD COLUMN "analytics_retention_days" INTEGER NOT NULL DEFAULT 90,
ADD COLUMN "enable_analytics" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "track_authenticated_users" BOOLEAN NOT NULL DEFAULT true;
-- AlterTable
ALTER TABLE "video_views" ADD COLUMN "city" VARCHAR(100),
ADD COLUMN "country" VARCHAR(2),
ADD COLUMN "latitude" DOUBLE PRECISION,
ADD COLUMN "longitude" DOUBLE PRECISION,
ADD COLUMN "region" VARCHAR(100);
-- CreateIndex
CREATE INDEX "docs_page_views_country_createdAt_idx" ON "docs_page_views"("country", "createdAt");
-- CreateIndex
CREATE INDEX "idx_photo_views_country_date" ON "photo_views"("country", "viewed_at");
-- CreateIndex
CREATE INDEX "idx_video_views_country_created" ON "video_views"("country", "created_at");

View File

@ -1,131 +0,0 @@
-- CreateEnum
CREATE TYPE "PetitionStatus" AS ENUM ('DRAFT', 'ACTIVE', 'PAUSED', 'CLOSED', 'ARCHIVED');
-- CreateEnum
CREATE TYPE "PetitionSignatureStatus" AS ENUM ('PENDING_VERIFICATION', 'VERIFIED', 'UNVERIFIED', 'REJECTED');
-- AlterEnum
ALTER TYPE "ContactActivityType" ADD VALUE 'PETITION_SIGNED';
-- AlterEnum
ALTER TYPE "ContactSource" ADD VALUE 'PETITION_SIGNER';
-- AlterTable
ALTER TABLE "site_settings" ADD COLUMN "enable_petitions" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "notify_admin_petition_milestone" BOOLEAN NOT NULL DEFAULT false;
-- CreateTable
CREATE TABLE "petitions" (
"id" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"signatureGoal" INTEGER,
"showProgress" BOOLEAN NOT NULL DEFAULT true,
"showSignatureCount" BOOLEAN NOT NULL DEFAULT true,
"showSignerNames" BOOLEAN NOT NULL DEFAULT true,
"signatureCountOffset" INTEGER NOT NULL DEFAULT 0,
"requireName" BOOLEAN NOT NULL DEFAULT true,
"requireEmail" BOOLEAN NOT NULL DEFAULT true,
"requirePostalCode" BOOLEAN NOT NULL DEFAULT false,
"requirePhone" BOOLEAN NOT NULL DEFAULT false,
"allowComment" BOOLEAN NOT NULL DEFAULT true,
"commentLabel" TEXT,
"requireEmailConfirmation" BOOLEAN NOT NULL DEFAULT false,
"confirmationEmailSubject" TEXT,
"confirmationEmailBody" TEXT,
"coverPhoto" TEXT,
"callToAction" TEXT,
"thankYouMessage" TEXT,
"highlightPetition" BOOLEAN NOT NULL DEFAULT false,
"linkedCampaignId" TEXT,
"status" "PetitionStatus" NOT NULL DEFAULT 'DRAFT',
"isUserGenerated" BOOLEAN NOT NULL DEFAULT false,
"moderationStatus" "CampaignModerationStatus",
"rejectionReason" TEXT,
"moderationNotes" TEXT,
"createdByUserId" TEXT,
"createdByUserEmail" TEXT,
"createdByUserName" TEXT,
"reviewedByUserId" TEXT,
"reviewedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "petitions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "petition_signatures" (
"id" TEXT NOT NULL,
"petitionId" TEXT NOT NULL,
"signerName" TEXT,
"signerEmail" TEXT,
"signerPostalCode" TEXT,
"signerPhone" TEXT,
"signerComment" TEXT,
"isAnonymous" BOOLEAN NOT NULL DEFAULT false,
"displayName" TEXT,
"status" "PetitionSignatureStatus" NOT NULL DEFAULT 'UNVERIFIED',
"verificationToken" TEXT,
"verificationSentAt" TIMESTAMP(3),
"verifiedAt" TIMESTAMP(3),
"contactId" TEXT,
"signerIp" TEXT,
"geoCountry" TEXT,
"geoRegion" TEXT,
"geoCity" TEXT,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "petition_signatures_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "petitions_slug_key" ON "petitions"("slug");
-- CreateIndex
CREATE INDEX "petitions_status_idx" ON "petitions"("status");
-- CreateIndex
CREATE INDEX "petitions_isUserGenerated_idx" ON "petitions"("isUserGenerated");
-- CreateIndex
CREATE INDEX "petitions_highlightPetition_idx" ON "petitions"("highlightPetition");
-- CreateIndex
CREATE INDEX "petitions_linkedCampaignId_idx" ON "petitions"("linkedCampaignId");
-- CreateIndex
CREATE UNIQUE INDEX "petition_signatures_verificationToken_key" ON "petition_signatures"("verificationToken");
-- CreateIndex
CREATE INDEX "petition_signatures_petitionId_idx" ON "petition_signatures"("petitionId");
-- CreateIndex
CREATE INDEX "petition_signatures_signerEmail_idx" ON "petition_signatures"("signerEmail");
-- CreateIndex
CREATE INDEX "petition_signatures_petitionId_status_idx" ON "petition_signatures"("petitionId", "status");
-- CreateIndex
CREATE INDEX "petition_signatures_contactId_idx" ON "petition_signatures"("contactId");
-- CreateIndex
CREATE UNIQUE INDEX "petition_signatures_petitionId_signerEmail_key" ON "petition_signatures"("petitionId", "signerEmail");
-- AddForeignKey
ALTER TABLE "petitions" ADD CONSTRAINT "petitions_linkedCampaignId_fkey" FOREIGN KEY ("linkedCampaignId") REFERENCES "campaigns"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "petitions" ADD CONSTRAINT "petitions_createdByUserId_fkey" FOREIGN KEY ("createdByUserId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "petitions" ADD CONSTRAINT "petitions_reviewedByUserId_fkey" FOREIGN KEY ("reviewedByUserId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "petition_signatures" ADD CONSTRAINT "petition_signatures_petitionId_fkey" FOREIGN KEY ("petitionId") REFERENCES "petitions"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "petition_signatures" ADD CONSTRAINT "petition_signatures_contactId_fkey" FOREIGN KEY ("contactId") REFERENCES "contacts"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,3 +0,0 @@
-- Change default for public map toggles so fresh installs start with map disabled
ALTER TABLE "map_settings" ALTER COLUMN "publicMapEnabled" SET DEFAULT false;
ALTER TABLE "site_settings" ALTER COLUMN "enableMap" SET DEFAULT false;

View File

@ -1,4 +0,0 @@
-- AlterTable: Add missing coverVideoId column to petitions table
-- This column was present in the Prisma schema but omitted from the original
-- 20260402200000_add_petitions migration.
ALTER TABLE "petitions" ADD COLUMN "coverVideoId" INTEGER;

View File

@ -1,130 +0,0 @@
-- CreateEnum
CREATE TYPE "ShiftKind" AS ENUM ('CANVASS', 'TRAINING', 'EVENT_STAFFING', 'PHONE_BANK', 'OTHER');
-- CreateEnum
CREATE TYPE "ActionStepKind" AS ENUM ('WATCH_VIDEO', 'SUBMIT_INFLUENCE', 'SIGN_PETITION', 'RSVP_EVENT', 'SIGNUP_SHIFT', 'JOIN_CHALLENGE', 'VISIT_LINK', 'CUSTOM');
-- CreateEnum
CREATE TYPE "ActionStepCompletionSource" AS ENUM ('AUTO', 'SELF_REPORTED');
-- AlterTable
ALTER TABLE "shifts" ADD COLUMN "kind" "ShiftKind" NOT NULL DEFAULT 'CANVASS';
-- AlterTable
ALTER TABLE "ticketed_events" ADD COLUMN "featured" BOOLEAN NOT NULL DEFAULT false;
-- CreateTable
CREATE TABLE "action_campaigns" (
"id" TEXT NOT NULL,
"slug" TEXT NOT NULL,
"title" TEXT NOT NULL,
"description" TEXT,
"reward_text" TEXT,
"is_active" BOOLEAN NOT NULL DEFAULT false,
"starts_at" TIMESTAMP(3),
"ends_at" TIMESTAMP(3),
"min_steps_for_reward" INTEGER,
"created_by_user_id" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "action_campaigns_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "action_steps" (
"id" TEXT NOT NULL,
"campaign_id" TEXT NOT NULL,
"order" INTEGER NOT NULL,
"kind" "ActionStepKind" NOT NULL,
"label" TEXT NOT NULL,
"description" TEXT,
"target_id" TEXT,
"target_url" TEXT,
"auto_complete" BOOLEAN NOT NULL DEFAULT true,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "action_steps_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "action_step_completions" (
"id" TEXT NOT NULL,
"user_id" TEXT NOT NULL,
"step_id" TEXT NOT NULL,
"source" "ActionStepCompletionSource" NOT NULL DEFAULT 'AUTO',
"completed_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "action_step_completions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "documents" (
"id" TEXT NOT NULL,
"path" TEXT NOT NULL,
"filename" TEXT NOT NULL,
"original_filename" TEXT,
"title" TEXT,
"description" TEXT,
"mime_type" TEXT NOT NULL,
"file_size" BIGINT,
"page_count" INTEGER,
"thumbnail_path" TEXT,
"category" TEXT,
"tags" JSONB,
"is_published" BOOLEAN NOT NULL DEFAULT true,
"position" INTEGER DEFAULT 0,
"uploader_id" TEXT,
"download_count" INTEGER NOT NULL DEFAULT 0,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "documents_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "action_campaigns_slug_key" ON "action_campaigns"("slug");
-- CreateIndex
CREATE INDEX "idx_action_campaigns_active" ON "action_campaigns"("is_active");
-- CreateIndex
CREATE INDEX "idx_action_steps_campaign" ON "action_steps"("campaign_id");
-- CreateIndex
CREATE UNIQUE INDEX "action_steps_campaign_id_order_key" ON "action_steps"("campaign_id", "order");
-- CreateIndex
CREATE INDEX "idx_action_step_completions_user" ON "action_step_completions"("user_id");
-- CreateIndex
CREATE UNIQUE INDEX "action_step_completions_user_id_step_id_key" ON "action_step_completions"("user_id", "step_id");
-- CreateIndex
CREATE UNIQUE INDEX "documents_path_key" ON "documents"("path");
-- CreateIndex
CREATE INDEX "idx_documents_published" ON "documents"("is_published");
-- CreateIndex
CREATE INDEX "idx_documents_category" ON "documents"("category");
-- CreateIndex
CREATE INDEX "idx_documents_created_at" ON "documents"("created_at");
-- AddForeignKey
ALTER TABLE "action_campaigns" ADD CONSTRAINT "action_campaigns_created_by_user_id_fkey" FOREIGN KEY ("created_by_user_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "action_steps" ADD CONSTRAINT "action_steps_campaign_id_fkey" FOREIGN KEY ("campaign_id") REFERENCES "action_campaigns"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "action_step_completions" ADD CONSTRAINT "action_step_completions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "action_step_completions" ADD CONSTRAINT "action_step_completions_step_id_fkey" FOREIGN KEY ("step_id") REFERENCES "action_steps"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "documents" ADD CONSTRAINT "documents_uploader_id_fkey" FOREIGN KEY ("uploader_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;

View File

@ -1,7 +0,0 @@
-- AlterTable
ALTER TABLE "shifts" ADD COLUMN "ticketed_event_id" TEXT;
-- AddForeignKey
ALTER TABLE "shifts" ADD CONSTRAINT "shifts_ticketed_event_id_fkey" FOREIGN KEY ("ticketed_event_id") REFERENCES "ticketed_events"("id") ON DELETE SET NULL ON UPDATE CASCADE;