diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 808fddf..a02ff9d 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -9,733 +9,3 @@ generator dbml { datasource db { provider = "postgresql" } - -model Media { - id String @id @db.Uuid - title String - titleAlternative Json - slug String @unique - malId Int? @unique - pictureMedium String - pictureLarge String - country Country @default(JP) - score Decimal @default(0.00) @db.Decimal(4, 2) - status String - startAiring DateTime? - endAiring DateTime? - synopsis String - ageRating String - mediaType MediaType - source String? - onDraft Boolean @default(true) - season Season? - yearReleased Int @db.SmallInt - uploadedBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - inCollections CollectionMedia[] @relation("CollectionMedia") - episodes Episode[] @relation("MediaEpisodes") - bannerPromotion HeroBanner[] @relation("MediaBannerPromotion") - logs MediaLog[] @relation("MediaLogs") - uploader User @relation("UserUploadedMedias", fields: [uploadedBy], references: [id]) - reviews MediaReview[] @relation("MediaReviews") - characters Character[] @relation("MediaCharacters") - genres Genre[] @relation("MediaGenres") - studios Studio[] @relation("MediaStudios") - - @@index([status, onDraft, deletedAt]) - @@index([mediaType]) - @@index([uploadedBy]) - @@index([createdAt]) - @@map("medias") -} - -model MediaLog { - id String @id @db.Uuid - status MediaOperation - approval Boolean @default(false) - proposedBy String @db.Uuid - approvedBy String @db.Uuid - mediaId String @db.Uuid - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - approver User @relation("UserApprovedMedias", fields: [approvedBy], references: [id]) - media Media @relation("MediaLogs", fields: [mediaId], references: [id]) - proposer User @relation("UserProposedMedias", fields: [proposedBy], references: [id]) - - @@map("media_logs") -} - -model Genre { - id String @id @db.Uuid - name String @db.VarChar(255) - slug String @unique @db.VarChar(255) - malId Int @unique - malUrl String @db.VarChar(255) - createdBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - creator User @relation("UserCreatedGenres", fields: [createdBy], references: [id]) - medias Media[] @relation("MediaGenres") - user_favourite_genres UserPreference[] @relation("UserFavoriteGenres") - - @@map("genres") -} - -model Studio { - id String @id @db.Uuid - name String @db.VarChar(255) - slug String @unique @db.VarChar(255) - linkAbout String - malId Int @unique - logoUrl String? - createdBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - creator User @relation("UserCreatedStudios", fields: [createdBy], references: [id]) - medias Media[] @relation("MediaStudios") - - @@map("studios") -} - -model Character { - id String @id @db.Uuid - malId Int @unique - name String - role CharacterRole - favorites Int @default(0) - imageUrl String? - smallImageUrl String? - creatorId String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - createdBy User @relation("UserCreatedCharacters", fields: [creatorId], references: [id]) - voice_actors LangVAChar[] @relation("CharVALanguage") - medias Media[] @relation("MediaCharacters") - - @@map("characters") -} - -model VoiceActor { - id String @id @db.Uuid - malId Int @unique - name String - birthday DateTime? - description String? - aboutUrl String? - imageUrl String? - websiteUrl String? - creatorId String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - characters LangVAChar[] @relation("VACharLanguage") - createdBy User @relation("UserCreatedVoiceActors", fields: [creatorId], references: [id]) - - @@map("voice_actors") -} - -model LangVAChar { - id String @id @db.Uuid - language String - vaId String @db.Uuid - charId String @db.Uuid - creatorId String @db.Uuid - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - character Character @relation("CharVALanguage", fields: [charId], references: [id]) - createdBy User @relation("UserCreatedLangVAChar", fields: [creatorId], references: [id]) - voiceActor VoiceActor @relation("VACharLanguage", fields: [vaId], references: [id]) - - @@unique([language, vaId, charId]) - @@map("lang_va_char") -} - -model Episode { - id String @id @db.Uuid - mediaId String @db.Uuid - episode Int - name String @db.VarChar(255) - score Decimal @default(0.00) @db.Decimal(4, 2) - pictureThumbnail String? - viewed BigInt @default(0) - likes BigInt @default(0) - dislikes BigInt @default(0) - pendingUpload Boolean @default(true) - uploadedBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - comments Comment[] @relation("EpisodeComments") - user_likes EpisodeLike[] @relation("EpisodeLikes") - media Media @relation("MediaEpisodes", fields: [mediaId], references: [id]) - uploader User @relation("UserEpisodes", fields: [uploadedBy], references: [id]) - videos Video[] @relation("EpisodeVideos") - user_histories WatchHistory? @relation("EpisodeWatchHistories") - - @@unique([mediaId, episode]) - @@map("episodes") -} - -model EpisodeLike { - id String @id @db.Uuid - userId String @db.Uuid - sessionId String @db.Uuid - episodeId String @db.Uuid - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - episode Episode @relation("EpisodeLikes", fields: [episodeId], references: [id]) - session UserSession @relation("SessionEpisodeLikes", fields: [sessionId], references: [id]) - user User @relation("UserEpisodeLikes", fields: [userId], references: [id]) - - @@map("episode_likes") -} - -model Video { - id String @id @db.Uuid - episodeId String @db.Uuid - serviceId String @db.Uuid - videoCode String @db.VarChar(255) - thumbnailCode String? - pendingUpload Boolean @default(true) - uploadedBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - episode Episode @relation("EpisodeVideos", fields: [episodeId], references: [id]) - service VideoService @relation("VideoServices", fields: [serviceId], references: [id]) - uploader User @relation("UserVideos", fields: [uploadedBy], references: [id]) - - @@unique([serviceId, videoCode]) - @@map("videos") -} - -model VideoService { - id String @id @db.Uuid - name String @unique @db.VarChar(255) - domain String @db.VarChar(255) - logo String? - hexColor String @db.VarChar(10) - endpointVideo String - endpointThumbnail String? - endpointDownload String? - createdBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - user_preferences UserPreference[] @relation("UserServiceDefault") - creator User @relation("UserVideoServices", fields: [createdBy], references: [id]) - videos Video[] @relation("VideoServices") - - @@map("video_services") -} - -model User { - id String @id @db.Uuid - name String @db.VarChar(255) - username String @unique @db.VarChar(255) - email String @unique - password String - birthDate DateTime? @db.Date - gender UserGender? - phoneCC Int? - phoneNumber Int? - bioProfile String? - avatar String? - commentBackground String? - provider String? @db.VarChar(255) - providerId String? @unique @db.VarChar(255) - providerToken String? - providerPayload Json? @db.Json - verifiedAt DateTime? - disabledAt DateTime? - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - characters Character[] @relation("UserCreatedCharacters") - collections Collection[] @relation("UserCollections") - liked_comments CommentLike[] @relation("UserCommentLikes") - approved_comments CommentReport[] @relation("ApprovedReportComments") - reported_comments CommentReport[] @relation("UserReportComments") - comments Comment[] @relation("UserComments") - user_create_email EmailSystemAccount[] @relation("UserCreateSystemAccount") - user_emails EmailSystemHistory[] @relation("UserEmails") - episode_likes EpisodeLike[] @relation("UserEpisodeLikes") - episodes Episode[] @relation("UserEpisodes") - genres Genre[] @relation("UserCreatedGenres") - user_hero_banner HeroBanner[] @relation("UserHeroBanner") - lang_va_char LangVAChar[] @relation("UserCreatedLangVAChar") - create_languages Language[] @relation("UserCreateLanguages") - media_approveds MediaLog[] @relation("UserApprovedMedias") - media_proposeds MediaLog[] @relation("UserProposedMedias") - medias Media[] @relation("UserUploadedMedias") - media_reviews MediaReview[] @relation("UserMediaReviews") - studios Studio[] @relation("UserCreatedStudios") - sys_logs SystemLog[] @relation("UserSystemLogs") - sys_notifications SystemNotification[] @relation("UserCreatorSystemNotifications") - logs UserLog[] @relation("UserLogs") - notifications UserNotification[] @relation("UserNotifications") - preference UserPreference? - assignedRoles UserRoleAssignment[] - create_roles UserRole[] @relation("UserCreateRoles") - sessions UserSession[] @relation("UserSession") - video_services VideoService[] @relation("UserVideoServices") - videos Video[] @relation("UserVideos") - voice_actor VoiceActor[] @relation("UserCreatedVoiceActors") - watch_histories WatchHistory[] @relation("UserWatchHistories") - allowed_collections Collection[] @relation("UserSelectedSharingCollention") - - @@map("users") -} - -model UserPreference { - id String @id @db.Uuid - userId String @unique @db.Uuid - langPreference String? - adultFiltering AdultFiltering @default(hide) - adultAlert AdultAlert @default(show) - videoQuality VideoQuality @default(Q1080) - serviceDefaultId String? @db.Uuid - hideContries Country[] - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - lang Language? @relation("UserPreferenceLang", fields: [langPreference], references: [code]) - serviceDefault VideoService? @relation("UserServiceDefault", fields: [serviceDefaultId], references: [id]) - user User @relation(fields: [userId], references: [id]) - favoriteGenres Genre[] @relation("UserFavoriteGenres") - - @@map("user_preferences") -} - -model UserRole { - id String @id @db.Uuid - name String @unique @db.VarChar(255) - description String? - primaryColor String? @db.VarChar(10) - secondaryColor String? @db.VarChar(10) - pictureImage String? - badgeImage String? - isSuperadmin Boolean @default(false) - canEditMedia Boolean @default(false) - canManageMedia Boolean @default(false) - canEditEpisodes Boolean @default(false) - canManageEpisodes Boolean @default(false) - canEditComment Boolean @default(false) - canManageComment Boolean @default(false) - canEditUser Boolean @default(false) - canManageUser Boolean @default(false) - canEditSystem Boolean @default(false) - canManageSystem Boolean @default(false) - createdBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - assignedUser UserRoleAssignment[] - creator User @relation("UserCreateRoles", fields: [createdBy], references: [id]) - - @@map("user_roles") -} - -model UserRoleAssignment { - userId String @db.Uuid - roleId String @db.Uuid - assignmentAt DateTime @default(now()) - role UserRole @relation(fields: [roleId], references: [id]) - user User @relation(fields: [userId], references: [id]) - - @@id([userId, roleId]) - @@map("user_role_assignments") -} - -model UserNotification { - id String @id @db.Uuid - title String @db.VarChar(255) - content String - picture String - state UserNotificationState - ctaLink String - userId String @db.Uuid - isReaded Boolean @default(false) - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - user User @relation("UserNotifications", fields: [userId], references: [id]) - - @@map("user_notifications") -} - -model UserSession { - id String @id @db.Uuid - isAuthenticated Boolean @default(false) - userId String @db.Uuid - deviceType String @db.VarChar(255) - deviceOs String @db.VarChar(255) - deviceIp String @db.VarChar(255) - browser String @db.VarChar(255) - isOnline Boolean @default(false) - lastOnline DateTime @default(now()) - validUntil DateTime - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - episode_likes EpisodeLike[] @relation("SessionEpisodeLikes") - logs UserLog[] @relation("UserSessionLogs") - user User @relation("UserSession", fields: [userId], references: [id]) - watch_histories WatchHistory[] @relation("SessionWatchHistories") - - @@index([userId, isAuthenticated, deletedAt]) - @@map("user_sessions") -} - -model UserLog { - id String @id @db.Uuid - title String @db.VarChar(255) - notes String - userId String @db.Uuid - sessionId String @db.Uuid - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - session UserSession @relation("UserSessionLogs", fields: [sessionId], references: [id]) - user User @relation("UserLogs", fields: [userId], references: [id]) - - @@map("user_logs") -} - -model Collection { - id String @id @db.Uuid - name String @db.VarChar(115) - ownerId String @db.Uuid - accessStatus AccessStatus @default(private) - password String? @db.VarChar(255) - accessScope AccessScope @default(viewer) - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - slug String @db.VarChar(115) - media_saved CollectionMedia[] @relation("CollectionMedia") - owner User @relation("UserCollections", fields: [ownerId], references: [id]) - usersAllowed User[] @relation("UserSelectedSharingCollention") - - @@unique([slug, ownerId]) - @@map("collections") -} - -model CollectionMedia { - id String @id @db.Uuid - collectionId String @db.Uuid - mediaId String @db.Uuid - savedAt DateTime @default(now()) - collection Collection @relation("CollectionMedia", fields: [collectionId], references: [id]) - media Media @relation("CollectionMedia", fields: [mediaId], references: [id]) - - @@unique([collectionId, mediaId]) -} - -model WatchHistory { - id String @id @db.Uuid - episodeId String @db.Uuid - userId String @db.Uuid - sessionId String @db.Uuid - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - episode Episode @relation("EpisodeWatchHistories", fields: [id], references: [id]) - session UserSession @relation("SessionWatchHistories", fields: [sessionId], references: [id]) - user User @relation("UserWatchHistories", fields: [userId], references: [id]) - - @@map("watch_histories") -} - -model MediaReview { - id String @id @db.Uuid - mediaId String @db.Uuid - rating Int - title String @db.VarChar(255) - text String - reaction MediaReviewReaction - createdBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - creator User @relation("UserMediaReviews", fields: [createdBy], references: [id]) - media Media @relation("MediaReviews", fields: [mediaId], references: [id]) - - @@map("movie_reviews") -} - -model Comment { - id String @id @db.Uuid - episodeId String @db.Uuid - text String - isParent Boolean @default(false) - parentId String? @db.Uuid - userId String @db.Uuid - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - likes CommentLike[] @relation("CommentLikes") - episode Episode @relation("EpisodeComments", fields: [episodeId], references: [id]) - parent Comment? @relation("ParentReplyComments", fields: [parentId], references: [id]) - replies Comment[] @relation("ParentReplyComments") - user User @relation("UserComments", fields: [userId], references: [id]) - - @@map("comments") -} - -model CommentLike { - id String @id @db.Uuid - commentId String @db.Uuid - userLiked String @db.Uuid - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - comment Comment @relation("CommentLikes", fields: [commentId], references: [id]) - user User @relation("UserCommentLikes", fields: [userLiked], references: [id]) - - @@map("comment_likes") -} - -model CommentReport { - id String @id @db.Uuid - userReporter String @db.Uuid - commentReported String @db.Uuid - isSupervisorReport Boolean @default(false) - reason ReportReason - status ReportStatus - description String @db.VarChar(255) - approvedBy String? @db.Uuid - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - approver User? @relation("ApprovedReportComments", fields: [approvedBy], references: [id]) - reporter User @relation("UserReportComments", fields: [userReporter], references: [id]) - - @@map("comment_reports") -} - -model Language { - id String @id @db.Uuid - name String @db.VarChar(255) - code String @unique @db.VarChar(5) - countryFlag String @db.VarChar(10) - fileLocation String - craetedBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - creator User @relation("UserCreateLanguages", fields: [craetedBy], references: [id]) - user_used UserPreference[] @relation("UserPreferenceLang") - - @@map("languages") -} - -model EmailSystemAccount { - id String @id @db.Uuid - name String @unique - host String @db.VarChar(255) - port Int - secure Boolean - email String @unique @db.VarChar(255) - username String @unique @db.VarChar(255) - password String @db.VarChar(255) - purpose EmailPorpose - createdBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - creator User @relation("UserCreateSystemAccount", fields: [createdBy], references: [id]) - - @@map("email_system_accounts") -} - -model EmailSystemHistory { - id String @id @db.Uuid - purpose EmailPorpose - fromEmail String - toEmail String - userRelated String @db.Uuid - title String @db.VarChar(255) - htmlContent String - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - user User @relation("UserEmails", fields: [userRelated], references: [id]) - - @@map("email_system_histories") -} - -model HeroBanner { - id String @id @db.Uuid - orderPriority Int? @unique - imageUrl String? - startDate DateTime - endDate DateTime - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - creatorId String @db.Uuid - mediaId String @db.Uuid - createdBy User @relation("UserHeroBanner", fields: [creatorId], references: [id]) - media Media @relation("MediaBannerPromotion", fields: [mediaId], references: [id]) - - @@map("hero_banner") -} - -model SystemPreference { - id String @id @db.Uuid - key String @unique @db.VarChar(225) - value String @db.VarChar(225) - description String - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - - @@map("system_preferences") -} - -model SystemNotification { - id String @id @db.Uuid - type TypeSystemNotification - componentName String? @db.VarChar(255) - popupImage String? - titleToast String? @db.VarChar(255) - contentToast String? - createdBy String @db.Uuid - deletedAt DateTime? - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - creator User @relation("UserCreatorSystemNotifications", fields: [createdBy], references: [id]) - - @@map("system_notifications") -} - -model SystemLog { - id String @id @db.Uuid - title String @db.VarChar(255) - notes String - relatedUser String? @db.Uuid - createdAt DateTime @default(now()) - updatedAt DateTime @default(now()) @updatedAt - user User? @relation("UserSystemLogs", fields: [relatedUser], references: [id]) - - @@map("system_logs") -} - -enum MediaType { - TV - ONA - OVA - Movie - Special - Music -} - -enum Country { - JP @map("Japanese") - EN @map("English") - ID @map("Indonesia") - KR @map("Korea") -} - -enum Season { - winter - spring - summer - fall -} - -enum CharacterRole { - Main - Supporting -} - -enum MediaOperation { - create - update - delete -} - -enum UserGender { - male - female -} - -enum AdultFiltering { - hide - show - explicit -} - -enum AdultAlert { - hide - show -} - -enum VideoQuality { - Q2160 - Q1440 - Q1080 - Q720 - Q480 - Q360 - Q240 - Q144 -} - -enum UserNotificationState { - info - warning - danger -} - -enum ReportStatus { - pending - resolved - rejected -} - -enum ReportReason { - sexualize - violent - explicit - hateful - political - racist - spam - other -} - -enum AccessStatus { - private - selected - protected - public -} - -enum AccessScope { - viewer - editor -} - -enum MediaReviewReaction { - angry - sad - awesome - happy - sleepy - annoyed - disgusting - disappointed -} - -enum EmailPorpose { - forgot_password - account_activation - account_notification - subscribtion -} - -enum TypeSystemNotification { - component - popup - toast -}