diff --git a/db/mysql/migrations/20230130211315_4_0_0/migration.sql b/db/mysql/migrations/20230130211315_4_0_0/migration.sql new file mode 100644 index 0000000..32b3b86 --- /dev/null +++ b/db/mysql/migrations/20230130211315_4_0_0/migration.sql @@ -0,0 +1,257 @@ +-- CreateTable +CREATE TABLE `archivedChannels` ( + `channelId` VARCHAR(19) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `name` VARCHAR(191) NOT NULL, + `ticketId` VARCHAR(19) NOT NULL, + + UNIQUE INDEX `archivedChannels_ticketId_channelId_key`(`ticketId`, `channelId`), + PRIMARY KEY (`ticketId`, `channelId`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `archivedMessages` ( + `authorId` VARCHAR(19) NOT NULL, + `content` TEXT NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `deleted` BOOLEAN NOT NULL DEFAULT false, + `edited` BOOLEAN NOT NULL DEFAULT false, + `external` BOOLEAN NOT NULL DEFAULT false, + `id` VARCHAR(19) NOT NULL, + `ticketId` VARCHAR(19) NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `archivedRoles` ( + `colour` CHAR(6) NOT NULL DEFAULT '5865F2', + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `name` VARCHAR(191) NOT NULL, + `roleId` VARCHAR(19) NOT NULL, + `ticketId` VARCHAR(19) NOT NULL, + + UNIQUE INDEX `archivedRoles_ticketId_roleId_key`(`ticketId`, `roleId`), + PRIMARY KEY (`ticketId`, `roleId`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `archivedUsers` ( + `avatar` VARCHAR(191) NULL, + `bot` BOOLEAN NOT NULL DEFAULT false, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `discriminator` CHAR(4) NULL, + `displayName` TEXT NULL, + `roleId` VARCHAR(19) NULL, + `ticketId` VARCHAR(19) NOT NULL, + `userId` VARCHAR(19) NOT NULL, + `username` TEXT NULL, + + UNIQUE INDEX `archivedUsers_ticketId_userId_key`(`ticketId`, `userId`), + PRIMARY KEY (`ticketId`, `userId`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `categories` ( + `channelName` VARCHAR(191) NOT NULL, + `claiming` BOOLEAN NOT NULL DEFAULT false, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `cooldown` INTEGER NULL, + `customTopic` VARCHAR(191) NULL, + `description` VARCHAR(191) NOT NULL, + `discordCategory` VARCHAR(19) NOT NULL, + `emoji` VARCHAR(191) NOT NULL, + `enableFeedback` BOOLEAN NOT NULL DEFAULT false, + `guildId` VARCHAR(19) NOT NULL, + `id` INTEGER NOT NULL AUTO_INCREMENT, + `image` VARCHAR(191) NULL, + `memberLimit` INTEGER NOT NULL DEFAULT 1, + `name` VARCHAR(191) NOT NULL, + `openingMessage` TEXT NOT NULL, + `pingRoles` JSON NOT NULL, + `ratelimit` INTEGER NULL, + `requiredRoles` JSON NOT NULL, + `requireTopic` BOOLEAN NOT NULL DEFAULT false, + `staffRoles` JSON NOT NULL, + `totalLimit` INTEGER NOT NULL DEFAULT 50, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `feedback` ( + `comment` TEXT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `guildId` VARCHAR(19) NOT NULL, + `rating` INTEGER NOT NULL, + `ticketId` VARCHAR(19) NOT NULL, + `userId` VARCHAR(19) NULL, + + PRIMARY KEY (`ticketId`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `guilds` ( + `autoClose` INTEGER NOT NULL DEFAULT 43200000, + `autoTag` JSON NOT NULL, + `archive` BOOLEAN NOT NULL DEFAULT true, + `blocklist` JSON NOT NULL, + `claimButton` BOOLEAN NOT NULL DEFAULT false, + `closeButton` BOOLEAN NOT NULL DEFAULT false, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `errorColour` VARCHAR(191) NOT NULL DEFAULT 'Red', + `footer` VARCHAR(191) NULL DEFAULT 'Discord Tickets by eartharoid', + `id` VARCHAR(19) NOT NULL, + `locale` VARCHAR(191) NOT NULL DEFAULT 'en-GB', + `logChannel` VARCHAR(19) NULL, + `primaryColour` VARCHAR(191) NOT NULL DEFAULT '#009999', + `staleAfter` INTEGER NULL, + `successColour` VARCHAR(191) NOT NULL DEFAULT 'Green', + `workingHours` JSON NOT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `questions` ( + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `id` VARCHAR(191) NOT NULL, + `categoryId` INTEGER NOT NULL, + `label` VARCHAR(45) NOT NULL, + `maxLength` INTEGER NULL DEFAULT 4000, + `minLength` INTEGER NULL DEFAULT 0, + `options` JSON NOT NULL, + `order` INTEGER NOT NULL, + `placeholder` VARCHAR(100) NULL, + `required` BOOLEAN NOT NULL DEFAULT true, + `style` INTEGER NOT NULL DEFAULT 2, + `type` ENUM('MENU', 'TEXT') NOT NULL DEFAULT 'TEXT', + `value` TEXT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `questionAnswers` ( + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `id` INTEGER NOT NULL AUTO_INCREMENT, + `ticketId` VARCHAR(19) NOT NULL, + `questionId` VARCHAR(191) NOT NULL, + `userId` VARCHAR(19) NOT NULL, + `value` TEXT NULL, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `tags` ( + `content` TEXT NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `guildId` VARCHAR(19) NOT NULL, + `id` INTEGER NOT NULL AUTO_INCREMENT, + `name` VARCHAR(191) NOT NULL, + `regex` VARCHAR(191) NULL, + + UNIQUE INDEX `tags_guildId_name_key`(`guildId`, `name`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `tickets` ( + `categoryId` INTEGER NULL, + `claimedById` VARCHAR(19) NULL, + `closedAt` DATETIME(3) NULL, + `closedById` VARCHAR(19) NULL, + `closedReason` TEXT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `createdById` VARCHAR(19) NOT NULL, + `deleted` BOOLEAN NOT NULL DEFAULT false, + `firstResponseAt` DATETIME(3) NULL, + `guildId` VARCHAR(19) NOT NULL, + `id` VARCHAR(19) NOT NULL, + `lastMessageAt` DATETIME(3) NULL, + `messageCount` INTEGER NULL, + `number` INTEGER NOT NULL, + `open` BOOLEAN NOT NULL DEFAULT true, + `openingMessageId` VARCHAR(19) NOT NULL, + `pinnedMessageIds` JSON NOT NULL, + `priority` ENUM('LOW', 'MEDIUM', 'HIGH') NULL, + `referencesMessageId` VARCHAR(19) NULL, + `referencesTicketId` VARCHAR(19) NULL, + `topic` TEXT NULL, + + UNIQUE INDEX `tickets_guildId_number_key`(`guildId`, `number`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- CreateTable +CREATE TABLE `users` ( + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `id` VARCHAR(19) NOT NULL, + `messageCount` INTEGER NOT NULL DEFAULT 0, + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- AddForeignKey +ALTER TABLE `archivedChannels` ADD CONSTRAINT `archivedChannels_ticketId_fkey` FOREIGN KEY (`ticketId`) REFERENCES `tickets`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `archivedMessages` ADD CONSTRAINT `archivedMessages_ticketId_authorId_fkey` FOREIGN KEY (`ticketId`, `authorId`) REFERENCES `archivedUsers`(`ticketId`, `userId`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `archivedMessages` ADD CONSTRAINT `archivedMessages_ticketId_fkey` FOREIGN KEY (`ticketId`) REFERENCES `tickets`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `archivedRoles` ADD CONSTRAINT `archivedRoles_ticketId_fkey` FOREIGN KEY (`ticketId`) REFERENCES `tickets`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `archivedUsers` ADD CONSTRAINT `archivedUsers_ticketId_roleId_fkey` FOREIGN KEY (`ticketId`, `roleId`) REFERENCES `archivedRoles`(`ticketId`, `roleId`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `archivedUsers` ADD CONSTRAINT `archivedUsers_ticketId_fkey` FOREIGN KEY (`ticketId`) REFERENCES `tickets`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `categories` ADD CONSTRAINT `categories_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `guilds`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `feedback` ADD CONSTRAINT `feedback_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `guilds`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `feedback` ADD CONSTRAINT `feedback_ticketId_fkey` FOREIGN KEY (`ticketId`) REFERENCES `tickets`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `feedback` ADD CONSTRAINT `feedback_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `questions` ADD CONSTRAINT `questions_categoryId_fkey` FOREIGN KEY (`categoryId`) REFERENCES `categories`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `questionAnswers` ADD CONSTRAINT `questionAnswers_ticketId_fkey` FOREIGN KEY (`ticketId`) REFERENCES `tickets`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `questionAnswers` ADD CONSTRAINT `questionAnswers_questionId_fkey` FOREIGN KEY (`questionId`) REFERENCES `questions`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `questionAnswers` ADD CONSTRAINT `questionAnswers_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `tags` ADD CONSTRAINT `tags_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `guilds`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `tickets` ADD CONSTRAINT `tickets_categoryId_fkey` FOREIGN KEY (`categoryId`) REFERENCES `categories`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `tickets` ADD CONSTRAINT `tickets_claimedById_fkey` FOREIGN KEY (`claimedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `tickets` ADD CONSTRAINT `tickets_closedById_fkey` FOREIGN KEY (`closedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `tickets` ADD CONSTRAINT `tickets_createdById_fkey` FOREIGN KEY (`createdById`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `tickets` ADD CONSTRAINT `tickets_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `guilds`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE `tickets` ADD CONSTRAINT `tickets_referencesTicketId_fkey` FOREIGN KEY (`referencesTicketId`) REFERENCES `tickets`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/db/mysql/migrations/migration_lock.toml b/db/mysql/migrations/migration_lock.toml new file mode 100644 index 0000000..e5a788a --- /dev/null +++ b/db/mysql/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "mysql" \ No newline at end of file diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index e91ebac..aceb90d 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -3,8 +3,9 @@ generator client { } datasource db { - provider = "mysql" - url = env("DB_CONNECTION_URL") + provider = "mysql" + url = env("DB_CONNECTION_URL") + shadowDatabaseUrl = env("SHADOW_DATABASE_URL") } model ArchivedChannel { diff --git a/db/postgresql/migrations/20230130210021_4_0_0/migration.sql b/db/postgresql/migrations/20230130210021_4_0_0/migration.sql new file mode 100644 index 0000000..7519ba4 --- /dev/null +++ b/db/postgresql/migrations/20230130210021_4_0_0/migration.sql @@ -0,0 +1,273 @@ +-- CreateEnum +CREATE TYPE "TicketPriority" AS ENUM ('LOW', 'MEDIUM', 'HIGH'); + +-- CreateEnum +CREATE TYPE "QuestionType" AS ENUM ('MENU', 'TEXT'); + +-- CreateTable +CREATE TABLE "archivedChannels" ( + "channelId" VARCHAR(19) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "name" TEXT NOT NULL, + "ticketId" VARCHAR(19) NOT NULL, + + CONSTRAINT "archivedChannels_pkey" PRIMARY KEY ("ticketId","channelId") +); + +-- CreateTable +CREATE TABLE "archivedMessages" ( + "authorId" VARCHAR(19) NOT NULL, + "content" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" BOOLEAN NOT NULL DEFAULT false, + "edited" BOOLEAN NOT NULL DEFAULT false, + "external" BOOLEAN NOT NULL DEFAULT false, + "id" VARCHAR(19) NOT NULL, + "ticketId" VARCHAR(19) NOT NULL, + + CONSTRAINT "archivedMessages_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "archivedRoles" ( + "colour" CHAR(6) NOT NULL DEFAULT '5865F2', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "name" TEXT NOT NULL, + "roleId" VARCHAR(19) NOT NULL, + "ticketId" VARCHAR(19) NOT NULL, + + CONSTRAINT "archivedRoles_pkey" PRIMARY KEY ("ticketId","roleId") +); + +-- CreateTable +CREATE TABLE "archivedUsers" ( + "avatar" TEXT, + "bot" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "discriminator" CHAR(4), + "displayName" TEXT, + "roleId" VARCHAR(19), + "ticketId" VARCHAR(19) NOT NULL, + "userId" VARCHAR(19) NOT NULL, + "username" TEXT, + + CONSTRAINT "archivedUsers_pkey" PRIMARY KEY ("ticketId","userId") +); + +-- CreateTable +CREATE TABLE "categories" ( + "channelName" TEXT NOT NULL, + "claiming" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "cooldown" INTEGER, + "customTopic" TEXT, + "description" TEXT NOT NULL, + "discordCategory" VARCHAR(19) NOT NULL, + "emoji" TEXT NOT NULL, + "enableFeedback" BOOLEAN NOT NULL DEFAULT false, + "guildId" VARCHAR(19) NOT NULL, + "id" SERIAL NOT NULL, + "image" TEXT, + "memberLimit" INTEGER NOT NULL DEFAULT 1, + "name" TEXT NOT NULL, + "openingMessage" TEXT NOT NULL, + "pingRoles" JSONB NOT NULL DEFAULT '[]', + "ratelimit" INTEGER, + "requiredRoles" JSONB NOT NULL DEFAULT '[]', + "requireTopic" BOOLEAN NOT NULL DEFAULT false, + "staffRoles" JSONB NOT NULL, + "totalLimit" INTEGER NOT NULL DEFAULT 50, + + CONSTRAINT "categories_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "feedback" ( + "comment" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "guildId" VARCHAR(19) NOT NULL, + "rating" INTEGER NOT NULL, + "ticketId" VARCHAR(19) NOT NULL, + "userId" VARCHAR(19), + + CONSTRAINT "feedback_pkey" PRIMARY KEY ("ticketId") +); + +-- CreateTable +CREATE TABLE "guilds" ( + "autoClose" INTEGER NOT NULL DEFAULT 43200000, + "autoTag" JSONB NOT NULL DEFAULT '[]', + "archive" BOOLEAN NOT NULL DEFAULT true, + "blocklist" JSONB NOT NULL DEFAULT '[]', + "claimButton" BOOLEAN NOT NULL DEFAULT false, + "closeButton" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "errorColour" TEXT NOT NULL DEFAULT 'Red', + "footer" TEXT DEFAULT 'Discord Tickets by eartharoid', + "id" VARCHAR(19) NOT NULL, + "locale" TEXT NOT NULL DEFAULT 'en-GB', + "logChannel" VARCHAR(19), + "primaryColour" TEXT NOT NULL DEFAULT '#009999', + "staleAfter" INTEGER, + "successColour" TEXT NOT NULL DEFAULT 'Green', + "workingHours" JSONB NOT NULL DEFAULT '["UTC", ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"]]', + + CONSTRAINT "guilds_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "questions" ( + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "id" TEXT NOT NULL, + "categoryId" INTEGER NOT NULL, + "label" VARCHAR(45) NOT NULL, + "maxLength" INTEGER DEFAULT 4000, + "minLength" INTEGER DEFAULT 0, + "options" JSONB NOT NULL DEFAULT '[]', + "order" INTEGER NOT NULL, + "placeholder" VARCHAR(100), + "required" BOOLEAN NOT NULL DEFAULT true, + "style" INTEGER NOT NULL DEFAULT 2, + "type" "QuestionType" NOT NULL DEFAULT 'TEXT', + "value" TEXT, + + CONSTRAINT "questions_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "questionAnswers" ( + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "id" SERIAL NOT NULL, + "ticketId" VARCHAR(19) NOT NULL, + "questionId" TEXT NOT NULL, + "userId" VARCHAR(19) NOT NULL, + "value" TEXT, + + CONSTRAINT "questionAnswers_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "tags" ( + "content" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "guildId" VARCHAR(19) NOT NULL, + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "regex" TEXT, + + CONSTRAINT "tags_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "tickets" ( + "categoryId" INTEGER, + "claimedById" VARCHAR(19), + "closedAt" TIMESTAMP(3), + "closedById" VARCHAR(19), + "closedReason" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdById" VARCHAR(19) NOT NULL, + "deleted" BOOLEAN NOT NULL DEFAULT false, + "firstResponseAt" TIMESTAMP(3), + "guildId" VARCHAR(19) NOT NULL, + "id" VARCHAR(19) NOT NULL, + "lastMessageAt" TIMESTAMP(3), + "messageCount" INTEGER, + "number" INTEGER NOT NULL, + "open" BOOLEAN NOT NULL DEFAULT true, + "openingMessageId" VARCHAR(19) NOT NULL, + "pinnedMessageIds" JSONB NOT NULL DEFAULT '[]', + "priority" "TicketPriority", + "referencesMessageId" VARCHAR(19), + "referencesTicketId" VARCHAR(19), + "topic" TEXT, + + CONSTRAINT "tickets_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "users" ( + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "id" VARCHAR(19) NOT NULL, + "messageCount" INTEGER NOT NULL DEFAULT 0, + + CONSTRAINT "users_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "archivedChannels_ticketId_channelId_key" ON "archivedChannels"("ticketId", "channelId"); + +-- CreateIndex +CREATE UNIQUE INDEX "archivedRoles_ticketId_roleId_key" ON "archivedRoles"("ticketId", "roleId"); + +-- CreateIndex +CREATE UNIQUE INDEX "archivedUsers_ticketId_userId_key" ON "archivedUsers"("ticketId", "userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "tags_guildId_name_key" ON "tags"("guildId", "name"); + +-- CreateIndex +CREATE UNIQUE INDEX "tickets_guildId_number_key" ON "tickets"("guildId", "number"); + +-- AddForeignKey +ALTER TABLE "archivedChannels" ADD CONSTRAINT "archivedChannels_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "archivedMessages" ADD CONSTRAINT "archivedMessages_ticketId_authorId_fkey" FOREIGN KEY ("ticketId", "authorId") REFERENCES "archivedUsers"("ticketId", "userId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "archivedMessages" ADD CONSTRAINT "archivedMessages_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "archivedRoles" ADD CONSTRAINT "archivedRoles_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "archivedUsers" ADD CONSTRAINT "archivedUsers_ticketId_roleId_fkey" FOREIGN KEY ("ticketId", "roleId") REFERENCES "archivedRoles"("ticketId", "roleId") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "archivedUsers" ADD CONSTRAINT "archivedUsers_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "categories" ADD CONSTRAINT "categories_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "guilds"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "feedback" ADD CONSTRAINT "feedback_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "guilds"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "feedback" ADD CONSTRAINT "feedback_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "feedback" ADD CONSTRAINT "feedback_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "questions" ADD CONSTRAINT "questions_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "categories"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "questionAnswers" ADD CONSTRAINT "questionAnswers_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "questionAnswers" ADD CONSTRAINT "questionAnswers_questionId_fkey" FOREIGN KEY ("questionId") REFERENCES "questions"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "questionAnswers" ADD CONSTRAINT "questionAnswers_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "tags" ADD CONSTRAINT "tags_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "guilds"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "tickets" ADD CONSTRAINT "tickets_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "categories"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "tickets" ADD CONSTRAINT "tickets_claimedById_fkey" FOREIGN KEY ("claimedById") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "tickets" ADD CONSTRAINT "tickets_closedById_fkey" FOREIGN KEY ("closedById") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "tickets" ADD CONSTRAINT "tickets_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "tickets" ADD CONSTRAINT "tickets_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "guilds"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "tickets" ADD CONSTRAINT "tickets_referencesTicketId_fkey" FOREIGN KEY ("referencesTicketId") REFERENCES "tickets"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/db/postgresql/migrations/migration_lock.toml b/db/postgresql/migrations/migration_lock.toml new file mode 100644 index 0000000..fbffa92 --- /dev/null +++ b/db/postgresql/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/db/sqlite/migrations/20230130211842_4_0_0/migration.sql b/db/sqlite/migrations/20230130211842_4_0_0/migration.sql new file mode 100644 index 0000000..1ee0b48 --- /dev/null +++ b/db/sqlite/migrations/20230130211842_4_0_0/migration.sql @@ -0,0 +1,207 @@ +-- CreateTable +CREATE TABLE "archivedChannels" ( + "channelId" TEXT NOT NULL, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "name" TEXT NOT NULL, + "ticketId" TEXT NOT NULL, + + PRIMARY KEY ("ticketId", "channelId"), + CONSTRAINT "archivedChannels_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "archivedMessages" ( + "authorId" TEXT NOT NULL, + "content" TEXT NOT NULL, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "deleted" BOOLEAN NOT NULL DEFAULT false, + "edited" BOOLEAN NOT NULL DEFAULT false, + "id" TEXT NOT NULL PRIMARY KEY, + "external" BOOLEAN NOT NULL DEFAULT false, + "ticketId" TEXT NOT NULL, + CONSTRAINT "archivedMessages_ticketId_authorId_fkey" FOREIGN KEY ("ticketId", "authorId") REFERENCES "archivedUsers" ("ticketId", "userId") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "archivedMessages_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "archivedRoles" ( + "colour" TEXT NOT NULL DEFAULT '5865F2', + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "name" TEXT NOT NULL, + "roleId" TEXT NOT NULL, + "ticketId" TEXT NOT NULL, + + PRIMARY KEY ("ticketId", "roleId"), + CONSTRAINT "archivedRoles_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "archivedUsers" ( + "avatar" TEXT, + "bot" BOOLEAN NOT NULL DEFAULT false, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "discriminator" TEXT, + "displayName" TEXT, + "roleId" TEXT, + "ticketId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "username" TEXT, + + PRIMARY KEY ("ticketId", "userId"), + CONSTRAINT "archivedUsers_ticketId_roleId_fkey" FOREIGN KEY ("ticketId", "roleId") REFERENCES "archivedRoles" ("ticketId", "roleId") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "archivedUsers_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "categories" ( + "channelName" TEXT NOT NULL, + "claiming" BOOLEAN NOT NULL DEFAULT false, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "cooldown" INTEGER, + "customTopic" TEXT, + "description" TEXT NOT NULL, + "discordCategory" TEXT NOT NULL, + "emoji" TEXT NOT NULL, + "enableFeedback" BOOLEAN NOT NULL DEFAULT false, + "guildId" TEXT NOT NULL, + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "image" TEXT, + "memberLimit" INTEGER NOT NULL DEFAULT 1, + "name" TEXT NOT NULL, + "openingMessage" TEXT NOT NULL, + "pingRoles" TEXT NOT NULL DEFAULT '[]', + "ratelimit" INTEGER, + "requiredRoles" TEXT NOT NULL DEFAULT '[]', + "requireTopic" BOOLEAN NOT NULL DEFAULT false, + "staffRoles" TEXT NOT NULL, + "totalLimit" INTEGER NOT NULL DEFAULT 50, + CONSTRAINT "categories_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "feedback" ( + "comment" TEXT, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "guildId" TEXT NOT NULL, + "rating" INTEGER NOT NULL, + "ticketId" TEXT NOT NULL PRIMARY KEY, + "userId" TEXT, + CONSTRAINT "feedback_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "feedback_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "feedback_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "guilds" ( + "autoClose" INTEGER NOT NULL DEFAULT 43200000, + "autoTag" TEXT NOT NULL DEFAULT '[]', + "archive" BOOLEAN NOT NULL DEFAULT true, + "blocklist" TEXT NOT NULL DEFAULT '[]', + "claimButton" BOOLEAN NOT NULL DEFAULT false, + "closeButton" BOOLEAN NOT NULL DEFAULT false, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "errorColour" TEXT NOT NULL DEFAULT 'Red', + "footer" TEXT DEFAULT 'Discord Tickets by eartharoid', + "id" TEXT NOT NULL PRIMARY KEY, + "locale" TEXT NOT NULL DEFAULT 'en-GB', + "logChannel" TEXT, + "primaryColour" TEXT NOT NULL DEFAULT '#009999', + "staleAfter" INTEGER, + "successColour" TEXT NOT NULL DEFAULT 'Green', + "workingHours" TEXT NOT NULL DEFAULT '["UTC", ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"], ["00:00","23:59"]]' +); + +-- CreateTable +CREATE TABLE "questions" ( + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "id" TEXT NOT NULL PRIMARY KEY, + "categoryId" INTEGER NOT NULL, + "label" TEXT NOT NULL, + "maxLength" INTEGER DEFAULT 4000, + "minLength" INTEGER DEFAULT 0, + "options" TEXT NOT NULL DEFAULT '[]', + "order" INTEGER NOT NULL, + "placeholder" TEXT, + "required" BOOLEAN NOT NULL DEFAULT true, + "style" INTEGER NOT NULL DEFAULT 2, + "type" TEXT NOT NULL DEFAULT 'TEXT', + "value" TEXT, + CONSTRAINT "questions_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "categories" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "questionAnswers" ( + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "ticketId" TEXT NOT NULL, + "questionId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "value" TEXT, + CONSTRAINT "questionAnswers_ticketId_fkey" FOREIGN KEY ("ticketId") REFERENCES "tickets" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "questionAnswers_questionId_fkey" FOREIGN KEY ("questionId") REFERENCES "questions" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "questionAnswers_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "tags" ( + "content" TEXT NOT NULL, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "guildId" TEXT NOT NULL, + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "name" TEXT NOT NULL, + "regex" TEXT, + CONSTRAINT "tags_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "tickets" ( + "categoryId" INTEGER, + "claimedById" TEXT, + "closedAt" DATETIME, + "closedById" TEXT, + "closedReason" TEXT, + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "createdById" TEXT NOT NULL, + "deleted" BOOLEAN NOT NULL DEFAULT false, + "firstResponseAt" DATETIME, + "guildId" TEXT NOT NULL, + "id" TEXT NOT NULL PRIMARY KEY, + "lastMessageAt" DATETIME, + "messageCount" INTEGER, + "number" INTEGER NOT NULL, + "open" BOOLEAN NOT NULL DEFAULT true, + "openingMessageId" TEXT NOT NULL, + "pinnedMessageIds" TEXT NOT NULL DEFAULT '[]', + "priority" TEXT, + "referencesMessageId" TEXT, + "referencesTicketId" TEXT, + "topic" TEXT, + CONSTRAINT "tickets_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "categories" ("id") ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT "tickets_claimedById_fkey" FOREIGN KEY ("claimedById") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT "tickets_closedById_fkey" FOREIGN KEY ("closedById") REFERENCES "users" ("id") ON DELETE SET NULL ON UPDATE CASCADE, + CONSTRAINT "tickets_createdById_fkey" FOREIGN KEY ("createdById") REFERENCES "users" ("id") ON DELETE RESTRICT ON UPDATE CASCADE, + CONSTRAINT "tickets_guildId_fkey" FOREIGN KEY ("guildId") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "tickets_referencesTicketId_fkey" FOREIGN KEY ("referencesTicketId") REFERENCES "tickets" ("id") ON DELETE SET NULL ON UPDATE CASCADE +); + +-- CreateTable +CREATE TABLE "users" ( + "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "id" TEXT NOT NULL PRIMARY KEY, + "messageCount" INTEGER NOT NULL DEFAULT 0 +); + +-- CreateIndex +CREATE UNIQUE INDEX "archivedChannels_ticketId_channelId_key" ON "archivedChannels"("ticketId", "channelId"); + +-- CreateIndex +CREATE UNIQUE INDEX "archivedRoles_ticketId_roleId_key" ON "archivedRoles"("ticketId", "roleId"); + +-- CreateIndex +CREATE UNIQUE INDEX "archivedUsers_ticketId_userId_key" ON "archivedUsers"("ticketId", "userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "tags_guildId_name_key" ON "tags"("guildId", "name"); + +-- CreateIndex +CREATE UNIQUE INDEX "tickets_guildId_number_key" ON "tickets"("guildId", "number"); diff --git a/db/sqlite/migrations/migration_lock.toml b/db/sqlite/migrations/migration_lock.toml new file mode 100644 index 0000000..e5e5c47 --- /dev/null +++ b/db/sqlite/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "sqlite" \ No newline at end of file diff --git a/scripts/postinstall.js b/scripts/postinstall.js index 6e1c473..67d31c8 100644 --- a/scripts/postinstall.js +++ b/scripts/postinstall.js @@ -31,6 +31,6 @@ fs.copySync(`./db/${provider}`, './prisma'); // copy schema & migrations (async () => { await npx('prisma generate'); - // await npx('prisma migrate deploy'); + await npx('prisma migrate deploy'); })();