diff --git a/prisma/migrations/20250428225814_init/migration.sql b/prisma/migrations/20250428225814_init/migration.sql deleted file mode 100644 index 5943499..0000000 --- a/prisma/migrations/20250428225814_init/migration.sql +++ /dev/null @@ -1,45 +0,0 @@ --- CreateTable -CREATE TABLE "Feed" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "name" TEXT NOT NULL, - "url" TEXT NOT NULL, - "guild_id" TEXT NOT NULL, - "active" BOOLEAN NOT NULL, - "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_at" DATETIME NOT NULL -); - --- CreateTable -CREATE TABLE "Channel" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "channel_id" TEXT NOT NULL, - "feedId" INTEGER NOT NULL, - CONSTRAINT "Channel_feedId_fkey" FOREIGN KEY ("feedId") REFERENCES "Feed" ("id") ON DELETE RESTRICT ON UPDATE CASCADE -); - --- CreateTable -CREATE TABLE "Filter" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "guild_id" TEXT NOT NULL, - "name" TEXT NOT NULL, - "value" TEXT NOT NULL, - "matching_algorithm" TEXT NOT NULL, - "is_insensitive" BOOLEAN NOT NULL, - "is_whitelist" BOOLEAN NOT NULL, - "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_at" DATETIME NOT NULL -); - --- CreateTable -CREATE TABLE "_FeedToFilter" ( - "A" INTEGER NOT NULL, - "B" INTEGER NOT NULL, - CONSTRAINT "_FeedToFilter_A_fkey" FOREIGN KEY ("A") REFERENCES "Feed" ("id") ON DELETE CASCADE ON UPDATE CASCADE, - CONSTRAINT "_FeedToFilter_B_fkey" FOREIGN KEY ("B") REFERENCES "Filter" ("id") ON DELETE CASCADE ON UPDATE CASCADE -); - --- CreateIndex -CREATE UNIQUE INDEX "_FeedToFilter_AB_unique" ON "_FeedToFilter"("A", "B"); - --- CreateIndex -CREATE INDEX "_FeedToFilter_B_index" ON "_FeedToFilter"("B"); diff --git a/prisma/migrations/20250430104514_indexes/migration.sql b/prisma/migrations/20250430104514_indexes/migration.sql deleted file mode 100644 index 9aeceee..0000000 --- a/prisma/migrations/20250430104514_indexes/migration.sql +++ /dev/null @@ -1,5 +0,0 @@ --- CreateIndex -CREATE INDEX "Feed_guild_id_created_at_idx" ON "Feed"("guild_id", "created_at" DESC); - --- CreateIndex -CREATE INDEX "Filter_guild_id_created_at_idx" ON "Filter"("guild_id", "created_at" DESC); diff --git a/prisma/migrations/20250501193251_cascade_channel/migration.sql b/prisma/migrations/20250501193251_cascade_channel/migration.sql deleted file mode 100644 index fe3da93..0000000 --- a/prisma/migrations/20250501193251_cascade_channel/migration.sql +++ /dev/null @@ -1,14 +0,0 @@ --- RedefineTables -PRAGMA defer_foreign_keys=ON; -PRAGMA foreign_keys=OFF; -CREATE TABLE "new_Channel" ( - "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - "channel_id" TEXT NOT NULL, - "feedId" INTEGER NOT NULL, - CONSTRAINT "Channel_feedId_fkey" FOREIGN KEY ("feedId") REFERENCES "Feed" ("id") ON DELETE CASCADE ON UPDATE CASCADE -); -INSERT INTO "new_Channel" ("channel_id", "feedId", "id") SELECT "channel_id", "feedId", "id" FROM "Channel"; -DROP TABLE "Channel"; -ALTER TABLE "new_Channel" RENAME TO "Channel"; -PRAGMA foreign_keys=ON; -PRAGMA defer_foreign_keys=OFF; diff --git a/prisma/migrations/20250505155254_init/migration.sql b/prisma/migrations/20250505155254_init/migration.sql new file mode 100644 index 0000000..bc624f3 --- /dev/null +++ b/prisma/migrations/20250505155254_init/migration.sql @@ -0,0 +1,87 @@ +-- CreateEnum +CREATE TYPE "MatchingAlgorithms" AS ENUM ('ANY', 'ALL', 'EXACT', 'REGEX', 'FUZZY'); + +-- CreateEnum +CREATE TYPE "TextMutator" AS ENUM ('UWUIFY', 'UWUIFY_SFW', 'GOTHIC_SCRIPT', 'EMOJI_SUBSTITUTE', 'ZALGO', 'MORSE_CODE', 'BINARY', 'HEXADECIMAL', 'REMOVE_VOWELS', 'DOUBLE_CHARACTERS', 'SMALL_CASE', 'LEET_SPEAK', 'PIG_LATIN', 'UPSIDE_DOWN', 'ALL_REVERSED', 'REVERSED_WORDS', 'SHUFFLE_WORDS', 'RANDOM_CASE', 'GIBBERISH', 'SHAKESPEAREAN'); + +-- CreateTable +CREATE TABLE "Feed" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "url" TEXT NOT NULL, + "guild_id" TEXT NOT NULL, + "active" BOOLEAN NOT NULL, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Feed_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Channel" ( + "id" SERIAL NOT NULL, + "channel_id" TEXT NOT NULL, + "feedId" INTEGER NOT NULL, + + CONSTRAINT "Channel_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Filter" ( + "id" SERIAL NOT NULL, + "guild_id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "value" TEXT NOT NULL, + "matching_algorithm" "MatchingAlgorithms" NOT NULL, + "is_insensitive" BOOLEAN NOT NULL, + "is_whitelist" BOOLEAN NOT NULL, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Filter_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "MessageStyle" ( + "id" SERIAL NOT NULL, + "guild_id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "show_author" BOOLEAN NOT NULL, + "show_image" BOOLEAN NOT NULL, + "show_thumbnail" BOOLEAN NOT NULL, + "show_footer" BOOLEAN NOT NULL, + "show_timestamp" BOOLEAN NOT NULL, + "colour" VARCHAR(6) NOT NULL, + "title_mutator" "TextMutator", + "description_mutator" "TextMutator", + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "MessageStyle_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "_FeedToFilter" ( + "A" INTEGER NOT NULL, + "B" INTEGER NOT NULL, + + CONSTRAINT "_FeedToFilter_AB_pkey" PRIMARY KEY ("A","B") +); + +-- CreateIndex +CREATE INDEX "Feed_guild_id_created_at_idx" ON "Feed"("guild_id", "created_at" DESC); + +-- CreateIndex +CREATE INDEX "Filter_guild_id_created_at_idx" ON "Filter"("guild_id", "created_at" DESC); + +-- CreateIndex +CREATE INDEX "_FeedToFilter_B_index" ON "_FeedToFilter"("B"); + +-- AddForeignKey +ALTER TABLE "Channel" ADD CONSTRAINT "Channel_feedId_fkey" FOREIGN KEY ("feedId") REFERENCES "Feed"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_FeedToFilter" ADD CONSTRAINT "_FeedToFilter_A_fkey" FOREIGN KEY ("A") REFERENCES "Feed"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_FeedToFilter" ADD CONSTRAINT "_FeedToFilter_B_fkey" FOREIGN KEY ("B") REFERENCES "Filter"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20250505155447_unique_names/migration.sql b/prisma/migrations/20250505155447_unique_names/migration.sql new file mode 100644 index 0000000..717f610 --- /dev/null +++ b/prisma/migrations/20250505155447_unique_names/migration.sql @@ -0,0 +1,19 @@ +/* + Warnings: + + - A unique constraint covering the columns `[guild_id,name]` on the table `Feed` will be added. If there are existing duplicate values, this will fail. + - A unique constraint covering the columns `[guild_id,name]` on the table `Filter` will be added. If there are existing duplicate values, this will fail. + - A unique constraint covering the columns `[guild_id,name]` on the table `MessageStyle` will be added. If there are existing duplicate values, this will fail. + +*/ +-- CreateIndex +CREATE UNIQUE INDEX "Feed_guild_id_name_key" ON "Feed"("guild_id", "name"); + +-- CreateIndex +CREATE UNIQUE INDEX "Filter_guild_id_name_key" ON "Filter"("guild_id", "name"); + +-- CreateIndex +CREATE INDEX "MessageStyle_guild_id_created_at_idx" ON "MessageStyle"("guild_id", "created_at" DESC); + +-- CreateIndex +CREATE UNIQUE INDEX "MessageStyle_guild_id_name_key" ON "MessageStyle"("guild_id", "name"); diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml index 2a5a444..044d57c 100644 --- a/prisma/migrations/migration_lock.toml +++ b/prisma/migrations/migration_lock.toml @@ -1,3 +1,3 @@ # Please do not edit this file manually # It should be added in your version-control system (e.g., Git) -provider = "sqlite" +provider = "postgresql" diff --git a/prisma/schema.prisma b/prisma/schema.prisma index bc67dd6..5c0cefd 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -7,7 +7,7 @@ generator client { } datasource db { - provider = "sqlite" + provider = "postgres" url = env("DATABASE_URL") } @@ -22,6 +22,7 @@ model Feed { channels Channel[] filters Filter[] + @@unique([guild_id, name]) @@index([guild_id, created_at(sort: Desc)]) } @@ -44,6 +45,7 @@ model Filter { updated_at DateTime @updatedAt feeds Feed[] + @@unique([guild_id, name]) @@index([guild_id, created_at(sort: Desc)]) } @@ -54,3 +56,50 @@ enum MatchingAlgorithms { REGEX FUZZY } + +model MessageStyle { + id Int @id @default(autoincrement()) + guild_id String + name String + + show_author Boolean + show_image Boolean + show_thumbnail Boolean + show_footer Boolean + show_timestamp Boolean + + colour String @db.VarChar(6) + + title_mutator TextMutator? + description_mutator TextMutator? + + created_at DateTime @default(now()) + updated_at DateTime @updatedAt + + @@unique([guild_id, name]) + @@index([guild_id, created_at(sort: Desc)]) +} + +// Entertainment mutators for message styles +enum TextMutator { + UWUIFY + UWUIFY_SFW + GOTHIC_SCRIPT + EMOJI_SUBSTITUTE + ZALGO + MORSE_CODE + BINARY + HEXADECIMAL + REMOVE_VOWELS + DOUBLE_CHARACTERS + SMALL_CASE + LEET_SPEAK + PIG_LATIN + UPSIDE_DOWN + ALL_REVERSED + REVERSED_WORDS + SHUFFLE_WORDS + RANDOM_CASE + GIBBERISH + SHAKESPEAREAN +}