// 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 AuthUser @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 AuthUser { 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[] theme String @default("system") created_at DateTime @default(now()) @db.Timestamp(6) updated_at DateTime @updatedAt @db.Timestamp(6) auth_session AuthSession[] auth_key AuthKey[] @@map("auth_user") } model AuthSession { id String @id @unique user_id String active_expires BigInt idle_expires BigInt auth_user AuthUser @relation(references: [id], fields: [user_id], onDelete: Cascade) @@index([user_id]) @@map("auth_session") } model AuthKey { id String @id @unique hashed_password String? user_id String primary_key Boolean expires BigInt? auth_user AuthUser @relation(references: [id], fields: [user_id], onDelete: Cascade) @@index([user_id]) @@map("auth_key") } model Collection { id String @id @default(cuid()) user_id String @unique auth_user AuthUser @relation(references: [id], fields: [user_id]) items CollectionItem[] @@index([user_id]) @@map("collections") } model CollectionItem { id String @id @default(cuid()) collection_id String collection Collection @relation(references: [id], fields: [collection_id], onDelete: Cascade) game_id String 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()) name String user_id String auth_user AuthUser @relation(references: [id], fields: [user_id]) items WishlistItem[] @@index([user_id]) @@map("wishlists") } model WishlistItem { id String @id @default(cuid()) wishlist_id String wishlist Wishlist @relation(references: [id], fields: [wishlist_id], onDelete: Cascade) 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, wishlist_id]) @@map("wishlist_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[] 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") }