206 lines
6.3 KiB
Plaintext
206 lines
6.3 KiB
Plaintext
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")
|
|
} |