From 502e7b10c6a3054ec86f4960fea8287b90040b31 Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Wed, 1 Jul 2026 10:25:29 +0700 Subject: [PATCH] db: updated character schema --- .../20260527163534_baseline/migration.sql | 911 ------------------ .../migration.sql | 10 - .../migration.sql | 8 - .../migration.sql | 12 - .../migration.sql | 8 - .../migration.sql | 8 - .../migration.sql | 8 - .../migration.sql | 10 - prisma/migrations/migration_lock.toml | 3 - prisma/schema.prisma | 803 +++++++-------- 10 files changed, 423 insertions(+), 1358 deletions(-) delete mode 100644 prisma/migrations/20260527163534_baseline/migration.sql delete mode 100644 prisma/migrations/20260528094152_remove_oauth_profile_from_user/migration.sql delete mode 100644 prisma/migrations/20260528094932_remove_duplicate_oauth_activity_report/migration.sql delete mode 100644 prisma/migrations/20260528141807_increate_limit_oauth_token/migration.sql delete mode 100644 prisma/migrations/20260528142420_add_expires_in_session/migration.sql delete mode 100644 prisma/migrations/20260530045455_make_embed_url_unique/migration.sql delete mode 100644 prisma/migrations/20260530050918_make_cc_as_unique/migration.sql delete mode 100644 prisma/migrations/20260531041413_remove_unused_media_column/migration.sql delete mode 100644 prisma/migrations/migration_lock.toml diff --git a/prisma/migrations/20260527163534_baseline/migration.sql b/prisma/migrations/20260527163534_baseline/migration.sql deleted file mode 100644 index d1b35a6..0000000 --- a/prisma/migrations/20260527163534_baseline/migration.sql +++ /dev/null @@ -1,911 +0,0 @@ --- CreateEnum -CREATE TYPE "user_role" AS ENUM ('user', 'contributor', 'curator', 'admin'); - --- CreateEnum -CREATE TYPE "user_sex" AS ENUM ('male', 'female'); - --- CreateEnum -CREATE TYPE "auth_provider" AS ENUM ('google', 'github'); - --- CreateEnum -CREATE TYPE "device_type" AS ENUM ('mobile', 'tablet', 'desktop', 'unknown'); - --- CreateEnum -CREATE TYPE "user_preference_state" AS ENUM ('exclude', 'include'); - --- CreateEnum -CREATE TYPE "media_season" AS ENUM ('winter', 'spring', 'summer', 'fall'); - --- CreateEnum -CREATE TYPE "character_role" AS ENUM ('main', 'supporting', 'background'); - --- CreateEnum -CREATE TYPE "status_submission" AS ENUM ('pending', 'approved', 'rejected'); - --- CreateEnum -CREATE TYPE "like_type" AS ENUM ('like', 'dislike'); - --- CreateEnum -CREATE TYPE "audit_action" AS ENUM ('delete', 'restore', 'edit', 'flag'); - --- CreateEnum -CREATE TYPE "privacy_level" AS ENUM ('public', 'unlisted', 'private'); - --- CreateEnum -CREATE TYPE "collection_access_level" AS ENUM ('owner', 'moderator', 'contributor', 'viewer'); - --- CreateTable -CREATE TABLE "users" ( - "id" UUID NOT NULL, - "email" TEXT NOT NULL, - "password" VARCHAR(255), - "username" VARCHAR(28) NOT NULL, - "fullname" VARCHAR(32) NOT NULL, - "avatar" VARCHAR(255), - "bio" TEXT, - "datebirth" DATE, - "role" "user_role" NOT NULL DEFAULT 'user', - "sex" "user_sex", - "phone_number" VARCHAR(20), - "auth_provider" VARCHAR(64), - "provider_token" VARCHAR(255), - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_at" TIMESTAMPTZ NOT NULL, - "deleted_at" TIMESTAMPTZ, - "countryId" UUID, - - CONSTRAINT "users_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "user_addresses" ( - "user_id" UUID NOT NULL, - "address" VARCHAR(255) NOT NULL, - "district" VARCHAR(100) NOT NULL, - "city" VARCHAR(100) NOT NULL, - "province" VARCHAR(100) NOT NULL, - "postal_code" VARCHAR(20) NOT NULL, - "coordinate" VARCHAR(50), - "updated_at" TIMESTAMPTZ NOT NULL, - - CONSTRAINT "user_addresses_pkey" PRIMARY KEY ("user_id") -); - --- CreateTable -CREATE TABLE "user_oauth_accounts" ( - "id" UUID NOT NULL, - "provider_name" "auth_provider" NOT NULL, - "provider_sub" VARCHAR(255), - "provider_email" VARCHAR(255), - "provider_token" VARCHAR(255), - "refresh_token" VARCHAR(255), - "expires_at" TIMESTAMPTZ, - "last_login" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_at" TIMESTAMPTZ NOT NULL, - "user_id" UUID NOT NULL, - - CONSTRAINT "user_oauth_accounts_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "user_sessions" ( - "id" UUID NOT NULL, - "device_type" "device_type" NOT NULL, - "os_type" VARCHAR(50), - "os_version" VARCHAR(50), - "browser_name" VARCHAR(50), - "browser_version" VARCHAR(50), - "ip_login" INET, - "login_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "logout_at" TIMESTAMPTZ, - "user_id" UUID NOT NULL, - - CONSTRAINT "user_sessions_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "user_preferences" ( - "comment_picture" VARCHAR(255), - "enable_watch_history" BOOLEAN NOT NULL DEFAULT true, - "enable_search_history" BOOLEAN NOT NULL DEFAULT false, - "is_private_account" BOOLEAN NOT NULL DEFAULT false, - "can_message_me" BOOLEAN NOT NULL DEFAULT true, - "publish_birthday" BOOLEAN NOT NULL DEFAULT false, - "publish_email" BOOLEAN NOT NULL DEFAULT false, - "publish_phone_number" BOOLEAN NOT NULL DEFAULT false, - "publish_country" BOOLEAN NOT NULL DEFAULT false, - "publish_partner" BOOLEAN NOT NULL DEFAULT true, - "subscribe_to_newsletter" BOOLEAN NOT NULL DEFAULT true, - "enable_security_alerts" BOOLEAN NOT NULL DEFAULT true, - "user_id" UUID NOT NULL, - "char_as_partner_id" UUID NOT NULL, - - CONSTRAINT "user_preferences_pkey" PRIMARY KEY ("user_id") -); - --- CreateTable -CREATE TABLE "user_genre_preferences" ( - "state" "user_preference_state" NOT NULL, - "user_id" UUID NOT NULL, - "genre_id" UUID NOT NULL, - - CONSTRAINT "user_genre_preferences_pkey" PRIMARY KEY ("user_id","genre_id") -); - --- CreateTable -CREATE TABLE "user_rating_preferences" ( - "state" "user_preference_state" NOT NULL, - "user_id" UUID NOT NULL, - "rating_id" UUID NOT NULL, - - CONSTRAINT "user_rating_preferences_pkey" PRIMARY KEY ("user_id","rating_id") -); - --- CreateTable -CREATE TABLE "user_country_preferences" ( - "state" "user_preference_state" NOT NULL, - "user_id" UUID NOT NULL, - "country_id" UUID NOT NULL, - - CONSTRAINT "user_country_preferences_pkey" PRIMARY KEY ("user_id","country_id") -); - --- CreateTable -CREATE TABLE "user_follows" ( - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "follower_id" UUID NOT NULL, - "following_id" UUID NOT NULL, - - CONSTRAINT "user_follows_pkey" PRIMARY KEY ("follower_id","following_id") -); - --- CreateTable -CREATE TABLE "user_watch_histories" ( - "updated_at" TIMESTAMPTZ NOT NULL, - "user_id" UUID NOT NULL, - "episode_id" UUID NOT NULL, - - CONSTRAINT "user_watch_histories_pkey" PRIMARY KEY ("user_id","episode_id") -); - --- CreateTable -CREATE TABLE "collections" ( - "id" UUID NOT NULL, - "name" VARCHAR(64) NOT NULL, - "code" VARCHAR(12), - "cover_url" VARCHAR(255), - "privacy" "privacy_level" NOT NULL DEFAULT 'private', - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_at" TIMESTAMPTZ NOT NULL, - - CONSTRAINT "collections_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "collection_members" ( - "access_level" "collection_access_level" NOT NULL, - "invited_at" TIMESTAMPTZ, - "collection_id" UUID NOT NULL, - "user_id" UUID NOT NULL, - "invited_by_id" UUID, - - CONSTRAINT "collection_members_pkey" PRIMARY KEY ("collection_id","user_id") -); - --- CreateTable -CREATE TABLE "medias" ( - "id" UUID NOT NULL, - "mal_id" INTEGER NOT NULL, - "title" VARCHAR(255) NOT NULL, - "title_secondary" VARCHAR(255), - "title_original" VARCHAR(255), - "title_synonyms" VARCHAR(255)[], - "synopsis" TEXT, - "small_image_url" VARCHAR(255), - "medium_image_url" VARCHAR(255) NOT NULL, - "large_image_url" VARCHAR(255), - "airing" BOOLEAN NOT NULL, - "start_airing" DATE, - "end_airing" DATE, - "score" DECIMAL(2,2), - "score_total" INTEGER NOT NULL DEFAULT 0, - "score_count" INTEGER NOT NULL DEFAULT 0, - "background" TEXT, - "season" "media_season" NOT NULL, - "year" SMALLINT, - "broadcast_day" VARCHAR(20), - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_at" TIMESTAMPTZ NOT NULL, - "deleted_at" TIMESTAMPTZ, - "type_id" UUID NOT NULL, - "source_id" UUID NOT NULL, - "status_id" UUID NOT NULL, - "age_rating_id" UUID, - "country_id" UUID, - "approver_id" UUID, - "created_by_id" UUID, - "updated_by_id" UUID, - "deleted_by_id" UUID, - - CONSTRAINT "medias_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "media_submissions" ( - "id" UUID NOT NULL, - "status" "status_submission" NOT NULL DEFAULT 'pending', - "reviewed_at" TIMESTAMPTZ, - "reason" TEXT, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "media_id" UUID NOT NULL, - "submitter_id" UUID NOT NULL, - "reviewer_id" UUID, - - CONSTRAINT "media_submissions_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "media_collections" ( - "added_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "media_id" UUID NOT NULL, - "collection_id" UUID NOT NULL, - "added_by_id" UUID NOT NULL, - - CONSTRAINT "media_collections_pkey" PRIMARY KEY ("media_id","collection_id") -); - --- CreateTable -CREATE TABLE "media_trailers" ( - "media_id" UUID NOT NULL, - "url" VARCHAR(255), - "embed_url" VARCHAR(255), - "small_image_url" VARCHAR(255), - "large_image_url" VARCHAR(255), - "maximum_image_url" VARCHAR(255), - - CONSTRAINT "media_trailers_pkey" PRIMARY KEY ("media_id") -); - --- CreateTable -CREATE TABLE "media_types" ( - "id" UUID NOT NULL, - "name" VARCHAR(100) NOT NULL, - - CONSTRAINT "media_types_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "media_sources" ( - "id" UUID NOT NULL, - "name" VARCHAR(100) NOT NULL, - - CONSTRAINT "media_sources_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "media_statuses" ( - "id" UUID NOT NULL, - "name" VARCHAR(100) NOT NULL, - - CONSTRAINT "media_statuses_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "media_age_ratings" ( - "id" UUID NOT NULL, - "name" VARCHAR(100) NOT NULL, - "min_age" SMALLINT NOT NULL, - - CONSTRAINT "media_age_ratings_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "media_producers" ( - "media_id" UUID NOT NULL, - "producer_id" UUID NOT NULL, - - CONSTRAINT "media_producers_pkey" PRIMARY KEY ("media_id","producer_id") -); - --- CreateTable -CREATE TABLE "media_licensors" ( - "media_id" UUID NOT NULL, - "licensor_id" UUID NOT NULL, - - CONSTRAINT "media_licensors_pkey" PRIMARY KEY ("media_id","licensor_id") -); - --- CreateTable -CREATE TABLE "media_studios" ( - "media_id" UUID NOT NULL, - "studio_id" UUID NOT NULL, - - CONSTRAINT "media_studios_pkey" PRIMARY KEY ("media_id","studio_id") -); - --- CreateTable -CREATE TABLE "producers" ( - "id" UUID NOT NULL, - "mal_id" INTEGER NOT NULL, - "type" VARCHAR(24) NOT NULL, - "name" VARCHAR(255) NOT NULL, - "url" VARCHAR(255), - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_at" TIMESTAMPTZ NOT NULL, - "deleted_at" TIMESTAMPTZ, - "created_by_id" UUID NOT NULL, - - CONSTRAINT "producers_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "media_genres" ( - "media_id" UUID NOT NULL, - "genre_id" UUID NOT NULL, - - CONSTRAINT "media_genres_pkey" PRIMARY KEY ("media_id","genre_id") -); - --- CreateTable -CREATE TABLE "media_explicit_genres" ( - "media_id" UUID NOT NULL, - "genre_id" UUID NOT NULL, - - CONSTRAINT "media_explicit_genres_pkey" PRIMARY KEY ("media_id","genre_id") -); - --- CreateTable -CREATE TABLE "media_themes" ( - "media_id" UUID NOT NULL, - "genre_id" UUID NOT NULL, - - CONSTRAINT "media_themes_pkey" PRIMARY KEY ("media_id","genre_id") -); - --- CreateTable -CREATE TABLE "media_demographics" ( - "media_id" UUID NOT NULL, - "demographic_id" UUID NOT NULL, - - CONSTRAINT "media_demographics_pkey" PRIMARY KEY ("media_id","demographic_id") -); - --- CreateTable -CREATE TABLE "genres" ( - "id" UUID NOT NULL, - "mal_id" SMALLINT NOT NULL, - "name" VARCHAR(100) NOT NULL, - "slug" VARCHAR(115) NOT NULL, - "thumbnail_url" VARCHAR(255), - - CONSTRAINT "genres_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "media_relations" ( - "relation_type" VARCHAR(50) NOT NULL, - "media_id" UUID NOT NULL, - "related_media_id" UUID NOT NULL, - - CONSTRAINT "media_relations_pkey" PRIMARY KEY ("media_id","related_media_id") -); - --- CreateTable -CREATE TABLE "media_external_links" ( - "id" UUID NOT NULL, - "url" VARCHAR(255) NOT NULL, - "site_name" VARCHAR(100), - "media_id" UUID NOT NULL, - - CONSTRAINT "media_external_links_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "media_characters" ( - "id" UUID NOT NULL, - "role" "character_role" NOT NULL, - "media_id" UUID NOT NULL, - "character_id" UUID NOT NULL, - - CONSTRAINT "media_characters_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "characters" ( - "id" UUID NOT NULL, - "name" VARCHAR(255) NOT NULL, - "image" VARCHAR(255), - "small_image" VARCHAR(255), - "mal_id" INTEGER, - "fanpage_url" VARCHAR(255), - "liked" INTEGER NOT NULL DEFAULT 0, - "deleted_at" TIMESTAMPTZ, - "updated_at" TIMESTAMPTZ NOT NULL, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "characters_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "voice_actors" ( - "id" UUID NOT NULL, - "media_character_id" UUID NOT NULL, - "language" VARCHAR(115) NOT NULL, - "staff_id" UUID NOT NULL, - - CONSTRAINT "voice_actors_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "staff" ( - "id" UUID NOT NULL, - "name" VARCHAR(255) NOT NULL, - "image" VARCHAR(255), - "mal_id" INTEGER, - "deleted_at" TIMESTAMPTZ, - "updated_at" TIMESTAMPTZ NOT NULL, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "staff_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "episodes" ( - "id" UUID NOT NULL, - "media_id" UUID NOT NULL, - "episode" SMALLINT NOT NULL, - "mal_url" VARCHAR(255), - "forum_url" VARCHAR(255), - "title" VARCHAR(155) NOT NULL, - "title_origin" VARCHAR(155), - "title_romanji" VARCHAR(155), - "aired_at" DATE, - "filler" BOOLEAN NOT NULL, - "recap" BOOLEAN NOT NULL, - "total_score" INTEGER NOT NULL DEFAULT 0, - "score_count" INTEGER NOT NULL DEFAULT 0, - "deleted_at" TIMESTAMPTZ, - "updated_at" TIMESTAMPTZ NOT NULL, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "created_by_id" UUID NOT NULL, - - CONSTRAINT "episodes_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "videos" ( - "id" UUID NOT NULL, - "video_code" VARCHAR(255) NOT NULL, - "short_code" VARCHAR(255), - "thumbnail_code" VARCHAR(255), - "download_code" VARCHAR(255), - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "deleted_at" TIMESTAMPTZ, - "updated_at" TIMESTAMPTZ NOT NULL, - "episode_id" UUID NOT NULL, - "created_by_id" UUID NOT NULL, - - CONSTRAINT "videos_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "video_submissions" ( - "video_id" UUID NOT NULL, - "status" "status_submission" NOT NULL DEFAULT 'pending', - "reviewed_at" TIMESTAMPTZ, - "reason" TEXT, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "created_by_id" UUID NOT NULL, - "reviewer_id" UUID, - - CONSTRAINT "video_submissions_pkey" PRIMARY KEY ("video_id") -); - --- CreateTable -CREATE TABLE "video_services" ( - "id" UUID NOT NULL, - "name" VARCHAR(155) NOT NULL, - "resolution" SMALLINT NOT NULL, - "domain" VARCHAR(255) NOT NULL, - "image_url" VARCHAR(255), - "hex_color" VARCHAR(10), - "endpoint_video" VARCHAR(255) NOT NULL, - "endpoint_short" VARCHAR(255), - "endpoint_image" VARCHAR(255), - "endpoint_download" VARCHAR(255), - "deleted_at" TIMESTAMPTZ, - "updated_at" TIMESTAMPTZ NOT NULL, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "video_services_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "video_service_submissions" ( - "video_service_id" UUID NOT NULL, - "status" "status_submission" NOT NULL DEFAULT 'pending', - "reviewed_at" TIMESTAMPTZ, - "reason" TEXT, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "created_by_id" UUID NOT NULL, - "reviewer_id" UUID, - - CONSTRAINT "video_service_submissions_pkey" PRIMARY KEY ("video_service_id") -); - --- CreateTable -CREATE TABLE "comments" ( - "id" UUID NOT NULL, - "content" TEXT NOT NULL, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updated_at" TIMESTAMPTZ NOT NULL, - "deleted_at" TIMESTAMPTZ, - "user_id" UUID NOT NULL, - "episode_id" UUID NOT NULL, - - CONSTRAINT "comments_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "comment_likes" ( - "user_id" UUID NOT NULL, - "comment_id" UUID NOT NULL, - "type" "like_type" NOT NULL, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "comment_likes_pkey" PRIMARY KEY ("user_id","comment_id") -); - --- CreateTable -CREATE TABLE "comment_audit_logs" ( - "id" UUID NOT NULL, - "action" "audit_action" NOT NULL, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "comment_id" UUID NOT NULL, - "performed_by_id" UUID NOT NULL, - - CONSTRAINT "comment_audit_logs_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "comment_reports" ( - "id" UUID NOT NULL, - "title" VARCHAR(115) NOT NULL, - "status" "status_submission" NOT NULL, - "description" TEXT, - "reported_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "closed_at" TIMESTAMPTZ, - "reporter_id" UUID NOT NULL, - "comment_id" UUID NOT NULL, - - CONSTRAINT "comment_reports_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "provisioned_users" ( - "provisioned_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "reason" VARCHAR(255), - "admin_id" UUID NOT NULL, - "user_id" UUID NOT NULL, - - CONSTRAINT "provisioned_users_pkey" PRIMARY KEY ("admin_id","user_id") -); - --- CreateTable -CREATE TABLE "countries" ( - "id" UUID NOT NULL, - "name" VARCHAR(155) NOT NULL, - "slug" VARCHAR(165) NOT NULL, - "code" VARCHAR(3) NOT NULL, - "flag" VARCHAR(255), - "banner" VARCHAR(255), - - CONSTRAINT "countries_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "home_media_banners" ( - "id" UUID NOT NULL, - "priority" SMALLINT NOT NULL, - "start_show" DATE NOT NULL, - "end_show" DATE NOT NULL, - "created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, - "media_id" UUID NOT NULL, - "created_by_id" UUID NOT NULL, - - CONSTRAINT "home_media_banners_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "_VideoToVideoService" ( - "A" UUID NOT NULL, - "B" UUID NOT NULL, - - CONSTRAINT "_VideoToVideoService_AB_pkey" PRIMARY KEY ("A","B") -); - --- CreateIndex -CREATE UNIQUE INDEX "users_email_key" ON "users"("email"); - --- CreateIndex -CREATE UNIQUE INDEX "users_username_key" ON "users"("username"); - --- CreateIndex -CREATE INDEX "users_email_idx" ON "users"("email"); - --- CreateIndex -CREATE INDEX "users_username_idx" ON "users"("username"); - --- CreateIndex -CREATE UNIQUE INDEX "medias_mal_id_key" ON "medias"("mal_id"); - --- CreateIndex -CREATE UNIQUE INDEX "media_submissions_media_id_key" ON "media_submissions"("media_id"); - --- CreateIndex -CREATE UNIQUE INDEX "media_types_name_key" ON "media_types"("name"); - --- CreateIndex -CREATE UNIQUE INDEX "media_sources_name_key" ON "media_sources"("name"); - --- CreateIndex -CREATE UNIQUE INDEX "media_statuses_name_key" ON "media_statuses"("name"); - --- CreateIndex -CREATE UNIQUE INDEX "media_age_ratings_name_key" ON "media_age_ratings"("name"); - --- CreateIndex -CREATE UNIQUE INDEX "producers_mal_id_key" ON "producers"("mal_id"); - --- CreateIndex -CREATE UNIQUE INDEX "genres_mal_id_key" ON "genres"("mal_id"); - --- CreateIndex -CREATE UNIQUE INDEX "characters_mal_id_key" ON "characters"("mal_id"); - --- CreateIndex -CREATE UNIQUE INDEX "staff_mal_id_key" ON "staff"("mal_id"); - --- CreateIndex -CREATE INDEX "episodes_media_id_episode_idx" ON "episodes"("media_id", "episode"); - --- CreateIndex -CREATE UNIQUE INDEX "video_services_name_resolution_key" ON "video_services"("name", "resolution"); - --- CreateIndex -CREATE UNIQUE INDEX "home_media_banners_priority_key" ON "home_media_banners"("priority"); - --- CreateIndex -CREATE INDEX "_VideoToVideoService_B_index" ON "_VideoToVideoService"("B"); - --- AddForeignKey -ALTER TABLE "users" ADD CONSTRAINT "users_countryId_fkey" FOREIGN KEY ("countryId") REFERENCES "countries"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_addresses" ADD CONSTRAINT "user_addresses_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_oauth_accounts" ADD CONSTRAINT "user_oauth_accounts_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_sessions" ADD CONSTRAINT "user_sessions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_preferences" ADD CONSTRAINT "user_preferences_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_preferences" ADD CONSTRAINT "user_preferences_char_as_partner_id_fkey" FOREIGN KEY ("char_as_partner_id") REFERENCES "characters"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_genre_preferences" ADD CONSTRAINT "user_genre_preferences_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user_preferences"("user_id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_genre_preferences" ADD CONSTRAINT "user_genre_preferences_genre_id_fkey" FOREIGN KEY ("genre_id") REFERENCES "genres"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_rating_preferences" ADD CONSTRAINT "user_rating_preferences_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user_preferences"("user_id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_rating_preferences" ADD CONSTRAINT "user_rating_preferences_rating_id_fkey" FOREIGN KEY ("rating_id") REFERENCES "media_age_ratings"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_country_preferences" ADD CONSTRAINT "user_country_preferences_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "user_preferences"("user_id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_country_preferences" ADD CONSTRAINT "user_country_preferences_country_id_fkey" FOREIGN KEY ("country_id") REFERENCES "countries"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_follows" ADD CONSTRAINT "user_follows_follower_id_fkey" FOREIGN KEY ("follower_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_follows" ADD CONSTRAINT "user_follows_following_id_fkey" FOREIGN KEY ("following_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_watch_histories" ADD CONSTRAINT "user_watch_histories_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "user_watch_histories" ADD CONSTRAINT "user_watch_histories_episode_id_fkey" FOREIGN KEY ("episode_id") REFERENCES "episodes"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "collection_members" ADD CONSTRAINT "collection_members_collection_id_fkey" FOREIGN KEY ("collection_id") REFERENCES "collections"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "collection_members" ADD CONSTRAINT "collection_members_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "collection_members" ADD CONSTRAINT "collection_members_invited_by_id_fkey" FOREIGN KEY ("invited_by_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "medias" ADD CONSTRAINT "medias_type_id_fkey" FOREIGN KEY ("type_id") REFERENCES "media_types"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "medias" ADD CONSTRAINT "medias_source_id_fkey" FOREIGN KEY ("source_id") REFERENCES "media_sources"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "medias" ADD CONSTRAINT "medias_status_id_fkey" FOREIGN KEY ("status_id") REFERENCES "media_statuses"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "medias" ADD CONSTRAINT "medias_age_rating_id_fkey" FOREIGN KEY ("age_rating_id") REFERENCES "media_age_ratings"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "medias" ADD CONSTRAINT "medias_country_id_fkey" FOREIGN KEY ("country_id") REFERENCES "countries"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "medias" ADD CONSTRAINT "medias_updated_by_id_fkey" FOREIGN KEY ("updated_by_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "medias" ADD CONSTRAINT "medias_deleted_by_id_fkey" FOREIGN KEY ("deleted_by_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_submissions" ADD CONSTRAINT "media_submissions_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_submissions" ADD CONSTRAINT "media_submissions_submitter_id_fkey" FOREIGN KEY ("submitter_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_submissions" ADD CONSTRAINT "media_submissions_reviewer_id_fkey" FOREIGN KEY ("reviewer_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_collections" ADD CONSTRAINT "media_collections_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_collections" ADD CONSTRAINT "media_collections_collection_id_fkey" FOREIGN KEY ("collection_id") REFERENCES "collections"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_collections" ADD CONSTRAINT "media_collections_added_by_id_fkey" FOREIGN KEY ("added_by_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_trailers" ADD CONSTRAINT "media_trailers_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_producers" ADD CONSTRAINT "media_producers_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_producers" ADD CONSTRAINT "media_producers_producer_id_fkey" FOREIGN KEY ("producer_id") REFERENCES "producers"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_licensors" ADD CONSTRAINT "media_licensors_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_licensors" ADD CONSTRAINT "media_licensors_licensor_id_fkey" FOREIGN KEY ("licensor_id") REFERENCES "producers"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_studios" ADD CONSTRAINT "media_studios_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_studios" ADD CONSTRAINT "media_studios_studio_id_fkey" FOREIGN KEY ("studio_id") REFERENCES "producers"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "producers" ADD CONSTRAINT "producers_created_by_id_fkey" FOREIGN KEY ("created_by_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_genres" ADD CONSTRAINT "media_genres_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_genres" ADD CONSTRAINT "media_genres_genre_id_fkey" FOREIGN KEY ("genre_id") REFERENCES "genres"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_explicit_genres" ADD CONSTRAINT "media_explicit_genres_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_explicit_genres" ADD CONSTRAINT "media_explicit_genres_genre_id_fkey" FOREIGN KEY ("genre_id") REFERENCES "genres"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_themes" ADD CONSTRAINT "media_themes_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_themes" ADD CONSTRAINT "media_themes_genre_id_fkey" FOREIGN KEY ("genre_id") REFERENCES "genres"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_demographics" ADD CONSTRAINT "media_demographics_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_demographics" ADD CONSTRAINT "media_demographics_demographic_id_fkey" FOREIGN KEY ("demographic_id") REFERENCES "genres"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_relations" ADD CONSTRAINT "media_relations_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_relations" ADD CONSTRAINT "media_relations_related_media_id_fkey" FOREIGN KEY ("related_media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_external_links" ADD CONSTRAINT "media_external_links_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_characters" ADD CONSTRAINT "media_characters_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "media_characters" ADD CONSTRAINT "media_characters_character_id_fkey" FOREIGN KEY ("character_id") REFERENCES "characters"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "voice_actors" ADD CONSTRAINT "voice_actors_staff_id_fkey" FOREIGN KEY ("staff_id") REFERENCES "staff"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "voice_actors" ADD CONSTRAINT "voice_actors_media_character_id_fkey" FOREIGN KEY ("media_character_id") REFERENCES "media_characters"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "episodes" ADD CONSTRAINT "episodes_created_by_id_fkey" FOREIGN KEY ("created_by_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "videos" ADD CONSTRAINT "videos_episode_id_fkey" FOREIGN KEY ("episode_id") REFERENCES "episodes"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "video_submissions" ADD CONSTRAINT "video_submissions_created_by_id_fkey" FOREIGN KEY ("created_by_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "video_submissions" ADD CONSTRAINT "video_submissions_reviewer_id_fkey" FOREIGN KEY ("reviewer_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "video_submissions" ADD CONSTRAINT "video_submissions_video_id_fkey" FOREIGN KEY ("video_id") REFERENCES "videos"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "video_service_submissions" ADD CONSTRAINT "video_service_submissions_created_by_id_fkey" FOREIGN KEY ("created_by_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "video_service_submissions" ADD CONSTRAINT "video_service_submissions_reviewer_id_fkey" FOREIGN KEY ("reviewer_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "video_service_submissions" ADD CONSTRAINT "video_service_submissions_video_service_id_fkey" FOREIGN KEY ("video_service_id") REFERENCES "video_services"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "comments" ADD CONSTRAINT "comments_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "comments" ADD CONSTRAINT "comments_episode_id_fkey" FOREIGN KEY ("episode_id") REFERENCES "episodes"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "comment_likes" ADD CONSTRAINT "comment_likes_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "comment_likes" ADD CONSTRAINT "comment_likes_comment_id_fkey" FOREIGN KEY ("comment_id") REFERENCES "comments"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "comment_audit_logs" ADD CONSTRAINT "comment_audit_logs_comment_id_fkey" FOREIGN KEY ("comment_id") REFERENCES "comments"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "comment_audit_logs" ADD CONSTRAINT "comment_audit_logs_performed_by_id_fkey" FOREIGN KEY ("performed_by_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "comment_reports" ADD CONSTRAINT "comment_reports_reporter_id_fkey" FOREIGN KEY ("reporter_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "comment_reports" ADD CONSTRAINT "comment_reports_comment_id_fkey" FOREIGN KEY ("comment_id") REFERENCES "comments"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "provisioned_users" ADD CONSTRAINT "provisioned_users_admin_id_fkey" FOREIGN KEY ("admin_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "provisioned_users" ADD CONSTRAINT "provisioned_users_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "home_media_banners" ADD CONSTRAINT "home_media_banners_media_id_fkey" FOREIGN KEY ("media_id") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "home_media_banners" ADD CONSTRAINT "home_media_banners_created_by_id_fkey" FOREIGN KEY ("created_by_id") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_VideoToVideoService" ADD CONSTRAINT "_VideoToVideoService_A_fkey" FOREIGN KEY ("A") REFERENCES "videos"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "_VideoToVideoService" ADD CONSTRAINT "_VideoToVideoService_B_fkey" FOREIGN KEY ("B") REFERENCES "video_services"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20260528094152_remove_oauth_profile_from_user/migration.sql b/prisma/migrations/20260528094152_remove_oauth_profile_from_user/migration.sql deleted file mode 100644 index a491978..0000000 --- a/prisma/migrations/20260528094152_remove_oauth_profile_from_user/migration.sql +++ /dev/null @@ -1,10 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `auth_provider` on the `users` table. All the data in the column will be lost. - - You are about to drop the column `provider_token` on the `users` table. All the data in the column will be lost. - -*/ --- AlterTable -ALTER TABLE "users" DROP COLUMN "auth_provider", -DROP COLUMN "provider_token"; diff --git a/prisma/migrations/20260528094932_remove_duplicate_oauth_activity_report/migration.sql b/prisma/migrations/20260528094932_remove_duplicate_oauth_activity_report/migration.sql deleted file mode 100644 index 0ceb718..0000000 --- a/prisma/migrations/20260528094932_remove_duplicate_oauth_activity_report/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `last_login` on the `user_oauth_accounts` table. All the data in the column will be lost. - -*/ --- AlterTable -ALTER TABLE "user_oauth_accounts" DROP COLUMN "last_login"; diff --git a/prisma/migrations/20260528141807_increate_limit_oauth_token/migration.sql b/prisma/migrations/20260528141807_increate_limit_oauth_token/migration.sql deleted file mode 100644 index a896e3b..0000000 --- a/prisma/migrations/20260528141807_increate_limit_oauth_token/migration.sql +++ /dev/null @@ -1,12 +0,0 @@ --- DropForeignKey -ALTER TABLE "user_preferences" DROP CONSTRAINT "user_preferences_char_as_partner_id_fkey"; - --- AlterTable -ALTER TABLE "user_oauth_accounts" ALTER COLUMN "provider_token" SET DATA TYPE TEXT, -ALTER COLUMN "refresh_token" SET DATA TYPE TEXT; - --- AlterTable -ALTER TABLE "user_preferences" ALTER COLUMN "char_as_partner_id" DROP NOT NULL; - --- AddForeignKey -ALTER TABLE "user_preferences" ADD CONSTRAINT "user_preferences_char_as_partner_id_fkey" FOREIGN KEY ("char_as_partner_id") REFERENCES "characters"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/prisma/migrations/20260528142420_add_expires_in_session/migration.sql b/prisma/migrations/20260528142420_add_expires_in_session/migration.sql deleted file mode 100644 index 8f4ed35..0000000 --- a/prisma/migrations/20260528142420_add_expires_in_session/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ -/* - Warnings: - - - Added the required column `valid_until` to the `user_sessions` table without a default value. This is not possible if the table is not empty. - -*/ --- AlterTable -ALTER TABLE "user_sessions" ADD COLUMN "valid_until" TIMESTAMPTZ NOT NULL; diff --git a/prisma/migrations/20260530045455_make_embed_url_unique/migration.sql b/prisma/migrations/20260530045455_make_embed_url_unique/migration.sql deleted file mode 100644 index a9637c5..0000000 --- a/prisma/migrations/20260530045455_make_embed_url_unique/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ -/* - Warnings: - - - A unique constraint covering the columns `[embed_url]` on the table `media_trailers` will be added. If there are existing duplicate values, this will fail. - -*/ --- CreateIndex -CREATE UNIQUE INDEX "media_trailers_embed_url_key" ON "media_trailers"("embed_url"); diff --git a/prisma/migrations/20260530050918_make_cc_as_unique/migration.sql b/prisma/migrations/20260530050918_make_cc_as_unique/migration.sql deleted file mode 100644 index d6056a2..0000000 --- a/prisma/migrations/20260530050918_make_cc_as_unique/migration.sql +++ /dev/null @@ -1,8 +0,0 @@ -/* - Warnings: - - - A unique constraint covering the columns `[code]` on the table `countries` will be added. If there are existing duplicate values, this will fail. - -*/ --- CreateIndex -CREATE UNIQUE INDEX "countries_code_key" ON "countries"("code"); diff --git a/prisma/migrations/20260531041413_remove_unused_media_column/migration.sql b/prisma/migrations/20260531041413_remove_unused_media_column/migration.sql deleted file mode 100644 index 07d2b5f..0000000 --- a/prisma/migrations/20260531041413_remove_unused_media_column/migration.sql +++ /dev/null @@ -1,10 +0,0 @@ -/* - Warnings: - - - You are about to drop the column `approver_id` on the `medias` table. All the data in the column will be lost. - - You are about to drop the column `created_by_id` on the `medias` table. All the data in the column will be lost. - -*/ --- AlterTable -ALTER TABLE "medias" DROP COLUMN "approver_id", -DROP COLUMN "created_by_id"; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml deleted file mode 100644 index 044d57c..0000000 --- a/prisma/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (e.g., Git) -provider = "postgresql" diff --git a/prisma/schema.prisma b/prisma/schema.prisma index becd916..f0572ce 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -11,15 +11,15 @@ generator client { provider = "prisma-client-js" } + generator dbml { provider = "prisma-dbml-generator" } + datasource db { provider = "postgresql" } - - /** * ---------------------------------- * Enum Definitions @@ -98,283 +98,292 @@ enum collection_access_level { viewer } - - /** * ---------------------------------- * Model for User and related entities * ---------------------------------- */ model User { - id String @id @db.Uuid @default(uuid(7)) - email String @unique - password String? @db.VarChar(255) - username String @unique @db.VarChar(28) - fullname String @db.VarChar(32) - avatar String? @db.VarChar(255) - bio String? @db.Text - datebirth DateTime? @db.Date - role user_role @default(user) - sex user_sex? - phone_number String? @db.VarChar(20) - country Country? @relation(fields: [countryId], references: [id], name: "UserCountry") - address UserAddress? - preferences UserPreference? - created_at DateTime @default(now()) @db.Timestamptz() - updated_at DateTime @updatedAt @db.Timestamptz() - deleted_at DateTime? @db.Timestamptz() - - countryId String? @db.Uuid - oauth_accounts UserOauthAccounts[] - sessions UserSession[] - followers UserFollow[] @relation("UserFollowFollowing") - following UserFollow[] @relation("UserFollowFollower") - provisioned_as_admin ProvisionedUser[] @relation("ProvisionedUserAdmin") - provisioned_as_user ProvisionedUser[] @relation("ProvisionedUserUser") - created_producers Producer[] - submitted_media MediaSubmission[] @relation("MediaSubmissionSubmitter") - reviewed_media MediaSubmission[] @relation("MediaSubmissionReviewer") - updated_media Media[] @relation("MediaUpdater") - deleted_media Media[] @relation("MediaDeleter") - created_episodes Episode[] - submitted_videos VideoSubmission[] @relation("VideoSubmissionSubmitter") - reviewed_videos VideoSubmission[] @relation("VideoSubmissionReviewer") + id String @id @default(uuid(7)) @db.Uuid + email String @unique + password String? @db.VarChar(255) + username String @unique @db.VarChar(28) + fullname String @db.VarChar(32) + avatar String? @db.VarChar(255) + bio String? @db.Text + datebirth DateTime? @db.Date + role user_role @default(user) + sex user_sex? + phone_number String? @db.VarChar(20) + country Country? @relation(fields: [countryId], references: [id], name: "UserCountry") + address UserAddress? + preferences UserPreference? + created_at DateTime @default(now()) @db.Timestamptz() + updated_at DateTime @updatedAt @db.Timestamptz() + deleted_at DateTime? @db.Timestamptz() + + countryId String? @db.Uuid + oauth_accounts UserOauthAccounts[] + sessions UserSession[] + followers UserFollow[] @relation("UserFollowFollowing") + following UserFollow[] @relation("UserFollowFollower") + provisioned_as_admin ProvisionedUser[] @relation("ProvisionedUserAdmin") + provisioned_as_user ProvisionedUser[] @relation("ProvisionedUserUser") + created_producers Producer[] + submitted_media MediaSubmission[] @relation("MediaSubmissionSubmitter") + reviewed_media MediaSubmission[] @relation("MediaSubmissionReviewer") + updated_media Media[] @relation("MediaUpdater") + deleted_media Media[] @relation("MediaDeleter") + created_episodes Episode[] + submitted_videos VideoSubmission[] @relation("VideoSubmissionSubmitter") + reviewed_videos VideoSubmission[] @relation("VideoSubmissionReviewer") submitted_video_services VideoServiceSubmission[] @relation("VideoServiceSubmissionSubmitter") reviewed_video_services VideoServiceSubmission[] @relation("VideoServiceSubmissionReviewer") - comments Comment[] - comment_likes CommentLike[] - comment_audit_logs CommentAuditLog[] - comment_reports CommentReport[] - home_media_banners HomeMediaBanner[] - watch_histories UserWatchHistory[] - saved_collections CollectionMember[] @relation("CollectionMemberUser") - invited_collections CollectionMember[] @relation("CollectionMemberInviter") - contributed_collections MediaCollection[] @relation("MediaCollectionAdder") + comments Comment[] + comment_likes CommentLike[] + comment_audit_logs CommentAuditLog[] + comment_reports CommentReport[] + home_media_banners HomeMediaBanner[] + watch_histories UserWatchHistory[] + saved_collections CollectionMember[] @relation("CollectionMemberUser") + invited_collections CollectionMember[] @relation("CollectionMemberInviter") + contributed_collections MediaCollection[] @relation("MediaCollectionAdder") + @@index([email]) @@index([username]) @@map("users") } model UserAddress { - user_id String @id @db.Uuid - address String @db.VarChar(255) - district String @db.VarChar(100) - city String @db.VarChar(100) - province String @db.VarChar(100) - postal_code String @db.VarChar(20) - coordinate String? @db.VarChar(50) + user_id String @id @db.Uuid + address String @db.VarChar(255) + district String @db.VarChar(100) + city String @db.VarChar(100) + province String @db.VarChar(100) + postal_code String @db.VarChar(20) + coordinate String? @db.VarChar(50) updated_at DateTime @updatedAt @db.Timestamptz() user User @relation(fields: [user_id], references: [id]) + @@map("user_addresses") } model UserOauthAccounts { - id String @id @db.Uuid @default(uuid(7)) - user User @relation(fields: [user_id], references: [id]) - provider_name auth_provider - provider_sub String? @db.VarChar(255) - provider_email String? @db.VarChar(255) - provider_token String? @db.Text - refresh_token String? @db.Text - expires_at DateTime? @db.Timestamptz() - created_at DateTime @default(now()) @db.Timestamptz() - updated_at DateTime @updatedAt @db.Timestamptz() + id String @id @default(uuid(7)) @db.Uuid + user User @relation(fields: [user_id], references: [id]) + provider_name auth_provider + provider_sub String? @db.VarChar(255) + provider_email String? @db.VarChar(255) + provider_token String? @db.Text + refresh_token String? @db.Text + expires_at DateTime? @db.Timestamptz() + created_at DateTime @default(now()) @db.Timestamptz() + updated_at DateTime @updatedAt @db.Timestamptz() + + user_id String @db.Uuid - user_id String @db.Uuid @@map("user_oauth_accounts") } model UserSession { - id String @id @db.Uuid @default(uuid(7)) - user User @relation(fields: [user_id], references: [id]) + id String @id @default(uuid(7)) @db.Uuid + user User @relation(fields: [user_id], references: [id]) device_type device_type - os_type String? @db.VarChar(50) - os_version String? @db.VarChar(50) - browser_name String? @db.VarChar(50) - browser_version String? @db.VarChar(50) - ip_login String? @db.Inet() - valid_until DateTime @db.Timestamptz() - login_at DateTime @default(now()) @db.Timestamptz() - logout_at DateTime? @db.Timestamptz() + os_type String? @db.VarChar(50) + os_version String? @db.VarChar(50) + browser_name String? @db.VarChar(50) + browser_version String? @db.VarChar(50) + ip_login String? @db.Inet() + valid_until DateTime @db.Timestamptz() + login_at DateTime @default(now()) @db.Timestamptz() + logout_at DateTime? @db.Timestamptz() + + user_id String @db.Uuid - user_id String @db.Uuid @@map("user_sessions") } model UserPreference { - user User @relation(fields: [user_id], references: [id]) - char_as_partner Character? @relation(fields: [char_as_partner_id], references: [id]) - comment_picture String? @db.VarChar(255) - enable_watch_history Boolean @default(true) - enable_search_history Boolean @default(false) - is_private_account Boolean @default(false) - can_message_me Boolean @default(true) - publish_birthday Boolean @default(false) - publish_email Boolean @default(false) - publish_phone_number Boolean @default(false) - publish_country Boolean @default(false) - publish_partner Boolean @default(true) - subscribe_to_newsletter Boolean @default(true) - enable_security_alerts Boolean @default(true) + user User @relation(fields: [user_id], references: [id]) + char_as_partner Character? @relation(fields: [char_as_partner_id], references: [id]) + comment_picture String? @db.VarChar(255) + enable_watch_history Boolean @default(true) + enable_search_history Boolean @default(false) + is_private_account Boolean @default(false) + can_message_me Boolean @default(true) + publish_birthday Boolean @default(false) + publish_email Boolean @default(false) + publish_phone_number Boolean @default(false) + publish_country Boolean @default(false) + publish_partner Boolean @default(true) + subscribe_to_newsletter Boolean @default(true) + enable_security_alerts Boolean @default(true) genre_preferences UserGenrePreference[] rating_preferences UserRatingPreference[] country_preferences UserCountryPreference[] - user_id String @id @db.Uuid - char_as_partner_id String? @db.Uuid + user_id String @id @db.Uuid + char_as_partner_id String? @db.Uuid + @@map("user_preferences") } model UserGenrePreference { - user UserPreference @relation(fields: [user_id], references: [user_id]) - genre Genre @relation(fields: [genre_id], references: [id]) - state user_preference_state + user UserPreference @relation(fields: [user_id], references: [user_id]) + genre Genre @relation(fields: [genre_id], references: [id]) + state user_preference_state - user_id String @db.Uuid + user_id String @db.Uuid genre_id String @db.Uuid + @@id([user_id, genre_id]) @@map("user_genre_preferences") } model UserRatingPreference { - user UserPreference @relation(fields: [user_id], references: [user_id]) - rating MediaAgeRating @relation(fields: [rating_id], references: [id]) - state user_preference_state + user UserPreference @relation(fields: [user_id], references: [user_id]) + rating MediaAgeRating @relation(fields: [rating_id], references: [id]) + state user_preference_state user_id String @db.Uuid rating_id String @db.Uuid + @@id([user_id, rating_id]) @@map("user_rating_preferences") } model UserCountryPreference { - user UserPreference @relation(fields: [user_id], references: [user_id]) - country Country @relation(fields: [country_id], references: [id]) + user UserPreference @relation(fields: [user_id], references: [user_id]) + country Country @relation(fields: [country_id], references: [id]) state user_preference_state - user_id String @db.Uuid + user_id String @db.Uuid country_id String @db.Uuid + @@id([user_id, country_id]) @@map("user_country_preferences") } model UserFollow { - follower User @relation("UserFollowFollower", fields: [follower_id], references: [id]) - following User @relation("UserFollowFollowing", fields: [following_id], references: [id]) - created_at DateTime @default(now()) @db.Timestamptz() + follower User @relation("UserFollowFollower", fields: [follower_id], references: [id]) + following User @relation("UserFollowFollowing", fields: [following_id], references: [id]) + created_at DateTime @default(now()) @db.Timestamptz() + + follower_id String @db.Uuid + following_id String @db.Uuid - follower_id String @db.Uuid - following_id String @db.Uuid @@id([follower_id, following_id]) @@map("user_follows") } model UserWatchHistory { - user User @relation(fields: [user_id], references: [id]) - episode Episode @relation(fields: [episode_id], references: [id]) - updated_at DateTime @updatedAt @db.Timestamptz() + user User @relation(fields: [user_id], references: [id]) + episode Episode @relation(fields: [episode_id], references: [id]) + updated_at DateTime @updatedAt @db.Timestamptz() + + user_id String @db.Uuid + episode_id String @db.Uuid - user_id String @db.Uuid - episode_id String @db.Uuid @@id([user_id, episode_id]) @@map("user_watch_histories") } model Collection { - id String @id @db.Uuid @default(uuid(7)) - name String @db.VarChar(64) - code String? @db.VarChar(12) - cover_url String? @db.VarChar(255) - privacy privacy_level @default(private) - created_at DateTime @default(now()) @db.Timestamptz() - updated_at DateTime @updatedAt @db.Timestamptz() + id String @id @default(uuid(7)) @db.Uuid + name String @db.VarChar(64) + code String? @db.VarChar(12) + cover_url String? @db.VarChar(255) + privacy privacy_level @default(private) + created_at DateTime @default(now()) @db.Timestamptz() + updated_at DateTime @updatedAt @db.Timestamptz() + + saved_media MediaCollection[] + members CollectionMember[] - saved_media MediaCollection[] - members CollectionMember[] @@map("collections") } model CollectionMember { - collection Collection @relation(fields: [collection_id], references: [id]) - user User @relation(fields: [user_id], references: [id], name: "CollectionMemberUser") - access_level collection_access_level - invited_by User? @relation(fields: [invited_by_id], references: [id], name: "CollectionMemberInviter") - invited_at DateTime? @db.Timestamptz() + collection Collection @relation(fields: [collection_id], references: [id]) + user User @relation(fields: [user_id], references: [id], name: "CollectionMemberUser") + access_level collection_access_level + invited_by User? @relation(fields: [invited_by_id], references: [id], name: "CollectionMemberInviter") + invited_at DateTime? @db.Timestamptz() - collection_id String @db.Uuid - user_id String @db.Uuid + collection_id String @db.Uuid + user_id String @db.Uuid invited_by_id String? @db.Uuid + @@id([collection_id, user_id]) @@map("collection_members") } - - /** * ---------------------------------- * Model for Media and related entities * ---------------------------------- */ model Media { - id String @id @db.Uuid @default(uuid(7)) - mal_id Int @unique - title String @db.VarChar(255) - title_secondary String? @db.VarChar(255) - title_original String? @db.VarChar(255) - title_synonyms String[] @db.VarChar(255) - trailer MediaTrailer? - synopsis String? @db.Text - small_image_url String? @db.VarChar(255) - medium_image_url String @db.VarChar(255) - large_image_url String? @db.VarChar(255) - type MediaType @relation(fields: [type_id], references: [id]) - source MediaSource? @relation(fields: [source_id], references: [id]) - status MediaStatus? @relation(fields: [status_id], references: [id]) - airing Boolean - start_airing DateTime? @db.Date - end_airing DateTime? @db.Date - age_rating MediaAgeRating? @relation(fields: [age_rating_id], references: [id]) - score Decimal? @db.Decimal(2, 2) - score_total Int @default(0) - score_count Int @default(0) - background String? @db.Text - season media_season - year Int? @db.SmallInt - country Country? @relation(fields: [country_id], references: [id]) - broadcast_day String? @db.VarChar(20) - producers MediaProducer[] - licensors MediaLicensor[] - studios MediaStudio[] - genres MediaGenre[] - explicit_genres MediaExplicitGenre[] - themes MediaTheme[] - demographics MediaDemographic[] - relations MediaRelation[] @relation("MediaRelationMedia") - external_links MediaExternalLink[] - characters MediaCharacter[] - submissions MediaSubmission? - created_at DateTime @default(now()) @db.Timestamptz() - updated_by User? @relation(fields: [updated_by_id], references: [id], name: "MediaUpdater") - updated_at DateTime @updatedAt @db.Timestamptz() - deleted_by User? @relation(fields: [deleted_by_id], references: [id], name: "MediaDeleter") - deleted_at DateTime? @db.Timestamptz() + id String @id @default(uuid(7)) @db.Uuid + mal_id Int @unique + title String @db.VarChar(255) + title_secondary String? @db.VarChar(255) + title_original String? @db.VarChar(255) + title_synonyms String[] @db.VarChar(255) + trailer MediaTrailer? + synopsis String? @db.Text + small_image_url String? @db.VarChar(255) + medium_image_url String @db.VarChar(255) + large_image_url String? @db.VarChar(255) + type MediaType @relation(fields: [type_id], references: [id]) + source MediaSource? @relation(fields: [source_id], references: [id]) + status MediaStatus? @relation(fields: [status_id], references: [id]) + airing Boolean + start_airing DateTime? @db.Date + end_airing DateTime? @db.Date + age_rating MediaAgeRating? @relation(fields: [age_rating_id], references: [id]) + score Decimal? @db.Decimal(2, 2) + score_total Int @default(0) + score_count Int @default(0) + background String? @db.Text + season media_season + year Int? @db.SmallInt + country Country? @relation(fields: [country_id], references: [id]) + broadcast_day String? @db.VarChar(20) + producers MediaProducer[] + licensors MediaLicensor[] + studios MediaStudio[] + genres MediaGenre[] + explicit_genres MediaExplicitGenre[] + themes MediaTheme[] + demographics MediaDemographic[] + relations MediaRelation[] @relation("MediaRelationMedia") + external_links MediaExternalLink[] + characters MediaCharacter[] + submissions MediaSubmission? + created_at DateTime @default(now()) @db.Timestamptz() + updated_by User? @relation(fields: [updated_by_id], references: [id], name: "MediaUpdater") + updated_at DateTime @updatedAt @db.Timestamptz() + deleted_by User? @relation(fields: [deleted_by_id], references: [id], name: "MediaDeleter") + deleted_at DateTime? @db.Timestamptz() + + type_id String @db.Uuid + source_id String @db.Uuid + status_id String @db.Uuid + age_rating_id String? @db.Uuid + country_id String? @db.Uuid + related_media MediaRelation[] @relation("MediaRelationRelatedMedia") + updated_by_id String? @db.Uuid + deleted_by_id String? @db.Uuid + home_media_banners HomeMediaBanner[] + saved_to_collections MediaCollection[] - type_id String @db.Uuid - source_id String @db.Uuid - status_id String @db.Uuid - age_rating_id String? @db.Uuid - country_id String? @db.Uuid - related_media MediaRelation[] @relation("MediaRelationRelatedMedia") - updated_by_id String? @db.Uuid - deleted_by_id String? @db.Uuid - home_media_banners HomeMediaBanner[] - saved_to_collections MediaCollection[] @@map("medias") } model MediaSubmission { - id String @id @db.Uuid @default(uuid(7)) + id String @id @default(uuid(7)) @db.Uuid media Media @relation(fields: [media_id], references: [id]) submitter User @relation(fields: [submitter_id], references: [id], name: "MediaSubmissionSubmitter") status status_submission @default(pending) @@ -383,443 +392,477 @@ model MediaSubmission { reason String? @db.Text created_at DateTime @default(now()) @db.Timestamptz() - media_id String @db.Uuid @unique - submitter_id String @db.Uuid + media_id String @unique @db.Uuid + submitter_id String @db.Uuid reviewer_id String? @db.Uuid + @@map("media_submissions") } model MediaCollection { - media Media @relation(fields: [media_id], references: [id]) - collection Collection @relation(fields: [collection_id], references: [id]) - added_by User @relation(fields: [added_by_id], references: [id], name: "MediaCollectionAdder") - added_at DateTime @default(now()) @db.Timestamptz() + media Media @relation(fields: [media_id], references: [id]) + collection Collection @relation(fields: [collection_id], references: [id]) + added_by User @relation(fields: [added_by_id], references: [id], name: "MediaCollectionAdder") + added_at DateTime @default(now()) @db.Timestamptz() media_id String @db.Uuid collection_id String @db.Uuid added_by_id String @db.Uuid + @@id([media_id, collection_id]) @@map("media_collections") } model MediaTrailer { - media_id String @id @db.Uuid - url String? @db.VarChar(255) - embed_url String? @db.VarChar(255) @unique - small_image_url String? @db.VarChar(255) - large_image_url String? @db.VarChar(255) + media_id String @id @db.Uuid + url String? @db.VarChar(255) + embed_url String? @unique @db.VarChar(255) + small_image_url String? @db.VarChar(255) + large_image_url String? @db.VarChar(255) maximum_image_url String? @db.VarChar(255) media Media @relation(fields: [media_id], references: [id]) + @@map("media_trailers") } model MediaType { - id String @id @db.Uuid @default(uuid(7)) - name String @db.VarChar(100) @unique + id String @id @default(uuid(7)) @db.Uuid + name String @unique @db.VarChar(100) Media Media[] + @@map("media_types") } model MediaSource { - id String @id @db.Uuid @default(uuid(7)) - name String @db.VarChar(100) @unique + id String @id @default(uuid(7)) @db.Uuid + name String @unique @db.VarChar(100) media Media[] + @@map("media_sources") } model MediaStatus { - id String @id @db.Uuid @default(uuid(7)) - name String @db.VarChar(100) @unique + id String @id @default(uuid(7)) @db.Uuid + name String @unique @db.VarChar(100) media Media[] + @@map("media_statuses") } model MediaAgeRating { - id String @id @db.Uuid @default(uuid(7)) - name String @db.VarChar(100) @unique - min_age Int @db.SmallInt + id String @id @default(uuid(7)) @db.Uuid + name String @unique @db.VarChar(100) + min_age Int @db.SmallInt - media Media[] + media Media[] user_rating_preferences UserRatingPreference[] + @@map("media_age_ratings") } model MediaProducer { - media Media @relation(fields: [media_id], references: [id]) - producer Producer @relation(fields: [producer_id], references: [id]) + media Media @relation(fields: [media_id], references: [id]) + producer Producer @relation(fields: [producer_id], references: [id]) media_id String @db.Uuid producer_id String @db.Uuid + @@id([media_id, producer_id]) @@map("media_producers") } model MediaLicensor { - media Media @relation(fields: [media_id], references: [id]) - licensor Producer @relation(fields: [licensor_id], references: [id]) + media Media @relation(fields: [media_id], references: [id]) + licensor Producer @relation(fields: [licensor_id], references: [id]) media_id String @db.Uuid licensor_id String @db.Uuid + @@id([media_id, licensor_id]) @@map("media_licensors") } model MediaStudio { - media Media @relation(fields: [media_id], references: [id]) - studio Producer @relation(fields: [studio_id], references: [id]) + media Media @relation(fields: [media_id], references: [id]) + studio Producer @relation(fields: [studio_id], references: [id]) + + media_id String @db.Uuid + studio_id String @db.Uuid - media_id String @db.Uuid - studio_id String @db.Uuid @@id([media_id, studio_id]) @@map("media_studios") } model Producer { - id String @id @db.Uuid @default(uuid(7)) - mal_id Int @unique - type String @db.VarChar(24) - name String @db.VarChar(255) - url String? @db.VarChar(255) - created_by User @relation(fields: [created_by_id], references: [id]) - created_at DateTime @default(now()) @db.Timestamptz() - updated_at DateTime @updatedAt @db.Timestamptz() - deleted_at DateTime? @db.Timestamptz() - created_by_id String @db.Uuid + id String @id @default(uuid(7)) @db.Uuid + mal_id Int @unique + type String @db.VarChar(24) + name String @db.VarChar(255) + url String? @db.VarChar(255) + created_by User @relation(fields: [created_by_id], references: [id]) + created_at DateTime @default(now()) @db.Timestamptz() + updated_at DateTime @updatedAt @db.Timestamptz() + deleted_at DateTime? @db.Timestamptz() + created_by_id String @db.Uuid media_producers MediaProducer[] media_licensors MediaLicensor[] media_studios MediaStudio[] + @@map("producers") } model MediaGenre { - media Media @relation(fields: [media_id], references: [id]) - genre Genre @relation(fields: [genre_id], references: [id]) + media Media @relation(fields: [media_id], references: [id]) + genre Genre @relation(fields: [genre_id], references: [id]) media_id String @db.Uuid genre_id String @db.Uuid + @@id([media_id, genre_id]) @@map("media_genres") } model MediaExplicitGenre { - media Media @relation(fields: [media_id], references: [id]) - genre Genre @relation(fields: [genre_id], references: [id]) + media Media @relation(fields: [media_id], references: [id]) + genre Genre @relation(fields: [genre_id], references: [id]) media_id String @db.Uuid genre_id String @db.Uuid + @@id([media_id, genre_id]) @@map("media_explicit_genres") } model MediaTheme { - media Media @relation(fields: [media_id], references: [id]) - theme Genre @relation(fields: [genre_id], references: [id]) + media Media @relation(fields: [media_id], references: [id]) + theme Genre @relation(fields: [genre_id], references: [id]) media_id String @db.Uuid genre_id String @db.Uuid + @@id([media_id, genre_id]) @@map("media_themes") } model MediaDemographic { - media Media @relation(fields: [media_id], references: [id]) - demographic Genre @relation(fields: [demographic_id], references: [id]) + media Media @relation(fields: [media_id], references: [id]) + demographic Genre @relation(fields: [demographic_id], references: [id]) + + media_id String @db.Uuid + demographic_id String @db.Uuid - media_id String @db.Uuid - demographic_id String @db.Uuid @@id([media_id, demographic_id]) @@map("media_demographics") } model Genre { - id String @id @db.Uuid @default(uuid(7)) + id String @id @default(uuid(7)) @db.Uuid mal_id Int @unique @db.SmallInt name String @db.VarChar(100) slug String @db.VarChar(115) thumbnail_url String? @db.VarChar(255) - media_genres MediaGenre[] - media_explicit_genres MediaExplicitGenre[] - media_themes MediaTheme[] - media_demographics MediaDemographic[] - user_genre_preferences UserGenrePreference[] + media_genres MediaGenre[] + media_explicit_genres MediaExplicitGenre[] + media_themes MediaTheme[] + media_demographics MediaDemographic[] + user_genre_preferences UserGenrePreference[] + @@map("genres") } model MediaRelation { - media Media @relation(fields: [media_id], references: [id], name: "MediaRelationMedia") - related_media Media @relation(fields: [related_media_id], references: [id], name: "MediaRelationRelatedMedia") - relation_type String @db.VarChar(50) + media Media @relation(fields: [media_id], references: [id], name: "MediaRelationMedia") + related_media Media @relation(fields: [related_media_id], references: [id], name: "MediaRelationRelatedMedia") + relation_type String @db.VarChar(50) + + media_id String @db.Uuid + related_media_id String @db.Uuid - media_id String @db.Uuid - related_media_id String @db.Uuid @@id([media_id, related_media_id]) @@map("media_relations") } model MediaExternalLink { - id String @id @db.Uuid @default(uuid(7)) - media Media @relation(fields: [media_id], references: [id]) - url String @db.VarChar(255) - site_name String? @db.VarChar(100) + id String @id @default(uuid(7)) @db.Uuid + media Media @relation(fields: [media_id], references: [id]) + url String @db.VarChar(255) + site_name String? @db.VarChar(100) media_id String @db.Uuid + @@map("media_external_links") } model MediaCharacter { - id String @id @db.Uuid @default(uuid(7)) - media Media @relation(fields: [media_id], references: [id]) - character Character @relation(fields: [character_id], references: [id]) + media Media @relation(fields: [media_id], references: [id]) + character Character @relation(fields: [character_id], references: [id]) voice_actors VoiceActor[] - role character_role + role character_role media_id String @db.Uuid character_id String @db.Uuid + + @@id([character_id, media_id]) @@map("media_characters") } model Character { - id String @id @db.Uuid @default(uuid(7)) - name String @db.VarChar(255) - image String? @db.VarChar(255) - small_image String? @db.VarChar(255) - mal_id Int? @unique - fanpage_url String? @db.VarChar(255) - liked Int @default(0) + id String @id @default(uuid(7)) @db.Uuid + name String @db.VarChar(255) + image String? @db.VarChar(255) + small_image String? @db.VarChar(255) + mal_id Int? @unique + fanpage_url String? @db.VarChar(255) + liked Int @default(0) deleted_at DateTime? @db.Timestamptz() updated_at DateTime @updatedAt @db.Timestamptz() created_at DateTime @default(now()) @db.Timestamptz() partnered_user UserPreference[] media_characters MediaCharacter[] + @@map("characters") } model VoiceActor { - id String @id @db.Uuid @default(uuid(7)) - media_character_id String @db.Uuid - language String @db.VarChar(115) - actor_staff Staff @relation(fields: [staff_id], references: [id]) + id String @id @default(uuid(7)) @db.Uuid + language String @db.VarChar(115) + actor_staff Staff @relation(fields: [staff_id], references: [id]) + staff_id String @db.Uuid + + media_id String @db.Uuid + character_id String @db.Uuid + media_character MediaCharacter @relation(fields: [media_id, character_id], references: [media_id, character_id]) - staff_id String @db.Uuid - media_character MediaCharacter @relation(fields: [media_character_id], references: [id]) @@map("voice_actors") + @@unique([media_id, character_id, staff_id, language]) } model Staff { - id String @id @db.Uuid @default(uuid(7)) - name String @db.VarChar(255) - image String? @db.VarChar(255) - mal_id Int? @unique - deleted_at DateTime? @db.Timestamptz() - updated_at DateTime @updatedAt @db.Timestamptz() - created_at DateTime @default(now()) @db.Timestamptz() + id String @id @default(uuid(7)) @db.Uuid + name String @db.VarChar(255) + image String? @db.VarChar(255) + mal_id Int? @unique + deleted_at DateTime? @db.Timestamptz() + updated_at DateTime @updatedAt @db.Timestamptz() + created_at DateTime @default(now()) @db.Timestamptz() voice_actors VoiceActor[] + @@map("staff") } model Episode { - id String @id @db.Uuid @default(uuid(7)) - media_id String @db.Uuid - episode Int @db.SmallInt - mal_url String? @db.VarChar(255) - forum_url String? @db.VarChar(255) - title String @db.VarChar(155) - title_origin String? @db.VarChar(155) - title_romanji String? @db.VarChar(155) + id String @id @default(uuid(7)) @db.Uuid + media_id String @db.Uuid + episode Int @db.SmallInt + mal_url String? @db.VarChar(255) + forum_url String? @db.VarChar(255) + title String @db.VarChar(155) + title_origin String? @db.VarChar(155) + title_romanji String? @db.VarChar(155) aired_at DateTime? @db.Date filler Boolean recap Boolean - total_score Int @default(0) - score_count Int @default(0) + total_score Int @default(0) + score_count Int @default(0) deleted_at DateTime? @db.Timestamptz() - updated_at DateTime @updatedAt @db.Timestamptz() - created_at DateTime @default(now()) @db.Timestamptz() - created_by User @relation(fields: [created_by_id], references: [id]) + updated_at DateTime @updatedAt @db.Timestamptz() + created_at DateTime @default(now()) @db.Timestamptz() + created_by User @relation(fields: [created_by_id], references: [id]) + + videos Video[] + created_by_id String @db.Uuid + comments Comment[] + watch_histories UserWatchHistory[] - videos Video[] - created_by_id String @db.Uuid - comments Comment[] - watch_histories UserWatchHistory[] @@index([media_id, episode]) @@map("episodes") } model Video { - id String @id @db.Uuid @default(uuid(7)) - service VideoService[] - Episode Episode @relation(fields: [episode_id], references: [id]) - video_code String @db.VarChar(255) - short_code String? @db.VarChar(255) - thumbnail_code String? @db.VarChar(255) - download_code String? @db.VarChar(255) - created_at DateTime @default(now()) @db.Timestamptz() - deleted_at DateTime? @db.Timestamptz() - updated_at DateTime @updatedAt @db.Timestamptz() + id String @id @default(uuid(7)) @db.Uuid + service VideoService[] + Episode Episode @relation(fields: [episode_id], references: [id]) + video_code String @db.VarChar(255) + short_code String? @db.VarChar(255) + thumbnail_code String? @db.VarChar(255) + download_code String? @db.VarChar(255) + created_at DateTime @default(now()) @db.Timestamptz() + deleted_at DateTime? @db.Timestamptz() + updated_at DateTime @updatedAt @db.Timestamptz() - episode_id String @db.Uuid - created_by_id String @db.Uuid + episode_id String @db.Uuid + created_by_id String @db.Uuid video_submission VideoSubmission? + @@map("videos") } model VideoSubmission { - video_id String @id @db.Uuid - created_by User @relation(fields: [created_by_id], references: [id], name: "VideoSubmissionSubmitter") - reviewer User? @relation(fields: [reviewer_id], references: [id], name: "VideoSubmissionReviewer") - status status_submission @default(pending) - reviewed_at DateTime? @db.Timestamptz() - reason String? @db.Text - created_at DateTime @default(now()) @db.Timestamptz() + video_id String @id @db.Uuid + created_by User @relation(fields: [created_by_id], references: [id], name: "VideoSubmissionSubmitter") + reviewer User? @relation(fields: [reviewer_id], references: [id], name: "VideoSubmissionReviewer") + status status_submission @default(pending) + reviewed_at DateTime? @db.Timestamptz() + reason String? @db.Text + created_at DateTime @default(now()) @db.Timestamptz() - created_by_id String @db.Uuid + created_by_id String @db.Uuid reviewer_id String? @db.Uuid - video Video @relation(fields: [video_id], references: [id]) + video Video @relation(fields: [video_id], references: [id]) + @@map("video_submissions") } model VideoService { - id String @id @db.Uuid @default(uuid(7)) - name String @db.VarChar(155) - resolution Int @db.SmallInt - domain String @db.VarChar(255) - image_url String? @db.VarChar(255) - hex_color String? @db.VarChar(10) - endpoint_video String @db.VarChar(255) - endpoint_short String? @db.VarChar(255) - endpoint_image String? @db.VarChar(255) - endpoint_download String? @db.VarChar(255) + id String @id @default(uuid(7)) @db.Uuid + name String @db.VarChar(155) + resolution Int @db.SmallInt + domain String @db.VarChar(255) + image_url String? @db.VarChar(255) + hex_color String? @db.VarChar(10) + endpoint_video String @db.VarChar(255) + endpoint_short String? @db.VarChar(255) + endpoint_image String? @db.VarChar(255) + endpoint_download String? @db.VarChar(255) deleted_at DateTime? @db.Timestamptz() - updated_at DateTime @updatedAt @db.Timestamptz() - created_at DateTime @default(now()) @db.Timestamptz() + updated_at DateTime @updatedAt @db.Timestamptz() + created_at DateTime @default(now()) @db.Timestamptz() - videos Video[] + videos Video[] video_service_submissions VideoServiceSubmission? + @@unique([name, resolution]) @@map("video_services") } model VideoServiceSubmission { - video_service_id String @id @db.Uuid - created_by User @relation(fields: [created_by_id], references: [id], name: "VideoServiceSubmissionSubmitter") + video_service_id String @id @db.Uuid + created_by User @relation(fields: [created_by_id], references: [id], name: "VideoServiceSubmissionSubmitter") status status_submission @default(pending) - reviewer User? @relation(fields: [reviewer_id], references: [id], name: "VideoServiceSubmissionReviewer") - reviewed_at DateTime? @db.Timestamptz() - reason String? @db.Text - created_at DateTime @default(now()) @db.Timestamptz() + reviewer User? @relation(fields: [reviewer_id], references: [id], name: "VideoServiceSubmissionReviewer") + reviewed_at DateTime? @db.Timestamptz() + reason String? @db.Text + created_at DateTime @default(now()) @db.Timestamptz() video_service VideoService @relation(fields: [video_service_id], references: [id]) - created_by_id String @db.Uuid - reviewer_id String? @db.Uuid + created_by_id String @db.Uuid + reviewer_id String? @db.Uuid + @@map("video_service_submissions") } model Comment { - id String @id @db.Uuid @default(uuid(7)) - user User @relation(fields: [user_id], references: [id]) - episode Episode @relation(fields: [episode_id], references: [id]) - content String @db.Text - created_at DateTime @default(now()) @db.Timestamptz() - updated_at DateTime @updatedAt @db.Timestamptz() - deleted_at DateTime? @db.Timestamptz() + id String @id @default(uuid(7)) @db.Uuid + user User @relation(fields: [user_id], references: [id]) + episode Episode @relation(fields: [episode_id], references: [id]) + content String @db.Text + created_at DateTime @default(now()) @db.Timestamptz() + updated_at DateTime @updatedAt @db.Timestamptz() + deleted_at DateTime? @db.Timestamptz() + + user_id String @db.Uuid + episode_id String @db.Uuid + likes CommentLike[] + audit_logs CommentAuditLog[] + reports CommentReport[] - user_id String @db.Uuid - episode_id String @db.Uuid - likes CommentLike[] - audit_logs CommentAuditLog[] - reports CommentReport[] @@map("comments") } model CommentLike { - user_id String @db.Uuid - comment_id String @db.Uuid + user_id String @db.Uuid + comment_id String @db.Uuid type like_type - created_at DateTime @default(now()) @db.Timestamptz() + created_at DateTime @default(now()) @db.Timestamptz() user User @relation(fields: [user_id], references: [id]) comment Comment @relation(fields: [comment_id], references: [id]) + @@id([user_id, comment_id]) @@map("comment_likes") } model CommentAuditLog { - id String @id @db.Uuid @default(uuid(7)) - comment Comment @relation(fields: [comment_id], references: [id]) - performed_by User @relation(fields: [performed_by_id], references: [id]) - action audit_action - created_at DateTime @default(now()) @db.Timestamptz() + id String @id @default(uuid(7)) @db.Uuid + comment Comment @relation(fields: [comment_id], references: [id]) + performed_by User @relation(fields: [performed_by_id], references: [id]) + action audit_action + created_at DateTime @default(now()) @db.Timestamptz() comment_id String @db.Uuid performed_by_id String @db.Uuid + @@map("comment_audit_logs") } model CommentReport { - id String @id @db.Uuid @default(uuid(7)) - reporter User @relation(fields: [reporter_id], references: [id]) - comment Comment @relation(fields: [comment_id], references: [id]) - title String @db.VarChar(115) + id String @id @default(uuid(7)) @db.Uuid + reporter User @relation(fields: [reporter_id], references: [id]) + comment Comment @relation(fields: [comment_id], references: [id]) + title String @db.VarChar(115) status status_submission - description String? @db.Text - reported_at DateTime @default(now()) @db.Timestamptz() - closed_at DateTime? @db.Timestamptz() + description String? @db.Text + reported_at DateTime @default(now()) @db.Timestamptz() + closed_at DateTime? @db.Timestamptz() reporter_id String @db.Uuid comment_id String @db.Uuid + @@map("comment_reports") } - - /** * ---------------------------------- * Model for System Apps and related entities * ---------------------------------- */ model ProvisionedUser { - provisioned_by User @relation(fields: [admin_id], references: [id], name: "ProvisionedUserAdmin") - provisioned_to User @relation(fields: [user_id], references: [id], name: "ProvisionedUserUser") - provisioned_at DateTime @default(now()) @db.Timestamptz() - reason String? @db.VarChar(255) + provisioned_by User @relation(fields: [admin_id], references: [id], name: "ProvisionedUserAdmin") + provisioned_to User @relation(fields: [user_id], references: [id], name: "ProvisionedUserUser") + provisioned_at DateTime @default(now()) @db.Timestamptz() + reason String? @db.VarChar(255) + + admin_id String @db.Uuid + user_id String @db.Uuid - admin_id String @db.Uuid - user_id String @db.Uuid @@id([admin_id, user_id]) @@map("provisioned_users") } model Country { - id String @id @db.Uuid @default(uuid(7)) - name String @db.VarChar(155) - slug String @db.VarChar(165) - code String @db.VarChar(3) @unique - flag String? @db.VarChar(255) - banner String? @db.VarChar(255) + id String @id @default(uuid(7)) @db.Uuid + name String @db.VarChar(155) + slug String @db.VarChar(165) + code String @unique @db.VarChar(3) + flag String? @db.VarChar(255) + banner String? @db.VarChar(255) - UserCountry User[] @relation("UserCountry") + UserCountry User[] @relation("UserCountry") UserCountryPreference UserCountryPreference[] - Media Media[] + Media Media[] + @@map("countries") } model HomeMediaBanner { - id String @id @db.Uuid @default(uuid(7)) - media Media @relation(fields: [media_id], references: [id]) - created_by User @relation(fields: [created_by_id], references: [id]) - priority Int @db.SmallInt @unique - start_show DateTime @db.Date - end_show DateTime @db.Date - created_at DateTime @default(now()) @db.Timestamptz() + id String @id @default(uuid(7)) @db.Uuid + media Media @relation(fields: [media_id], references: [id]) + created_by User @relation(fields: [created_by_id], references: [id]) + priority Int @unique @db.SmallInt + start_show DateTime @db.Date + end_show DateTime @db.Date + created_at DateTime @default(now()) @db.Timestamptz() media_id String @db.Uuid created_by_id String @db.Uuid + @@map("home_media_banners") -} \ No newline at end of file +}