generator client { provider = "prisma-client" output = "../src/generated/prisma" } datasource db { provider = "postgresql" } model Admin { id String @id @default(cuid()) username String @unique passwordHash String createdAt DateTime @default(now()) } model Addon { id String @id @default(cuid()) name String slug String @unique summary String description String @db.Text iconUrl String? category String @default("general") published Boolean @default(false) totalDownloads Int @default(0) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt releases Release[] screenshots Screenshot[] } model Release { id String @id @default(cuid()) addonId String version String changelog String @db.Text downloadType String @default("local") filePath String? externalUrl String? gameVersion String @default("") downloadCount Int @default(0) isLatest Boolean @default(false) createdAt DateTime @default(now()) addon Addon @relation(fields: [addonId], references: [id], onDelete: Cascade) @@index([addonId]) } model Screenshot { id String @id @default(cuid()) addonId String imageUrl String sortOrder Int @default(0) addon Addon @relation(fields: [addonId], references: [id], onDelete: Cascade) @@index([addonId]) } model Software { id String @id @default(cuid()) name String slug String @unique description String @default("") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt versions SoftwareVersion[] } model SoftwareVersion { id String @id @default(cuid()) softwareId String version String versionCode Int changelog String @db.Text downloadType String @default("local") filePath String? externalUrl String? fileSize Int @default(0) downloadCount Int @default(0) isLatest Boolean @default(false) forceUpdate Boolean @default(false) minVersion String? createdAt DateTime @default(now()) software Software @relation(fields: [softwareId], references: [id], onDelete: Cascade) @@unique([softwareId, version]) @@index([softwareId]) } model BannerImage { id String @id @default(cuid()) imageUrl String sortOrder Int @default(0) enabled Boolean @default(true) createdAt DateTime @default(now()) } model GalleryImage { id String @id @default(cuid()) imageUrl String title String @default("") sortOrder Int @default(0) enabled Boolean @default(true) createdAt DateTime @default(now()) } model Article { id String @id @default(cuid()) title String slug String @unique summary String @default("") content String @db.Text coverImage String? published Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model PageView { id String @id @default(cuid()) path String referrer String @default("") userAgent String @default("") ip String @default("") date String createdAt DateTime @default(now()) @@index([date]) @@index([path]) }