generator client { provider = "prisma-client-js" } generator dbml { provider = "prisma-dbml-generator" } datasource db { provider = "postgresql" } enum user_role { user contributor curator admin } enum user_sex { male female } enum auth_provider { google github } enum device_type { mobile tablet desktop unknown } enum user_preference_state { exclude include } 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") auth_provider String? @db.VarChar(64) provider_token String? @db.VarChar(255) 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") @@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) 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.VarChar(255) refresh_token String? @db.VarChar(255) expires_at DateTime? @db.Timestamptz() last_login DateTime @default(now()) @db.Timestamptz() created_at DateTime @default(now()) @db.Timestamptz() updated_at DateTime @updatedAt @db.Timestamptz() 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]) 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() login_at DateTime @default(now()) @db.Timestamptz() logout_at DateTime? @db.Timestamptz() user_id String @db.Uuid @@map("user_sessions") } model UserPreference { user_id String @id @db.Uuid // char_as_partner 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]) genre_preferences UserGenrePreference[] rating_preferences UserRatingPreference[] country_preferences UserCountryPreference[] @@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_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 Rating @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]) state user_preference_state 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_id String @db.Uuid following_id String @db.Uuid @@id([follower_id, following_id]) @@map("user_follows") } 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) 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) flag String? @db.VarChar(255) banner String? @db.VarChar(255) UserCountry User[] @relation("UserCountry") UserCountryPreference UserCountryPreference[] @@map("countries") }