diff --git a/prisma/dbml/schema.dbml b/prisma/dbml/schema.dbml index 82b6762..0d70e09 100644 --- a/prisma/dbml/schema.dbml +++ b/prisma/dbml/schema.dbml @@ -53,6 +53,11 @@ Enum "device_type" { "unknown" } +Enum "oauth_provider" { + "google" + "github" +} + Table "public"."user_rating_preferences" { "user_id" uuid [unique, not null, ref: > "public"."user_preferences"."user_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_secondary" varchar(255) "title_original" varchar(255) - "title_synonyms" varchar(255) [note: 'This is Array'] + "title_synonyms" varchar(255)[] "trailers" uuid "synopsis" text [not null] "small_image_url" varchar(255) @@ -205,7 +210,7 @@ Table "public"."provisioned_users" { "provisioned_by" uuid [unique, not null, ref: > "public"."users"."id"] "provisioned_to" uuid [not null, ref: > "public"."users"."id"] "provisioned_at" timestamp [not null] - "reason" bigint + "reason" varchar(255) } Table "public"."collection_members" { @@ -319,16 +324,21 @@ Table "public"."comments" { "deleted_at" timestamp } -Table "public"."user_oauth_credentials" { - "id" uuid [pk, not null, ref: > "public"."users"."id"] - "user_id" uuid [not null] - "oauth_id" uuid [not null] - "provider_token" varchar(500) - "provider_sub" varchar(500) - "last_action" timestamp [not null] +Table "public"."user_oauth_accounts" { + "id" uuid [pk, not null] + "user_id" uuid [not null, ref: > "public"."users"."id"] + "provider_name" oauth_provider [not null] + "provider_sub" varchar(255) + "provider_email" varchar(255) + "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 { - (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] "user_id" uuid [not null, ref: > "public"."users"."id"] "device_type" device_type [not null] - "os_type" varchar(500) - "os_version" varchar(500) - "browser_name" varchar(500) - "browser_version" varchar(500) + "os_type" varchar(50) + "os_version" varchar(50) + "browser_name" varchar(50) + "browser_version" varchar(50) "ip_login" inet [not null] - "last_activity_at" timestamp - "login_at" timestamp [not null] - "logout_at" timestamp + "login_at" timestamptz [not null] + "logout_at" timestamptz } Table "public"."user_addresses" { "user_id" uuid [pk, not null] - "street_address" varchar(500) [not null] - "district" varchar(500) [not null] - "city" varchar(500) [not null] - "province" varchar(500) [not null] - "postal_code" varchar(500) [not null] - "coordinate" varchar(500) + "street_address" varchar(255) [not null] + "district" varchar(100) [not null] + "city" varchar(100) [not null] + "province" varchar(100) [not null] + "postal_code" varchar(20) [not null] + "coordinate" varchar(50) "updated_at" timestamp [not null] } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 7858504..9d499bd 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -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 { provider = "prisma-client-js" } - generator dbml { provider = "prisma-dbml-generator" } - datasource db { provider = "postgresql" } + + +/** + * ---------------------------------- + * Enum Definitions + * ---------------------------------- + */ 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 } +enum media_season { + winter + spring + summer + fall +} + + + +/** + * ---------------------------------- + * Model for User and related entities + * ---------------------------------- + */ model User { id String @id @db.Uuid @default(uuid(7)) email String @unique @@ -180,6 +213,117 @@ model UserFollow { @@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") @@ -202,5 +346,6 @@ model Country { UserCountry User[] @relation("UserCountry") UserCountryPreference UserCountryPreference[] + Media Media[] @@map("countries") } \ No newline at end of file