// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" previewFeatures = ["fullTextSearch", "fullTextIndex"] } datasource db { provider = "mysql" url = env("DATABASE_URL") relationMode = "prisma" } model Role { id String @id @default(cuid()) name String @unique userRoles UserRole[] @@map("roles") } model UserRole { id String @id @default(cuid()) user User @relation(fields: [user_id], references: [id]) user_id String role Role @relation(fields: [role_id], references: [id]) role_id String created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@unique([user_id, role_id]) @@index([user_id]) @@index([role_id]) @@map("user_roles") } model User { id String @id @default(cuid()) username String @unique email String? @unique firstName String? lastName String? roles UserRole[] verified Boolean @default(false) receiveEmail Boolean @default(false) token String? @unique collection Collection? wishlist Wishlist? list List[] theme String @default("system") created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) auth_session Session[] auth_key Key[] @@map("users") } model Session { id String @id @unique user_id String active_expires BigInt idle_expires BigInt user User @relation(references: [id], fields: [user_id], onDelete: Cascade) @@index([user_id]) @@map("sessions") } model Key { id String @id @unique hashed_password String? user_id String user User @relation(references: [id], fields: [user_id], onDelete: Cascade) @@index([user_id]) @@map("keys") } model Collection { id String @id @default(cuid()) user_id String @unique user User @relation(references: [id], fields: [user_id]) items CollectionItem[] @@index([user_id]) @@map("collections") } model CollectionItem { id String @id @default(cuid()) collection_id String @unique collection Collection @relation(references: [id], fields: [collection_id], onDelete: Cascade) game_id String @unique game Game @relation(references: [id], fields: [game_id]) times_played Int @@index([game_id, collection_id]) @@map("collection_items") } model Wishlist { id String @id @default(cuid()) user_id String @unique user User @relation(references: [id], fields: [user_id]) items WishlistItem[] @@index([user_id]) @@map("wishlists") } model WishlistItem { id String @id @default(cuid()) wishlist_id String @unique wishlist Wishlist @relation(references: [id], fields: [wishlist_id], onDelete: Cascade) game_id String @unique game Game @relation(references: [id], fields: [game_id]) created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@index([game_id, wishlist_id]) @@map("wishlist_items") } model List { id String @id @default(cuid()) name String user_id String @unique user User @relation(references: [id], fields: [user_id]) items ListItem[] @@index([user_id]) @@map("lists") } model ListItem { id String @id @default(cuid()) list_id String @unique list List @relation(references: [id], fields: [list_id], onDelete: Cascade) game_id String @unique game Game @relation(references: [id], fields: [game_id]) created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@index([game_id, list_id]) @@map("list_items") } model Game { id String @id @default(cuid()) name String slug String description String? @db.LongText description_preview String? @db.LongText year_published Int? min_players Int? max_players Int? min_playtime Int? max_playtime Int? min_age Int? image_url String? thumb_url String? url String? rules_url String? primary_publisher_id String? primary_publisher Publisher? @relation("PrimaryPublishers", references: [id], fields: [primary_publisher_id]) primary_designer_id String? primary_designer Designer? @relation("PrimaryDesigners", references: [id], fields: [primary_designer_id]) categories Category[] mechanics Mechanic[] designers Designer[] publishers Publisher[] artists Artist[] names GameName[] expansions Expansion[] collection_items CollectionItem[] wishlist_items WishlistItem[] list_items ListItem[] external_id String @unique created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@fulltext([name]) @@index([primary_publisher_id]) @@map("games") } model GameName { id String @id @default(cuid()) name String game_id String game Game @relation(references: [id], fields: [game_id]) created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@index([game_id]) @@map("game_names") } model Publisher { id String @id @default(cuid()) name String slug String external_id String @unique games Game[] primary_publisher Game[] @relation("PrimaryPublishers") created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@fulltext([name]) @@map("publishers") } model Category { id String @id @default(cuid()) name String slug String games Game[] external_id String @unique created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@fulltext([name]) @@map("categories") } model Mechanic { id String @id @default(cuid()) name String slug String games Game[] external_id String @unique created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@fulltext([name]) @@map("mechanics") } model Designer { id String @id @default(cuid()) name String external_id String @unique games Game[] primary_designer Game[] @relation("PrimaryDesigners") created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@fulltext([name]) @@map("designers") } model Artist { id String @id @default(cuid()) name String external_id String @unique games Game[] created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@fulltext([name]) @@map("artists") } model Expansion { id String @id @default(cuid()) name String year_published Int? baseGame Game? @relation(fields: [base_game_id], references: [id]) base_game_id String? external_id String @unique created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) @@fulltext([name]) @@index([base_game_id]) @@map("expansions") }