Merge pull request 'fix/thumbnail-code' (#20) from fix/thumbnail-code into main
All checks were successful
Sync to GitHub / sync (push) Successful in 8s

Reviewed-on: #20
This commit is contained in:
2026-02-22 11:10:08 +07:00
17 changed files with 381 additions and 222 deletions

View File

@ -174,7 +174,8 @@ Table videos {
episodeId String [not null] episodeId String [not null]
service video_services [not null] service video_services [not null]
serviceId String [not null] serviceId String [not null]
code String [not null] videoCode String [not null]
thumbnailCode String
pendingUpload Boolean [not null, default: true] pendingUpload Boolean [not null, default: true]
uploader users [not null] uploader users [not null]
uploadedBy String [not null] uploadedBy String [not null]
@ -183,7 +184,7 @@ Table videos {
updatedAt DateTime [default: `now()`, not null] updatedAt DateTime [default: `now()`, not null]
indexes { indexes {
(serviceId, code) [unique] (serviceId, videoCode) [unique]
} }
} }

View File

@ -1,11 +1,14 @@
-- CreateEnum -- CreateSchema
CREATE TYPE "AgeRating" AS ENUM ('G', 'PG', 'PG_13', 'R', 'R_plus', 'Rx'); CREATE SCHEMA IF NOT EXISTS "public";
-- CreateEnum -- CreateEnum
CREATE TYPE "MediaType" AS ENUM ('TV', 'ONA', 'OVA', 'Movie', 'Special', 'Music'); CREATE TYPE "MediaType" AS ENUM ('TV', 'ONA', 'OVA', 'Movie', 'Special', 'Music');
-- CreateEnum -- CreateEnum
CREATE TYPE "Source" AS ENUM ('original', 'manga', 'light_novel', 'game'); CREATE TYPE "Country" AS ENUM ('Japanese', 'English', 'Indonesia', 'Korea');
-- CreateEnum
CREATE TYPE "CharacterRole" AS ENUM ('Main', 'Supporting');
-- CreateEnum -- CreateEnum
CREATE TYPE "MediaOperation" AS ENUM ('create', 'update', 'delete'); CREATE TYPE "MediaOperation" AS ENUM ('create', 'update', 'delete');
@ -48,24 +51,24 @@ CREATE TYPE "TypeSystemNotification" AS ENUM ('component', 'popup', 'toast');
-- CreateTable -- CreateTable
CREATE TABLE "medias" ( CREATE TABLE "medias" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"title" TEXT NOT NULL, "title" TEXT NOT NULL,
"titleAlternative" JSONB NOT NULL, "titleAlternative" JSONB NOT NULL,
"slug" TEXT NOT NULL, "slug" TEXT NOT NULL,
"malId" INTEGER,
"pictureMedium" TEXT NOT NULL, "pictureMedium" TEXT NOT NULL,
"pictureLarge" TEXT NOT NULL, "pictureLarge" TEXT NOT NULL,
"countryId" TEXT NOT NULL, "country" "Country" NOT NULL DEFAULT 'Japanese',
"isAiring" BOOLEAN NOT NULL DEFAULT false, "score" DECIMAL(4,2) NOT NULL DEFAULT 0.00,
"isTba" BOOLEAN NOT NULL DEFAULT false, "status" TEXT NOT NULL,
"startAiring" TIMESTAMP(3) NOT NULL, "startAiring" TIMESTAMP(3),
"endAiring" TIMESTAMP(3) NOT NULL, "endAiring" TIMESTAMP(3),
"synopsis" TEXT NOT NULL, "synopsis" TEXT NOT NULL,
"nfsw" BOOLEAN NOT NULL DEFAULT false, "ageRating" TEXT NOT NULL,
"ageRating" "AgeRating" NOT NULL,
"mediaType" "MediaType" NOT NULL, "mediaType" "MediaType" NOT NULL,
"source" "Source" NOT NULL, "source" TEXT,
"pendingUpload" BOOLEAN NOT NULL DEFAULT true, "onDraft" BOOLEAN NOT NULL DEFAULT true,
"uploadedBy" TEXT NOT NULL, "uploadedBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -75,12 +78,12 @@ CREATE TABLE "medias" (
-- CreateTable -- CreateTable
CREATE TABLE "media_logs" ( CREATE TABLE "media_logs" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"status" "MediaOperation" NOT NULL, "status" "MediaOperation" NOT NULL,
"approval" BOOLEAN NOT NULL DEFAULT false, "approval" BOOLEAN NOT NULL DEFAULT false,
"proposedBy" TEXT NOT NULL, "proposedBy" UUID NOT NULL,
"approvedBy" TEXT NOT NULL, "approvedBy" UUID NOT NULL,
"mediaId" TEXT NOT NULL, "mediaId" UUID NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -89,12 +92,12 @@ CREATE TABLE "media_logs" (
-- CreateTable -- CreateTable
CREATE TABLE "genres" ( CREATE TABLE "genres" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"name" VARCHAR(255) NOT NULL, "name" VARCHAR(255) NOT NULL,
"slug" VARCHAR(255) NOT NULL, "slug" VARCHAR(255) NOT NULL,
"malId" INTEGER NOT NULL, "malId" INTEGER NOT NULL,
"malUrl" VARCHAR(255) NOT NULL, "malUrl" VARCHAR(255) NOT NULL,
"createdBy" TEXT NOT NULL, "createdBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -104,12 +107,13 @@ CREATE TABLE "genres" (
-- CreateTable -- CreateTable
CREATE TABLE "studios" ( CREATE TABLE "studios" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"name" VARCHAR(255) NOT NULL, "name" VARCHAR(255) NOT NULL,
"slug" VARCHAR(255) NOT NULL, "slug" VARCHAR(255) NOT NULL,
"logoUrl" TEXT NOT NULL, "linkAbout" TEXT NOT NULL,
"colorHex" VARCHAR(10) NOT NULL, "malId" INTEGER NOT NULL,
"createdBy" TEXT NOT NULL, "logoUrl" TEXT,
"createdBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -118,31 +122,66 @@ CREATE TABLE "studios" (
); );
-- CreateTable -- CreateTable
CREATE TABLE "countries" ( CREATE TABLE "characters" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"name" VARCHAR(255) NOT NULL, "malId" INTEGER NOT NULL,
"code" VARCHAR(5) NOT NULL, "name" TEXT NOT NULL,
"flag" VARCHAR(10) NOT NULL, "role" "CharacterRole" NOT NULL,
"createdBy" TEXT NOT NULL, "favorites" INTEGER NOT NULL DEFAULT 0,
"imageUrl" TEXT,
"smallImageUrl" TEXT,
"creatorId" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "countries_pkey" PRIMARY KEY ("id") CONSTRAINT "characters_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "voice_actors" (
"id" UUID NOT NULL,
"malId" INTEGER NOT NULL,
"name" TEXT NOT NULL,
"birthday" TIMESTAMP(3),
"description" TEXT,
"aboutUrl" TEXT,
"imageUrl" TEXT,
"websiteUrl" TEXT,
"creatorId" UUID NOT NULL,
"deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "voice_actors_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "lang_va_char" (
"id" UUID NOT NULL,
"language" TEXT NOT NULL,
"vaId" UUID NOT NULL,
"charId" UUID NOT NULL,
"creatorId" UUID NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "lang_va_char_pkey" PRIMARY KEY ("id")
); );
-- CreateTable -- CreateTable
CREATE TABLE "episodes" ( CREATE TABLE "episodes" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"mediaId" TEXT NOT NULL, "mediaId" UUID NOT NULL,
"episode" INTEGER NOT NULL, "episode" INTEGER NOT NULL,
"name" VARCHAR(255) NOT NULL, "name" VARCHAR(255) NOT NULL,
"pictureThumbnail" TEXT NOT NULL, "score" DECIMAL(4,2) NOT NULL DEFAULT 0.00,
"pictureThumbnail" TEXT,
"viewed" BIGINT NOT NULL DEFAULT 0, "viewed" BIGINT NOT NULL DEFAULT 0,
"likes" BIGINT NOT NULL DEFAULT 0, "likes" BIGINT NOT NULL DEFAULT 0,
"dislikes" BIGINT NOT NULL DEFAULT 0, "dislikes" BIGINT NOT NULL DEFAULT 0,
"pendingUpload" BOOLEAN NOT NULL DEFAULT true, "pendingUpload" BOOLEAN NOT NULL DEFAULT true,
"uploadedBy" TEXT NOT NULL, "uploadedBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -152,10 +191,10 @@ CREATE TABLE "episodes" (
-- CreateTable -- CreateTable
CREATE TABLE "episode_likes" ( CREATE TABLE "episode_likes" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"userId" TEXT NOT NULL, "userId" UUID NOT NULL,
"sessionId" TEXT NOT NULL, "sessionId" UUID NOT NULL,
"episodeId" TEXT NOT NULL, "episodeId" UUID NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -164,12 +203,12 @@ CREATE TABLE "episode_likes" (
-- CreateTable -- CreateTable
CREATE TABLE "videos" ( CREATE TABLE "videos" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"episodeId" TEXT NOT NULL, "episodeId" UUID NOT NULL,
"serviceId" TEXT NOT NULL, "serviceId" UUID NOT NULL,
"code" VARCHAR(255) NOT NULL, "code" VARCHAR(255) NOT NULL,
"pendingUpload" BOOLEAN NOT NULL DEFAULT true, "pendingUpload" BOOLEAN NOT NULL DEFAULT true,
"uploadedBy" TEXT NOT NULL, "uploadedBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -179,14 +218,15 @@ CREATE TABLE "videos" (
-- CreateTable -- CreateTable
CREATE TABLE "video_services" ( CREATE TABLE "video_services" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"name" VARCHAR(255) NOT NULL, "name" VARCHAR(255) NOT NULL,
"domain" VARCHAR(255) NOT NULL, "domain" VARCHAR(255) NOT NULL,
"logo" TEXT, "logo" TEXT,
"hexColor" VARCHAR(10) NOT NULL, "hexColor" VARCHAR(10) NOT NULL,
"endpointVideo" TEXT NOT NULL, "endpointVideo" TEXT NOT NULL,
"endpointThumbnail" TEXT, "endpointThumbnail" TEXT,
"createdBy" TEXT NOT NULL, "endpointDownload" TEXT,
"createdBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -196,7 +236,7 @@ CREATE TABLE "video_services" (
-- CreateTable -- CreateTable
CREATE TABLE "users" ( CREATE TABLE "users" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"name" VARCHAR(255) NOT NULL, "name" VARCHAR(255) NOT NULL,
"username" VARCHAR(255) NOT NULL, "username" VARCHAR(255) NOT NULL,
"email" TEXT NOT NULL, "email" TEXT NOT NULL,
@ -206,9 +246,12 @@ CREATE TABLE "users" (
"phoneCC" INTEGER, "phoneCC" INTEGER,
"phoneNumber" INTEGER, "phoneNumber" INTEGER,
"bioProfile" TEXT, "bioProfile" TEXT,
"profilePicture" TEXT, "avatar" TEXT,
"commentPicture" TEXT, "commentBackground" TEXT,
"preferenceId" TEXT, "provider" VARCHAR(255),
"providerId" VARCHAR(255),
"providerToken" TEXT,
"providerPayload" JSON,
"verifiedAt" TIMESTAMP(3), "verifiedAt" TIMESTAMP(3),
"disabledAt" TIMESTAMP(3), "disabledAt" TIMESTAMP(3),
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
@ -220,12 +263,14 @@ CREATE TABLE "users" (
-- CreateTable -- CreateTable
CREATE TABLE "user_preferences" ( CREATE TABLE "user_preferences" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"userId" UUID NOT NULL,
"langPreference" TEXT, "langPreference" TEXT,
"adultFiltering" "AdultFiltering" NOT NULL DEFAULT 'hide', "adultFiltering" "AdultFiltering" NOT NULL DEFAULT 'hide',
"adultAlert" "AdultAlert" NOT NULL DEFAULT 'show', "adultAlert" "AdultAlert" NOT NULL DEFAULT 'show',
"videoQuality" "VideoQuality" NOT NULL DEFAULT 'Q1080', "videoQuality" "VideoQuality" NOT NULL DEFAULT 'Q1080',
"serviceDefaultId" TEXT, "serviceDefaultId" UUID,
"hideContries" "Country"[],
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -234,8 +279,9 @@ CREATE TABLE "user_preferences" (
-- CreateTable -- CreateTable
CREATE TABLE "user_roles" ( CREATE TABLE "user_roles" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"name" VARCHAR(255) NOT NULL, "name" VARCHAR(255) NOT NULL,
"description" TEXT,
"primaryColor" VARCHAR(10), "primaryColor" VARCHAR(10),
"secondaryColor" VARCHAR(10), "secondaryColor" VARCHAR(10),
"pictureImage" TEXT, "pictureImage" TEXT,
@ -251,7 +297,7 @@ CREATE TABLE "user_roles" (
"canManageUser" BOOLEAN NOT NULL DEFAULT false, "canManageUser" BOOLEAN NOT NULL DEFAULT false,
"canEditSystem" BOOLEAN NOT NULL DEFAULT false, "canEditSystem" BOOLEAN NOT NULL DEFAULT false,
"canManageSystem" BOOLEAN NOT NULL DEFAULT false, "canManageSystem" BOOLEAN NOT NULL DEFAULT false,
"createdBy" TEXT NOT NULL, "createdBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -259,15 +305,24 @@ CREATE TABLE "user_roles" (
CONSTRAINT "user_roles_pkey" PRIMARY KEY ("id") CONSTRAINT "user_roles_pkey" PRIMARY KEY ("id")
); );
-- CreateTable
CREATE TABLE "user_role_assignments" (
"userId" UUID NOT NULL,
"roleId" UUID NOT NULL,
"assignmentAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "user_role_assignments_pkey" PRIMARY KEY ("userId","roleId")
);
-- CreateTable -- CreateTable
CREATE TABLE "user_notifications" ( CREATE TABLE "user_notifications" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"title" VARCHAR(255) NOT NULL, "title" VARCHAR(255) NOT NULL,
"content" TEXT NOT NULL, "content" TEXT NOT NULL,
"picture" TEXT NOT NULL, "picture" TEXT NOT NULL,
"state" "UserNotificationState" NOT NULL, "state" "UserNotificationState" NOT NULL,
"ctaLink" TEXT NOT NULL, "ctaLink" TEXT NOT NULL,
"userId" TEXT NOT NULL, "userId" UUID NOT NULL,
"isReaded" BOOLEAN NOT NULL DEFAULT false, "isReaded" BOOLEAN NOT NULL DEFAULT false,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -278,12 +333,13 @@ CREATE TABLE "user_notifications" (
-- CreateTable -- CreateTable
CREATE TABLE "user_sessions" ( CREATE TABLE "user_sessions" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"isAuthenticated" BOOLEAN NOT NULL DEFAULT false, "isAuthenticated" BOOLEAN NOT NULL DEFAULT false,
"userId" TEXT NOT NULL, "userId" UUID NOT NULL,
"deviceType" VARCHAR(255) NOT NULL, "deviceType" VARCHAR(255) NOT NULL,
"deviceOs" VARCHAR(255) NOT NULL, "deviceOs" VARCHAR(255) NOT NULL,
"deviceIp" VARCHAR(255) NOT NULL, "deviceIp" VARCHAR(255) NOT NULL,
"browser" VARCHAR(255) NOT NULL,
"isOnline" BOOLEAN NOT NULL DEFAULT false, "isOnline" BOOLEAN NOT NULL DEFAULT false,
"lastOnline" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "lastOnline" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"validUntil" TIMESTAMP(3) NOT NULL, "validUntil" TIMESTAMP(3) NOT NULL,
@ -296,11 +352,11 @@ CREATE TABLE "user_sessions" (
-- CreateTable -- CreateTable
CREATE TABLE "user_logs" ( CREATE TABLE "user_logs" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"title" VARCHAR(255) NOT NULL, "title" VARCHAR(255) NOT NULL,
"notes" TEXT NOT NULL, "notes" TEXT NOT NULL,
"userId" TEXT NOT NULL, "userId" UUID NOT NULL,
"sessionId" TEXT NOT NULL, "sessionId" UUID NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -309,9 +365,9 @@ CREATE TABLE "user_logs" (
-- CreateTable -- CreateTable
CREATE TABLE "collections" ( CREATE TABLE "collections" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"name" VARCHAR(255) NOT NULL, "name" VARCHAR(255) NOT NULL,
"ownerId" TEXT NOT NULL, "ownerId" UUID NOT NULL,
"accessStatus" "AccessStatus" NOT NULL DEFAULT 'private', "accessStatus" "AccessStatus" NOT NULL DEFAULT 'private',
"password" VARCHAR(255), "password" VARCHAR(255),
"accessScope" "AccessScope" NOT NULL DEFAULT 'viewer', "accessScope" "AccessScope" NOT NULL DEFAULT 'viewer',
@ -324,10 +380,10 @@ CREATE TABLE "collections" (
-- CreateTable -- CreateTable
CREATE TABLE "watch_histories" ( CREATE TABLE "watch_histories" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"episodeId" TEXT NOT NULL, "episodeId" UUID NOT NULL,
"userId" TEXT NOT NULL, "userId" UUID NOT NULL,
"sessionId" TEXT NOT NULL, "sessionId" UUID NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -336,13 +392,13 @@ CREATE TABLE "watch_histories" (
-- CreateTable -- CreateTable
CREATE TABLE "movie_reviews" ( CREATE TABLE "movie_reviews" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"mediaId" TEXT NOT NULL, "mediaId" UUID NOT NULL,
"rating" INTEGER NOT NULL, "rating" INTEGER NOT NULL,
"title" VARCHAR(255) NOT NULL, "title" VARCHAR(255) NOT NULL,
"text" TEXT NOT NULL, "text" TEXT NOT NULL,
"reaction" "MediaReviewReaction" NOT NULL, "reaction" "MediaReviewReaction" NOT NULL,
"createdBy" TEXT NOT NULL, "createdBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -352,12 +408,12 @@ CREATE TABLE "movie_reviews" (
-- CreateTable -- CreateTable
CREATE TABLE "comments" ( CREATE TABLE "comments" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"episodeId" TEXT NOT NULL, "episodeId" UUID NOT NULL,
"text" TEXT NOT NULL, "text" TEXT NOT NULL,
"isParent" BOOLEAN NOT NULL DEFAULT false, "isParent" BOOLEAN NOT NULL DEFAULT false,
"parentId" TEXT, "parentId" UUID,
"userId" TEXT NOT NULL, "userId" UUID NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -366,9 +422,9 @@ CREATE TABLE "comments" (
-- CreateTable -- CreateTable
CREATE TABLE "comment_likes" ( CREATE TABLE "comment_likes" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"commentId" TEXT NOT NULL, "commentId" UUID NOT NULL,
"userLiked" TEXT NOT NULL, "userLiked" UUID NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -377,14 +433,14 @@ CREATE TABLE "comment_likes" (
-- CreateTable -- CreateTable
CREATE TABLE "comment_reports" ( CREATE TABLE "comment_reports" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"userReporter" TEXT NOT NULL, "userReporter" UUID NOT NULL,
"commentReported" TEXT NOT NULL, "commentReported" UUID NOT NULL,
"isSupervisorReport" BOOLEAN NOT NULL DEFAULT false, "isSupervisorReport" BOOLEAN NOT NULL DEFAULT false,
"reason" "ReportReason" NOT NULL, "reason" "ReportReason" NOT NULL,
"status" "ReportStatus" NOT NULL, "status" "ReportStatus" NOT NULL,
"description" VARCHAR(255) NOT NULL, "description" VARCHAR(255) NOT NULL,
"approvedBy" TEXT, "approvedBy" UUID,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -393,12 +449,12 @@ CREATE TABLE "comment_reports" (
-- CreateTable -- CreateTable
CREATE TABLE "languages" ( CREATE TABLE "languages" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"name" VARCHAR(255) NOT NULL, "name" VARCHAR(255) NOT NULL,
"code" VARCHAR(5) NOT NULL, "code" VARCHAR(5) NOT NULL,
"countryFlag" VARCHAR(10) NOT NULL, "countryFlag" VARCHAR(10) NOT NULL,
"fileLocation" TEXT NOT NULL, "fileLocation" TEXT NOT NULL,
"craetedBy" TEXT NOT NULL, "craetedBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -408,7 +464,7 @@ CREATE TABLE "languages" (
-- CreateTable -- CreateTable
CREATE TABLE "email_system_accounts" ( CREATE TABLE "email_system_accounts" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"name" TEXT NOT NULL, "name" TEXT NOT NULL,
"host" VARCHAR(255) NOT NULL, "host" VARCHAR(255) NOT NULL,
"port" INTEGER NOT NULL, "port" INTEGER NOT NULL,
@ -417,7 +473,7 @@ CREATE TABLE "email_system_accounts" (
"username" VARCHAR(255) NOT NULL, "username" VARCHAR(255) NOT NULL,
"password" VARCHAR(255) NOT NULL, "password" VARCHAR(255) NOT NULL,
"purpose" "EmailPorpose" NOT NULL, "purpose" "EmailPorpose" NOT NULL,
"createdBy" TEXT NOT NULL, "createdBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -427,11 +483,11 @@ CREATE TABLE "email_system_accounts" (
-- CreateTable -- CreateTable
CREATE TABLE "email_system_histories" ( CREATE TABLE "email_system_histories" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"purpose" "EmailPorpose" NOT NULL, "purpose" "EmailPorpose" NOT NULL,
"fromEmail" TEXT NOT NULL, "fromEmail" TEXT NOT NULL,
"toEmail" TEXT NOT NULL, "toEmail" TEXT NOT NULL,
"userRelated" TEXT NOT NULL, "userRelated" UUID NOT NULL,
"title" VARCHAR(255) NOT NULL, "title" VARCHAR(255) NOT NULL,
"htmlContent" TEXT NOT NULL, "htmlContent" TEXT NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
@ -443,7 +499,7 @@ CREATE TABLE "email_system_histories" (
-- CreateTable -- CreateTable
CREATE TABLE "system_preferences" ( CREATE TABLE "system_preferences" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"key" VARCHAR(225) NOT NULL, "key" VARCHAR(225) NOT NULL,
"value" VARCHAR(225) NOT NULL, "value" VARCHAR(225) NOT NULL,
"description" TEXT NOT NULL, "description" TEXT NOT NULL,
@ -456,13 +512,13 @@ CREATE TABLE "system_preferences" (
-- CreateTable -- CreateTable
CREATE TABLE "system_notifications" ( CREATE TABLE "system_notifications" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"type" "TypeSystemNotification" NOT NULL, "type" "TypeSystemNotification" NOT NULL,
"componentName" VARCHAR(255), "componentName" VARCHAR(255),
"popupImage" TEXT, "popupImage" TEXT,
"titleToast" VARCHAR(255), "titleToast" VARCHAR(255),
"contentToast" TEXT, "contentToast" TEXT,
"createdBy" TEXT NOT NULL, "createdBy" UUID NOT NULL,
"deletedAt" TIMESTAMP(3), "deletedAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -472,10 +528,10 @@ CREATE TABLE "system_notifications" (
-- CreateTable -- CreateTable
CREATE TABLE "system_logs" ( CREATE TABLE "system_logs" (
"id" TEXT NOT NULL, "id" UUID NOT NULL,
"title" VARCHAR(255) NOT NULL, "title" VARCHAR(255) NOT NULL,
"notes" TEXT NOT NULL, "notes" TEXT NOT NULL,
"relatedUser" TEXT, "relatedUser" UUID,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
@ -484,60 +540,97 @@ CREATE TABLE "system_logs" (
-- CreateTable -- CreateTable
CREATE TABLE "_MediaStudios" ( CREATE TABLE "_MediaStudios" (
"A" TEXT NOT NULL, "A" UUID NOT NULL,
"B" TEXT NOT NULL, "B" UUID NOT NULL,
CONSTRAINT "_MediaStudios_AB_pkey" PRIMARY KEY ("A","B") CONSTRAINT "_MediaStudios_AB_pkey" PRIMARY KEY ("A","B")
); );
-- CreateTable -- CreateTable
CREATE TABLE "_MediaGenres" ( CREATE TABLE "_MediaGenres" (
"A" TEXT NOT NULL, "A" UUID NOT NULL,
"B" TEXT NOT NULL, "B" UUID NOT NULL,
CONSTRAINT "_MediaGenres_AB_pkey" PRIMARY KEY ("A","B") CONSTRAINT "_MediaGenres_AB_pkey" PRIMARY KEY ("A","B")
); );
-- CreateTable -- CreateTable
CREATE TABLE "_UserFavoriteGenres" ( CREATE TABLE "_UserFavoriteGenres" (
"A" TEXT NOT NULL, "A" UUID NOT NULL,
"B" TEXT NOT NULL, "B" UUID NOT NULL,
CONSTRAINT "_UserFavoriteGenres_AB_pkey" PRIMARY KEY ("A","B") CONSTRAINT "_UserFavoriteGenres_AB_pkey" PRIMARY KEY ("A","B")
); );
-- CreateTable -- CreateTable
CREATE TABLE "_UserShowContries" ( CREATE TABLE "_MediaCharacters" (
"A" TEXT NOT NULL, "A" UUID NOT NULL,
"B" TEXT NOT NULL, "B" UUID NOT NULL,
CONSTRAINT "_UserShowContries_AB_pkey" PRIMARY KEY ("A","B") CONSTRAINT "_MediaCharacters_AB_pkey" PRIMARY KEY ("A","B")
);
-- CreateTable
CREATE TABLE "_UserRoles" (
"A" TEXT NOT NULL,
"B" TEXT NOT NULL,
CONSTRAINT "_UserRoles_AB_pkey" PRIMARY KEY ("A","B")
); );
-- CreateTable -- CreateTable
CREATE TABLE "_MediaCollections" ( CREATE TABLE "_MediaCollections" (
"A" TEXT NOT NULL, "A" UUID NOT NULL,
"B" TEXT NOT NULL, "B" UUID NOT NULL,
CONSTRAINT "_MediaCollections_AB_pkey" PRIMARY KEY ("A","B") CONSTRAINT "_MediaCollections_AB_pkey" PRIMARY KEY ("A","B")
); );
-- CreateTable -- CreateTable
CREATE TABLE "_UserSelectedSharingCollention" ( CREATE TABLE "_UserSelectedSharingCollention" (
"A" TEXT NOT NULL, "A" UUID NOT NULL,
"B" TEXT NOT NULL, "B" UUID NOT NULL,
CONSTRAINT "_UserSelectedSharingCollention_AB_pkey" PRIMARY KEY ("A","B") CONSTRAINT "_UserSelectedSharingCollention_AB_pkey" PRIMARY KEY ("A","B")
); );
-- CreateIndex
CREATE UNIQUE INDEX "medias_slug_key" ON "medias"("slug");
-- CreateIndex
CREATE UNIQUE INDEX "medias_malId_key" ON "medias"("malId");
-- CreateIndex
CREATE INDEX "medias_status_onDraft_deletedAt_idx" ON "medias"("status", "onDraft", "deletedAt");
-- CreateIndex
CREATE INDEX "medias_mediaType_idx" ON "medias"("mediaType");
-- CreateIndex
CREATE INDEX "medias_uploadedBy_idx" ON "medias"("uploadedBy");
-- CreateIndex
CREATE INDEX "medias_createdAt_idx" ON "medias"("createdAt");
-- CreateIndex
CREATE UNIQUE INDEX "genres_slug_key" ON "genres"("slug");
-- CreateIndex
CREATE UNIQUE INDEX "genres_malId_key" ON "genres"("malId");
-- CreateIndex
CREATE UNIQUE INDEX "studios_slug_key" ON "studios"("slug");
-- CreateIndex
CREATE UNIQUE INDEX "studios_malId_key" ON "studios"("malId");
-- CreateIndex
CREATE UNIQUE INDEX "characters_malId_key" ON "characters"("malId");
-- CreateIndex
CREATE UNIQUE INDEX "voice_actors_malId_key" ON "voice_actors"("malId");
-- CreateIndex
CREATE UNIQUE INDEX "lang_va_char_language_vaId_charId_key" ON "lang_va_char"("language", "vaId", "charId");
-- CreateIndex
CREATE UNIQUE INDEX "episodes_mediaId_episode_key" ON "episodes"("mediaId", "episode");
-- CreateIndex
CREATE UNIQUE INDEX "videos_serviceId_code_key" ON "videos"("serviceId", "code");
-- CreateIndex -- CreateIndex
CREATE UNIQUE INDEX "video_services_name_key" ON "video_services"("name"); CREATE UNIQUE INDEX "video_services_name_key" ON "video_services"("name");
@ -548,11 +641,17 @@ CREATE UNIQUE INDEX "users_username_key" ON "users"("username");
CREATE UNIQUE INDEX "users_email_key" ON "users"("email"); CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
-- CreateIndex -- CreateIndex
CREATE UNIQUE INDEX "users_preferenceId_key" ON "users"("preferenceId"); CREATE UNIQUE INDEX "users_providerId_key" ON "users"("providerId");
-- CreateIndex
CREATE UNIQUE INDEX "user_preferences_userId_key" ON "user_preferences"("userId");
-- CreateIndex -- CreateIndex
CREATE UNIQUE INDEX "user_roles_name_key" ON "user_roles"("name"); CREATE UNIQUE INDEX "user_roles_name_key" ON "user_roles"("name");
-- CreateIndex
CREATE INDEX "user_sessions_userId_isAuthenticated_deletedAt_idx" ON "user_sessions"("userId", "isAuthenticated", "deletedAt");
-- CreateIndex -- CreateIndex
CREATE UNIQUE INDEX "languages_code_key" ON "languages"("code"); CREATE UNIQUE INDEX "languages_code_key" ON "languages"("code");
@ -575,10 +674,7 @@ CREATE INDEX "_MediaGenres_B_index" ON "_MediaGenres"("B");
CREATE INDEX "_UserFavoriteGenres_B_index" ON "_UserFavoriteGenres"("B"); CREATE INDEX "_UserFavoriteGenres_B_index" ON "_UserFavoriteGenres"("B");
-- CreateIndex -- CreateIndex
CREATE INDEX "_UserShowContries_B_index" ON "_UserShowContries"("B"); CREATE INDEX "_MediaCharacters_B_index" ON "_MediaCharacters"("B");
-- CreateIndex
CREATE INDEX "_UserRoles_B_index" ON "_UserRoles"("B");
-- CreateIndex -- CreateIndex
CREATE INDEX "_MediaCollections_B_index" ON "_MediaCollections"("B"); CREATE INDEX "_MediaCollections_B_index" ON "_MediaCollections"("B");
@ -586,9 +682,6 @@ CREATE INDEX "_MediaCollections_B_index" ON "_MediaCollections"("B");
-- CreateIndex -- CreateIndex
CREATE INDEX "_UserSelectedSharingCollention_B_index" ON "_UserSelectedSharingCollention"("B"); CREATE INDEX "_UserSelectedSharingCollention_B_index" ON "_UserSelectedSharingCollention"("B");
-- AddForeignKey
ALTER TABLE "medias" ADD CONSTRAINT "medias_countryId_fkey" FOREIGN KEY ("countryId") REFERENCES "countries"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "medias" ADD CONSTRAINT "medias_uploadedBy_fkey" FOREIGN KEY ("uploadedBy") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "medias" ADD CONSTRAINT "medias_uploadedBy_fkey" FOREIGN KEY ("uploadedBy") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
@ -608,7 +701,19 @@ ALTER TABLE "genres" ADD CONSTRAINT "genres_createdBy_fkey" FOREIGN KEY ("create
ALTER TABLE "studios" ADD CONSTRAINT "studios_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "studios" ADD CONSTRAINT "studios_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "countries" ADD CONSTRAINT "countries_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "characters" ADD CONSTRAINT "characters_creatorId_fkey" FOREIGN KEY ("creatorId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "voice_actors" ADD CONSTRAINT "voice_actors_creatorId_fkey" FOREIGN KEY ("creatorId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "lang_va_char" ADD CONSTRAINT "lang_va_char_vaId_fkey" FOREIGN KEY ("vaId") REFERENCES "voice_actors"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "lang_va_char" ADD CONSTRAINT "lang_va_char_charId_fkey" FOREIGN KEY ("charId") REFERENCES "characters"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "lang_va_char" ADD CONSTRAINT "lang_va_char_creatorId_fkey" FOREIGN KEY ("creatorId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "episodes" ADD CONSTRAINT "episodes_mediaId_fkey" FOREIGN KEY ("mediaId") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "episodes" ADD CONSTRAINT "episodes_mediaId_fkey" FOREIGN KEY ("mediaId") REFERENCES "medias"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
@ -638,7 +743,7 @@ ALTER TABLE "videos" ADD CONSTRAINT "videos_uploadedBy_fkey" FOREIGN KEY ("uploa
ALTER TABLE "video_services" ADD CONSTRAINT "video_services_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "video_services" ADD CONSTRAINT "video_services_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "users" ADD CONSTRAINT "users_preferenceId_fkey" FOREIGN KEY ("preferenceId") REFERENCES "user_preferences"("id") ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE "user_preferences" ADD CONSTRAINT "user_preferences_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "user_preferences" ADD CONSTRAINT "user_preferences_langPreference_fkey" FOREIGN KEY ("langPreference") REFERENCES "languages"("code") ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE "user_preferences" ADD CONSTRAINT "user_preferences_langPreference_fkey" FOREIGN KEY ("langPreference") REFERENCES "languages"("code") ON DELETE SET NULL ON UPDATE CASCADE;
@ -649,6 +754,12 @@ ALTER TABLE "user_preferences" ADD CONSTRAINT "user_preferences_serviceDefaultId
-- AddForeignKey -- AddForeignKey
ALTER TABLE "user_roles" ADD CONSTRAINT "user_roles_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "user_roles" ADD CONSTRAINT "user_roles_createdBy_fkey" FOREIGN KEY ("createdBy") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "user_role_assignments" ADD CONSTRAINT "user_role_assignments_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "user_role_assignments" ADD CONSTRAINT "user_role_assignments_roleId_fkey" FOREIGN KEY ("roleId") REFERENCES "user_roles"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "user_notifications" ADD CONSTRAINT "user_notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "user_notifications" ADD CONSTRAINT "user_notifications_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
@ -734,16 +845,10 @@ ALTER TABLE "_UserFavoriteGenres" ADD CONSTRAINT "_UserFavoriteGenres_A_fkey" FO
ALTER TABLE "_UserFavoriteGenres" ADD CONSTRAINT "_UserFavoriteGenres_B_fkey" FOREIGN KEY ("B") REFERENCES "user_preferences"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "_UserFavoriteGenres" ADD CONSTRAINT "_UserFavoriteGenres_B_fkey" FOREIGN KEY ("B") REFERENCES "user_preferences"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "_UserShowContries" ADD CONSTRAINT "_UserShowContries_A_fkey" FOREIGN KEY ("A") REFERENCES "countries"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "_MediaCharacters" ADD CONSTRAINT "_MediaCharacters_A_fkey" FOREIGN KEY ("A") REFERENCES "characters"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "_UserShowContries" ADD CONSTRAINT "_UserShowContries_B_fkey" FOREIGN KEY ("B") REFERENCES "user_preferences"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "_MediaCharacters" ADD CONSTRAINT "_MediaCharacters_B_fkey" FOREIGN KEY ("B") REFERENCES "medias"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_UserRoles" ADD CONSTRAINT "_UserRoles_A_fkey" FOREIGN KEY ("A") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "_UserRoles" ADD CONSTRAINT "_UserRoles_B_fkey" FOREIGN KEY ("B") REFERENCES "user_roles"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey -- AddForeignKey
ALTER TABLE "_MediaCollections" ADD CONSTRAINT "_MediaCollections_A_fkey" FOREIGN KEY ("A") REFERENCES "collections"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "_MediaCollections" ADD CONSTRAINT "_MediaCollections_A_fkey" FOREIGN KEY ("A") REFERENCES "collections"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@ -756,3 +861,4 @@ ALTER TABLE "_UserSelectedSharingCollention" ADD CONSTRAINT "_UserSelectedSharin
-- AddForeignKey -- AddForeignKey
ALTER TABLE "_UserSelectedSharingCollention" ADD CONSTRAINT "_UserSelectedSharingCollention_B_fkey" FOREIGN KEY ("B") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "_UserSelectedSharingCollention" ADD CONSTRAINT "_UserSelectedSharingCollention_B_fkey" FOREIGN KEY ("B") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@ -1,12 +0,0 @@
/*
Warnings:
- You are about to drop the column `commentPicture` on the `users` table. All the data in the column will be lost.
- You are about to drop the column `profilePicture` on the `users` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE "users" DROP COLUMN "commentPicture",
DROP COLUMN "profilePicture",
ADD COLUMN "avatar" TEXT,
ADD COLUMN "commentBackground" TEXT;

View File

@ -0,0 +1,17 @@
/*
Warnings:
- You are about to drop the column `code` on the `videos` table. All the data in the column will be lost.
- A unique constraint covering the columns `[serviceId,videoCode]` on the table `videos` will be added. If there are existing duplicate values, this will fail.
- Added the required column `videoCode` to the `videos` table without a default value. This is not possible if the table is not empty.
*/
-- DropIndex
DROP INDEX "videos_serviceId_code_key";
-- AlterTable
ALTER TABLE "videos" RENAME COLUMN "code" TO "videoCode";
-- CreateIndex
DROP INDEX IF EXISTS "videos_serviceId_code_key";
CREATE UNIQUE INDEX "videos_serviceId_videoCode_key" ON "videos"("serviceId", "videoCode");

View File

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "videos" ADD COLUMN "thumbnailCode" TEXT;

View File

@ -211,7 +211,8 @@ model Video {
episodeId String @db.Uuid episodeId String @db.Uuid
service VideoService @relation("VideoServices", fields: [serviceId], references: [id]) service VideoService @relation("VideoServices", fields: [serviceId], references: [id])
serviceId String @db.Uuid serviceId String @db.Uuid
code String @db.VarChar(255) videoCode String @db.VarChar(255)
thumbnailCode String?
pendingUpload Boolean @default(true) pendingUpload Boolean @default(true)
uploader User @relation("UserVideos", fields: [uploadedBy], references: [id]) uploader User @relation("UserVideos", fields: [uploadedBy], references: [id])
uploadedBy String @db.Uuid uploadedBy String @db.Uuid
@ -219,7 +220,7 @@ model Video {
createdAt DateTime @default(now()) createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt updatedAt DateTime @default(now()) @updatedAt
@@unique([serviceId, code]) @@unique([serviceId, videoCode])
@@map("videos") @@map("videos")
} }

View File

@ -1,34 +0,0 @@
import { AppError } from "../../../../helpers/error/instances/app";
import { episodeModel } from "../../episode.model";
export const getAllEpisodeWithThumbnailLinkRepository = async (
serviceReferenceId: string,
) => {
try {
return await episodeModel.findMany({
where: {
deletedAt: null,
},
select: {
id: true,
episode: true,
videos: {
where: {
deletedAt: null,
serviceId: serviceReferenceId,
},
select: {
code: true,
service: {
select: {
endpointThumbnail: true,
},
},
},
},
},
});
} catch (error) {
throw new AppError(500, "Failed to get all episode thumbnails", error);
}
};

View File

@ -0,0 +1,30 @@
import { Prisma } from "@prisma/client";
import { AppError } from "../../../../helpers/error/instances/app";
import { prisma } from "../../../../utils/databases/prisma/connection";
export const bulkUpdateThumbnailRepository = async (
data: { episodeId: string; thumbnailCode: string }[],
) => {
try {
const values = Prisma.join(
data.map(
(item) => Prisma.sql`(${item.episodeId}::uuid, ${item.thumbnailCode})`,
),
);
await prisma.$executeRaw`
UPDATE episodes e
SET "pictureThumbnail" = v."thumbnailCode"
FROM (
VALUES ${values}
) AS v("episodeId", "thumbnailCode")
WHERE e.id = v."episodeId"
`;
} catch (error) {
throw new AppError(
500,
"An error occurred while bulk updating episode thumbnails.",
error,
);
}
};

View File

@ -1,18 +0,0 @@
import { Prisma } from "@prisma/client";
import { AppError } from "../../../../helpers/error/instances/app";
import { episodeModel } from "../../episode.model";
export const updateEpisodeRepository = async (
payload: Prisma.EpisodeUncheckedUpdateInput,
) => {
try {
return await episodeModel.update({
where: {
id: payload.id as string,
},
data: payload,
});
} catch (error) {
throw new AppError(500, "Failed to edit episode", error);
}
};

View File

@ -9,7 +9,8 @@ export interface BulkInsertVideoBodyRequest {
episode: number; episode: number;
videos: Array<{ videos: Array<{
service_id: string; service_id: string;
code: string; video_code: string;
thumbnail_code?: string;
}>; }>;
}>; }>;
} }

View File

@ -39,7 +39,7 @@ import { updateAllEpisodeThumbnailService } from "../services/http/updateAllEpis
* } * }
*/ */
export const updateAllEpisodeThumbnailController = async ( export const updateAllEpisodeThumbnailController = async (
ctx: Context & { body: { service_reference_id: string } }, ctx: Context & { body: { service_reference_id?: string } },
) => { ) => {
try { try {
const newEpisodeThumbnailsCount = await updateAllEpisodeThumbnailService( const newEpisodeThumbnailsCount = await updateAllEpisodeThumbnailService(

View File

@ -9,9 +9,9 @@ export const bulkInsertVideoRepository = async (
try { try {
return await prisma.video.upsert({ return await prisma.video.upsert({
where: { where: {
serviceId_code: { serviceId_videoCode: {
serviceId: payload.serviceId, serviceId: payload.serviceId,
code: payload.code, videoCode: payload.videoCode,
}, },
}, },
create: { create: {

View File

@ -20,7 +20,8 @@ export const bulkInsertVideoService = async (
pendingUpload: false, pendingUpload: false,
episodeId: episodeId.id, episodeId: episodeId.id,
serviceId: videoData.service_id, serviceId: videoData.service_id,
code: videoData.code, videoCode: videoData.video_code,
thumbnailCode: videoData.thumbnail_code,
uploadedBy: SystemAccountId, uploadedBy: SystemAccountId,
}); });

View File

@ -1,35 +1,39 @@
import { AppError } from "../../../../helpers/error/instances/app"; import { AppError } from "../../../../helpers/error/instances/app";
import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder"; import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder";
import { updateEpisodeRepository } from "../../../episode/repositories/PUT/updateEpisode.repository"; import { bulkUpdateThumbnailRepository } from "../../../episode/repositories/PUT/bulkUpdateThumbnail.repository";
import { getAllEpisodeWithThumbnailLinkRepository } from "../../../episode/repositories/GET/getAllEpisodeWithThumbnailLink.repository"; import { getAllVideoServiceWithEpisodeRepository } from "../../../videoService/repositories/GET/getAllVideoServiceWithEpisode.repository";
export const updateAllEpisodeThumbnailService = async ( export const updateAllEpisodeThumbnailService = async (
serviceReferenceId: string, serviceReferenceId?: string,
) => { ) => {
try { try {
if (!serviceReferenceId) if (!serviceReferenceId)
throw new AppError(400, "Service Reference ID is required."); throw new AppError(400, "Service Reference ID is required.");
const episodesData = await getAllEpisodeWithThumbnailLinkRepository( const videosData = await getAllVideoServiceWithEpisodeRepository(
serviceReferenceId, serviceReferenceId,
); );
let updatedThumbnailsCount = 0; if (!videosData || videosData.length === 0)
for (const episode of episodesData) { throw new AppError(
if (episode.videos.length === 0) continue; 404,
await updateEpisodeRepository({ "No episode with no thumbnail found in the specified video service.",
id: episode.id, );
pictureThumbnail:
episode.videos[0].service.endpointThumbnail?.replace( const updatePayload = videosData.flatMap((videoService) => {
const { endpointThumbnail, videos } = videoService;
return videos.map((video) => ({
episodeId: video.episode.id,
thumbnailCode: endpointThumbnail!.replace(
":code:", ":code:",
episode.videos[0].code, video.thumbnailCode || video.videoCode,
) || null, ),
}));
}); });
updatedThumbnailsCount++; await bulkUpdateThumbnailRepository(updatePayload);
}
return updatedThumbnailsCount; return updatePayload.length;
} catch (error) { } catch (error) {
ErrorForwarder(error); ErrorForwarder(error);
} }

View File

@ -0,0 +1,13 @@
import Elysia, { Context } from "elysia";
import { returnWriteResponse } from "../../helpers/callback/httpResponse";
export const videoServiceModule = new Elysia({ prefix: "/video-service" }).get(
"/",
async (ctx: Context) => {
return returnWriteResponse(
ctx.set,
200,
"Video service endpoint is working.",
);
},
);

View File

@ -0,0 +1,3 @@
import { prisma } from "../../utils/databases/prisma/connection";
export const videoServiceModel = prisma.videoService;

View File

@ -0,0 +1,44 @@
import { AppError } from "../../../../helpers/error/instances/app";
import { videoServiceModel } from "../../model";
export const getAllVideoServiceWithEpisodeRepository = async (
videoServiceId: string,
) => {
try {
return await videoServiceModel.findMany({
where: {
id: videoServiceId,
endpointThumbnail: {
not: null,
},
videos: {
some: {
episode: {
pictureThumbnail: null,
},
},
},
},
select: {
endpointThumbnail: true,
videos: {
select: {
thumbnailCode: true,
videoCode: true,
episode: {
select: {
id: true,
},
},
},
},
},
});
} catch (error) {
throw new AppError(
500,
"An error occurred while fetching video services with episodes.",
error,
);
}
};