Files
aiartstudio/prisma/schema.prisma
T
2026-04-26 19:17:15 +08:00

118 lines
4.6 KiB
Plaintext

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
// Get a free hosted Postgres database in seconds: `npx create-db`
generator client {
provider = "prisma-client"
output = "../app/generated/prisma"
}
datasource db {
provider = "mysql"
}
enum ImageGenerationStatus {
QUEUED
RUNNING
SUCCEEDED
FAILED
}
enum ImageArchiveStatus {
NOT_REQUIRED
PENDING
RUNNING
SUCCEEDED
FAILED
}
enum PlazaPostStatus {
PUBLIC
HIDDEN
REMOVED
}
model User {
id Int @id
username String @default("") @db.VarChar(191)
displayName String @default("") @map("display_name") @db.VarChar(191)
group String @default("") @db.VarChar(191)
role Int @default(0)
status Int @default(0)
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
imageGenerations ImageGeneration[]
plazaPosts PlazaPost[]
@@map("users")
}
model ImageGeneration {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
userId Int @map("user_id")
prompt String @db.Text
status ImageGenerationStatus @default(RUNNING)
model String @default("gpt-image-2") @db.VarChar(64)
startedAt DateTime @default(now()) @map("started_at")
endedAt DateTime? @map("ended_at")
durationMs Int? @map("duration_ms")
imageUrl String? @map("image_url") @db.VarChar(2048)
hostedImageUrl String? @map("hosted_image_url") @db.VarChar(2048)
imageMimeType String? @map("image_mime_type") @db.VarChar(191)
revisedPrompt String? @map("revised_prompt") @db.Text
upstreamResponse Json? @map("upstream_response")
hostedResponse Json? @map("hosted_response")
errorMessage String? @map("error_message") @db.Text
archiveStatus ImageArchiveStatus @default(NOT_REQUIRED) @map("archive_status")
archiveAttempts Int @default(0) @map("archive_attempts")
archiveNextRunAt DateTime? @map("archive_next_run_at")
archiveLockedAt DateTime? @map("archive_locked_at")
archiveLockedBy String? @map("archive_locked_by") @db.VarChar(191)
archiveLastError String? @map("archive_last_error") @db.Text
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at")
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
plazaPost PlazaPost?
@@index([userId, createdAt])
@@index([status])
@@index([archiveStatus, archiveNextRunAt])
@@index([archiveLockedAt])
@@index([deletedAt])
@@map("image_generations")
}
model PlazaPost {
id BigInt @id @default(autoincrement()) @db.UnsignedBigInt
imageGenerationId BigInt @unique @map("image_generation_id") @db.UnsignedBigInt
userId Int @map("user_id")
status PlazaPostStatus @default(PUBLIC)
publishedAt DateTime @default(now()) @map("published_at")
hiddenAt DateTime? @map("hidden_at")
removedAt DateTime? @map("removed_at")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
imageGeneration ImageGeneration @relation(fields: [imageGenerationId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@index([status, publishedAt])
@@index([userId, publishedAt])
@@map("plaza_posts")
}
model GenerationStats {
id String @id @db.VarChar(32)
totalRequests Int @default(0) @map("total_requests")
successRequests Int @default(0) @map("success_requests")
failedRequests Int @default(0) @map("failed_requests")
queuedRequests Int @default(0) @map("queued_requests")
runningRequests Int @default(0) @map("running_requests")
totalImages Int @default(0) @map("total_images")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
@@map("generation_stats")
}