Compare commits
2 Commits
21b3a7011f
...
6f7a40cfd9
| Author | SHA1 | Date | |
|---|---|---|---|
| 6f7a40cfd9 | |||
| f8b63184a3 |
@ -53,6 +53,11 @@ Enum "device_type" {
|
|||||||
"unknown"
|
"unknown"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Enum "oauth_provider" {
|
||||||
|
"google"
|
||||||
|
"github"
|
||||||
|
}
|
||||||
|
|
||||||
Table "public"."user_rating_preferences" {
|
Table "public"."user_rating_preferences" {
|
||||||
"user_id" uuid [unique, not null, ref: > "public"."user_preferences"."user_id"]
|
"user_id" uuid [unique, not null, ref: > "public"."user_preferences"."user_id"]
|
||||||
"rating_id" uuid [not null, ref: > "public"."media_age_ratings"."id"]
|
"rating_id" uuid [not null, ref: > "public"."media_age_ratings"."id"]
|
||||||
@ -99,7 +104,7 @@ Table "public"."medias" {
|
|||||||
"title" varchar(255) [not null]
|
"title" varchar(255) [not null]
|
||||||
"title_secondary" varchar(255)
|
"title_secondary" varchar(255)
|
||||||
"title_original" varchar(255)
|
"title_original" varchar(255)
|
||||||
"title_synonyms" varchar(255) [note: 'This is Array']
|
"title_synonyms" varchar(255)[]
|
||||||
"trailers" uuid
|
"trailers" uuid
|
||||||
"synopsis" text [not null]
|
"synopsis" text [not null]
|
||||||
"small_image_url" varchar(255)
|
"small_image_url" varchar(255)
|
||||||
@ -205,7 +210,7 @@ Table "public"."provisioned_users" {
|
|||||||
"provisioned_by" uuid [unique, not null, ref: > "public"."users"."id"]
|
"provisioned_by" uuid [unique, not null, ref: > "public"."users"."id"]
|
||||||
"provisioned_to" uuid [not null, ref: > "public"."users"."id"]
|
"provisioned_to" uuid [not null, ref: > "public"."users"."id"]
|
||||||
"provisioned_at" timestamp [not null]
|
"provisioned_at" timestamp [not null]
|
||||||
"reason" bigint
|
"reason" varchar(255)
|
||||||
}
|
}
|
||||||
|
|
||||||
Table "public"."collection_members" {
|
Table "public"."collection_members" {
|
||||||
@ -319,16 +324,21 @@ Table "public"."comments" {
|
|||||||
"deleted_at" timestamp
|
"deleted_at" timestamp
|
||||||
}
|
}
|
||||||
|
|
||||||
Table "public"."user_oauth_credentials" {
|
Table "public"."user_oauth_accounts" {
|
||||||
"id" uuid [pk, not null, ref: > "public"."users"."id"]
|
"id" uuid [pk, not null]
|
||||||
"user_id" uuid [not null]
|
"user_id" uuid [not null, ref: > "public"."users"."id"]
|
||||||
"oauth_id" uuid [not null]
|
"provider_name" oauth_provider [not null]
|
||||||
"provider_token" varchar(500)
|
"provider_sub" varchar(255)
|
||||||
"provider_sub" varchar(500)
|
"provider_email" varchar(255)
|
||||||
"last_action" timestamp [not null]
|
"access_token" varchar(255)
|
||||||
|
"refresh_token" varchar(255)
|
||||||
|
"last_login" timestamptz [not null]
|
||||||
|
"expires_at" timestamptz
|
||||||
|
"created_at" timestamptz [not null]
|
||||||
|
"updated_at" timestamptz [not null]
|
||||||
|
|
||||||
Indexes {
|
Indexes {
|
||||||
(oauth_id, user_id) [unique, name: "index_2"]
|
(user_id, provider_name) [unique, name: "index_2"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -549,23 +559,22 @@ Table "public"."user_sessions" {
|
|||||||
"id" uuid [pk, not null]
|
"id" uuid [pk, not null]
|
||||||
"user_id" uuid [not null, ref: > "public"."users"."id"]
|
"user_id" uuid [not null, ref: > "public"."users"."id"]
|
||||||
"device_type" device_type [not null]
|
"device_type" device_type [not null]
|
||||||
"os_type" varchar(500)
|
"os_type" varchar(50)
|
||||||
"os_version" varchar(500)
|
"os_version" varchar(50)
|
||||||
"browser_name" varchar(500)
|
"browser_name" varchar(50)
|
||||||
"browser_version" varchar(500)
|
"browser_version" varchar(50)
|
||||||
"ip_login" inet [not null]
|
"ip_login" inet [not null]
|
||||||
"last_activity_at" timestamp
|
"login_at" timestamptz [not null]
|
||||||
"login_at" timestamp [not null]
|
"logout_at" timestamptz
|
||||||
"logout_at" timestamp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Table "public"."user_addresses" {
|
Table "public"."user_addresses" {
|
||||||
"user_id" uuid [pk, not null]
|
"user_id" uuid [pk, not null]
|
||||||
"street_address" varchar(500) [not null]
|
"street_address" varchar(255) [not null]
|
||||||
"district" varchar(500) [not null]
|
"district" varchar(100) [not null]
|
||||||
"city" varchar(500) [not null]
|
"city" varchar(100) [not null]
|
||||||
"province" varchar(500) [not null]
|
"province" varchar(100) [not null]
|
||||||
"postal_code" varchar(500) [not null]
|
"postal_code" varchar(20) [not null]
|
||||||
"coordinate" varchar(500)
|
"coordinate" varchar(50)
|
||||||
"updated_at" timestamp [not null]
|
"updated_at" timestamp [not null]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,40 +1,73 @@
|
|||||||
|
/**
|
||||||
|
* This is the Prisma schema file for the application. It defines the data models, their relationships, and the database configuration.
|
||||||
|
* The schema is used by Prisma to generate the database migrations and the Prisma Client for querying the database.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ----------------------------------
|
||||||
|
* Prisma Schema Configuration
|
||||||
|
* ----------------------------------
|
||||||
|
*/
|
||||||
generator client {
|
generator client {
|
||||||
provider = "prisma-client-js"
|
provider = "prisma-client-js"
|
||||||
}
|
}
|
||||||
|
|
||||||
generator dbml {
|
generator dbml {
|
||||||
provider = "prisma-dbml-generator"
|
provider = "prisma-dbml-generator"
|
||||||
}
|
}
|
||||||
|
|
||||||
datasource db {
|
datasource db {
|
||||||
provider = "postgresql"
|
provider = "postgresql"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ----------------------------------
|
||||||
|
* Enum Definitions
|
||||||
|
* ----------------------------------
|
||||||
|
*/
|
||||||
enum user_role {
|
enum user_role {
|
||||||
user
|
user
|
||||||
contributor
|
contributor
|
||||||
curator
|
curator
|
||||||
admin
|
admin
|
||||||
}
|
}
|
||||||
|
|
||||||
enum user_sex {
|
enum user_sex {
|
||||||
male
|
male
|
||||||
female
|
female
|
||||||
}
|
}
|
||||||
|
|
||||||
enum auth_provider {
|
enum auth_provider {
|
||||||
google
|
google
|
||||||
github
|
github
|
||||||
}
|
}
|
||||||
|
|
||||||
enum device_type {
|
enum device_type {
|
||||||
mobile
|
mobile
|
||||||
tablet
|
tablet
|
||||||
desktop
|
desktop
|
||||||
unknown
|
unknown
|
||||||
}
|
}
|
||||||
|
|
||||||
enum user_preference_state {
|
enum user_preference_state {
|
||||||
exclude
|
exclude
|
||||||
include
|
include
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum media_season {
|
||||||
|
winter
|
||||||
|
spring
|
||||||
|
summer
|
||||||
|
fall
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ----------------------------------
|
||||||
|
* Model for User and related entities
|
||||||
|
* ----------------------------------
|
||||||
|
*/
|
||||||
model User {
|
model User {
|
||||||
id String @id @db.Uuid @default(uuid(7))
|
id String @id @db.Uuid @default(uuid(7))
|
||||||
email String @unique
|
email String @unique
|
||||||
@ -56,9 +89,13 @@ model User {
|
|||||||
updated_at DateTime @updatedAt @db.Timestamptz()
|
updated_at DateTime @updatedAt @db.Timestamptz()
|
||||||
deleted_at DateTime? @db.Timestamptz()
|
deleted_at DateTime? @db.Timestamptz()
|
||||||
|
|
||||||
countryId String? @db.Uuid
|
countryId String? @db.Uuid
|
||||||
oauth_accounts UserOauthAccounts[]
|
oauth_accounts UserOauthAccounts[]
|
||||||
sessions UserSession[]
|
sessions UserSession[]
|
||||||
|
followers UserFollow[] @relation("UserFollowFollowing")
|
||||||
|
following UserFollow[] @relation("UserFollowFollower")
|
||||||
|
provisioned_as_admin ProvisionedUser[] @relation("ProvisionedUserAdmin")
|
||||||
|
provisioned_as_user ProvisionedUser[] @relation("ProvisionedUserUser")
|
||||||
@@map("users")
|
@@map("users")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,6 +202,140 @@ model UserCountryPreference {
|
|||||||
@@map("user_country_preferences")
|
@@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 for Media and related entities
|
||||||
|
* ----------------------------------
|
||||||
|
*/
|
||||||
|
model Media {
|
||||||
|
id String @id @db.Uuid @default(uuid(7))
|
||||||
|
mal_id Int @unique
|
||||||
|
title String @db.VarChar(255)
|
||||||
|
title_secondary String? @db.VarChar(255)
|
||||||
|
title_original String? @db.VarChar(255)
|
||||||
|
title_synonyms String[] @db.VarChar(255)
|
||||||
|
trailer MediaTrailer?
|
||||||
|
synopsis String? @db.Text
|
||||||
|
small_image_url String? @db.VarChar(255)
|
||||||
|
medium_image_url String @db.VarChar(255)
|
||||||
|
large_image_url String? @db.VarChar(255)
|
||||||
|
type MediaType @relation(fields: [type_id], references: [id])
|
||||||
|
source MediaSource? @relation(fields: [source_id], references: [id])
|
||||||
|
status MediaStatus? @relation(fields: [status_id], references: [id])
|
||||||
|
airing Boolean
|
||||||
|
start_airing DateTime? @db.Date
|
||||||
|
end_airing DateTime? @db.Date
|
||||||
|
age_rating MediaAgeRating? @relation(fields: [age_rating_id], references: [id])
|
||||||
|
score Decimal? @db.Decimal(2, 2)
|
||||||
|
score_total Int @default(0)
|
||||||
|
score_count Int @default(0)
|
||||||
|
background String? @db.Text
|
||||||
|
season media_season
|
||||||
|
year Int? @db.SmallInt
|
||||||
|
country Country? @relation(fields: [country_id], references: [id])
|
||||||
|
broadcast_day String? @db.VarChar(20)
|
||||||
|
// producers MediaProducer[]
|
||||||
|
// licensors MediaLicensor[]
|
||||||
|
// studios MediaStudio[]
|
||||||
|
// genres MediaGenre[]
|
||||||
|
// explicit_genres MediaExplicitGenre[]
|
||||||
|
// themes MediaTheme[]
|
||||||
|
// demographics MediaDemographic[]
|
||||||
|
// relations MediaRelation[]
|
||||||
|
// external_links MediaExternalLink[]
|
||||||
|
// characters MediaCharacter[]
|
||||||
|
// approved_by User? @relation(fields: [approver_id], references: [id])
|
||||||
|
// approved_at Boolean @default(false)
|
||||||
|
// created_by User? @relation(fields: [created_by_id], references: [id])
|
||||||
|
// created_at DateTime @default(now()) @db.Timestamptz()
|
||||||
|
// updated_by User? @relation(fields: [updated_by_id], references: [id])
|
||||||
|
// deleted_at DateTime? @db.Timestamptz()
|
||||||
|
|
||||||
|
|
||||||
|
type_id String @db.Uuid
|
||||||
|
source_id String @db.Uuid
|
||||||
|
status_id String @db.Uuid
|
||||||
|
age_rating_id String? @db.Uuid
|
||||||
|
country_id String? @db.Uuid
|
||||||
|
@@map("medias")
|
||||||
|
}
|
||||||
|
|
||||||
|
model MediaTrailer {
|
||||||
|
media_id String @id @db.Uuid
|
||||||
|
url String? @db.VarChar(255)
|
||||||
|
embed_url String? @db.VarChar(255)
|
||||||
|
small_image_url String? @db.VarChar(255)
|
||||||
|
large_image_url String? @db.VarChar(255)
|
||||||
|
maximum_image_url String? @db.VarChar(255)
|
||||||
|
|
||||||
|
media Media @relation(fields: [media_id], references: [id])
|
||||||
|
@@map("media_trailers")
|
||||||
|
}
|
||||||
|
|
||||||
|
model MediaType {
|
||||||
|
id String @id @db.Uuid @default(uuid(7))
|
||||||
|
name String @db.VarChar(100) @unique
|
||||||
|
|
||||||
|
Media Media[]
|
||||||
|
@@map("media_types")
|
||||||
|
}
|
||||||
|
|
||||||
|
model MediaSource {
|
||||||
|
id String @id @db.Uuid @default(uuid(7))
|
||||||
|
name String @db.VarChar(100) @unique
|
||||||
|
|
||||||
|
media Media[]
|
||||||
|
@@map("media_sources")
|
||||||
|
}
|
||||||
|
|
||||||
|
model MediaStatus {
|
||||||
|
id String @id @db.Uuid @default(uuid(7))
|
||||||
|
name String @db.VarChar(100) @unique
|
||||||
|
|
||||||
|
media Media[]
|
||||||
|
@@map("media_statuses")
|
||||||
|
}
|
||||||
|
|
||||||
|
model MediaAgeRating {
|
||||||
|
id String @id @db.Uuid @default(uuid(7))
|
||||||
|
name String @db.VarChar(100) @unique
|
||||||
|
|
||||||
|
media Media[]
|
||||||
|
@@map("media_age_ratings")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ----------------------------------
|
||||||
|
* Model for System Apps and related entities
|
||||||
|
* ----------------------------------
|
||||||
|
*/
|
||||||
|
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 {
|
model Country {
|
||||||
id String @id @db.Uuid @default(uuid(7))
|
id String @id @db.Uuid @default(uuid(7))
|
||||||
name String @db.VarChar(155)
|
name String @db.VarChar(155)
|
||||||
@ -175,5 +346,6 @@ model Country {
|
|||||||
|
|
||||||
UserCountry User[] @relation("UserCountry")
|
UserCountry User[] @relation("UserCountry")
|
||||||
UserCountryPreference UserCountryPreference[]
|
UserCountryPreference UserCountryPreference[]
|
||||||
|
Media Media[]
|
||||||
@@map("countries")
|
@@map("countries")
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user