Compare commits

..

2 Commits

Author SHA1 Message Date
e07d9cfa87 🗃️ db: add collection schema support and finalize schema structure
All checks were successful
Integration Tests / integration-tests (pull_request) Successful in 31s
2026-05-26 21:32:13 +07:00
8cb63e0e36 🗃 db: create collection schema 2026-05-26 21:21:06 +07:00

View File

@ -85,6 +85,19 @@ enum audit_action {
flag
}
enum privacy_level {
public
unlisted
private
}
enum collection_access_level {
owner
moderator
contributor
viewer
}
/**
@ -134,6 +147,11 @@ model User {
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")
@ -187,7 +205,7 @@ model UserSession {
}
model UserPreference {
user_id String @id @db.Uuid
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)
@ -205,7 +223,7 @@ model UserPreference {
rating_preferences UserRatingPreference[]
country_preferences UserCountryPreference[]
user User @relation(fields: [user_id], references: [id])
user_id String @id @db.Uuid
char_as_partner_id String @db.Uuid
@@map("user_preferences")
}
@ -248,12 +266,51 @@ model UserFollow {
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_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()
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_id String @db.Uuid
user_id String @db.Uuid
invited_by_id String? @db.Uuid
@@id([collection_id, user_id])
@@map("collection_members")
}
/**
@ -315,6 +372,8 @@ model Media {
created_by_id String? @db.Uuid
updated_by_id String? @db.Uuid
deleted_by_id String? @db.Uuid
home_media_banners HomeMediaBanner[]
saved_to_collections MediaCollection[]
@@map("medias")
}
@ -334,6 +393,19 @@ model MediaSubmission {
@@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_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)
@ -579,6 +651,7 @@ model Episode {
videos Video[]
created_by_id String @db.Uuid
comments Comment[]
watch_histories UserWatchHistory[]
@@index([media_id, episode])
@@map("episodes")
}
@ -740,3 +813,17 @@ model Country {
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()
media_id String @db.Uuid
created_by_id String @db.Uuid
@@map("home_media_banners")
}