diff --git a/prisma/migrations/20250528232649_init/migration.sql b/prisma/migrations/20250528232649_init/migration.sql new file mode 100644 index 0000000..e6d74c8 --- /dev/null +++ b/prisma/migrations/20250528232649_init/migration.sql @@ -0,0 +1,155 @@ +-- CreateEnum +CREATE TYPE "FeedSourceType" AS ENUM ('RSS', 'JSON'); + +-- CreateEnum +CREATE TYPE "FeedSourceHTTPMethod" AS ENUM ('GET', 'POST'); + +-- 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 "FeedSourceHTTPHeader" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "value" TEXT NOT NULL, + "feed_source_id" INTEGER NOT NULL, + + CONSTRAINT "FeedSourceHTTPHeader_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "FeedSourceCookies" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "value" TEXT NOT NULL, + "feed_source_id" INTEGER NOT NULL, + + CONSTRAINT "FeedSourceCookies_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "FeedSource" ( + "id" SERIAL NOT NULL, + "url" TEXT NOT NULL, + "http_username" TEXT, + "http_password" TEXT, + "http_method" "FeedSourceHTTPMethod" NOT NULL DEFAULT 'GET', + "http_post_payload" TEXT, + "redirect_limit" INTEGER NOT NULL DEFAULT 0, + "timeout_seconds" INTEGER, + + CONSTRAINT "FeedSource_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Feed" ( + "id" SERIAL NOT NULL, + "source_id" INTEGER NOT NULL, + "guild_id" INTEGER NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT NOT NULL, + "website_url" TEXT, + "active" BOOLEAN NOT NULL, + "message_style_id" INTEGER, + "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + 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, + "published_threshold" TIMESTAMP(3), + "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, + "colour" VARCHAR(7) 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, + "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 UNIQUE INDEX "Feed_source_id_key" ON "Feed"("source_id"); + +-- 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 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"); + +-- CreateIndex +CREATE INDEX "_FeedToFilter_B_index" ON "_FeedToFilter"("B"); + +-- AddForeignKey +ALTER TABLE "FeedSourceHTTPHeader" ADD CONSTRAINT "FeedSourceHTTPHeader_feed_source_id_fkey" FOREIGN KEY ("feed_source_id") REFERENCES "FeedSource"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "FeedSourceCookies" ADD CONSTRAINT "FeedSourceCookies_feed_source_id_fkey" FOREIGN KEY ("feed_source_id") REFERENCES "FeedSource"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Feed" ADD CONSTRAINT "Feed_source_id_fkey" FOREIGN KEY ("source_id") REFERENCES "FeedSource"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Feed" ADD CONSTRAINT "Feed_message_style_id_fkey" FOREIGN KEY ("message_style_id") REFERENCES "MessageStyle"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- 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/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..044d57c --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (e.g., Git) +provider = "postgresql"