Bot & Automation
AI Creator Studio Telegram
/root/hermes-projects/AI Creator Studio Telegram
packages/database/prisma/schema.prisma
text
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
enum UserRole {
USER
ADMIN
}
enum UserStatus {
ACTIVE
SUSPENDED
}
enum ProjectStatus {
DRAFT
ACTIVE
ARCHIVED
}
enum JobStatus {
DRAFT
ESTIMATED
CONFIRMED
QUEUED
RUNNING
VALIDATING
STORING
COMPLETED
RETRYING
FAILED
CANCELLED
}
model User {
id String @id @default(uuid())
telegramId BigInt @unique
username String?
displayName String?
role UserRole @default(USER)
status UserStatus @default(ACTIVE)
defaultPreset String @default("cinematic")
preferences Json @default("{}")
projects Project[]
generationJobs GenerationJob[]
creditLedger CreditLedger[]
usageRecords UsageRecord[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Project {
id String @id @default(uuid())
userId String
user User @relation(fields: [userId], references: [id])
title String
type String
status ProjectStatus @default(DRAFT)
preset String
isFavorite Boolean @default(false)
duplicatedFromId String?
settings Json @default("{}")
promptSnapshot Json @default("{}")
jobs GenerationJob[]
mediaAssets MediaAsset[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model GenerationJob {
id String @id @default(uuid())
projectId String
project Project @relation(fields: [projectId], references: [id])
userId String
user User @relation(fields: [userId], references: [id])
mode String
status JobStatus @default(DRAFT)
providerId String?
providerJobId String?
progress Int @default(0)
retryCount Int @default(0)
requestPayload Json @default("{}")
enhancedPrompt Json @default("{}")
resourceEstimate Json @default("{}")
resourceActual Json @default("{}")
errorCode String?
errorMessage String?
queuedAt DateTime?
startedAt DateTime?
completedAt DateTime?
mediaAssets MediaAsset[]
events JobEvent[]
usageRecords UsageRecord[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model MediaAsset {
id String @id @default(uuid())
projectId String
project Project @relation(fields: [projectId], references: [id])
jobId String?
job GenerationJob? @relation(fields: [jobId], references: [id])
kind String
mimeType String
storageKey String
publicUrl String?
width Int?
height Int?
durationMs Int?
sizeBytes Int
checksum String?
metadata Json @default("{}")
createdAt DateTime @default(now())
}
model CreditLedger {
id String @id @default(uuid())
userId String
user User @relation(fields: [userId], references: [id])
type String
creditsDelta Int
tokensDelta Int
balanceAfter Int
referenceType String?
referenceId String?
note String?
createdAt DateTime @default(now())
}
model UsageRecord {
id String @id @default(uuid())
userId String
user User @relation(fields: [userId], references: [id])
jobId String?
job GenerationJob? @relation(fields: [jobId], references: [id])
providerId String?
creditsUsed Int
tokensUsed Int
storageBytesUsed Int
usageDetail Json @default("{}")
createdAt DateTime @default(now())
}
model Provider {
id String @id
displayName String
status String
capabilities Json @default("[]")
pricingConfig Json @default("{}")
limitsConfig Json @default("{}")
accounts ProviderAccount[]
updatedAt DateTime @updatedAt
}
model ProviderAccount {
id String @id @default(uuid())
providerId String
provider Provider @relation(fields: [providerId], references: [id])
status String
secretRef String
priority Int @default(100)
balanceSnapshot Json @default("{}")
rateLimitSnapshot Json @default("{}")
lastSyncedAt DateTime?
}
model JobEvent {
id String @id @default(uuid())
jobId String
job GenerationJob @relation(fields: [jobId], references: [id])
eventType String
payload Json @default("{}")
createdAt DateTime @default(now())
}
model WebhookEvent {
id String @id @default(uuid())
source String
externalId String
payload Json @default("{}")
processedAt DateTime?
createdAt DateTime @default(now())
@@unique([source, externalId])
}
model AuditLog {
id String @id @default(uuid())
actorId String?
action String
target String
payload Json @default("{}")
createdAt DateTime @default(now())
}