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]) }