stock-bot/apps/wcag-ada/api/prisma/schema.prisma
2025-06-28 11:11:34 -04:00

153 lines
No EOL
3.7 KiB
Text

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
email String @unique
passwordHash String
name String?
company String?
role UserRole @default(USER)
apiKey String? @unique
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
websites Website[]
reports Report[]
scanJobs ScanJob[]
}
model Website {
id String @id @default(cuid())
name String
url String
userId String
user User @relation(fields: [userId], references: [id])
scanSchedule Json? // ScanSchedule type
lastScanAt DateTime?
complianceScore Float?
tags String[]
active Boolean @default(true)
authConfig Json? // AuthenticationConfig type
scanOptions Json? // Default scan options
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
scanResults ScanResult[]
scanJobs ScanJob[]
reports Report[]
@@index([userId])
@@index([url])
}
model ScanResult {
id String @id @default(cuid())
websiteId String
website Website @relation(fields: [websiteId], references: [id])
jobId String? @unique
job ScanJob? @relation(fields: [jobId], references: [id])
url String
scanDuration Int
summary Json // ScanSummary type
violations Json // AccessibilityViolation[] type
passes Json // AxeResult[] type
incomplete Json // AxeResult[] type
inapplicable Json // AxeResult[] type
pageMetadata Json // PageMetadata type
wcagCompliance Json // WCAGCompliance type
createdAt DateTime @default(now())
@@index([websiteId])
@@index([createdAt])
}
model ScanJob {
id String @id @default(cuid())
websiteId String
website Website @relation(fields: [websiteId], references: [id])
userId String
user User @relation(fields: [userId], references: [id])
url String
status JobStatus @default(PENDING)
options Json // AccessibilityScanOptions type
scheduledAt DateTime @default(now())
startedAt DateTime?
completedAt DateTime?
error String?
retryCount Int @default(0)
maxRetries Int @default(3)
result ScanResult?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([websiteId])
@@index([status])
@@index([scheduledAt])
}
model Report {
id String @id @default(cuid())
websiteId String
website Website @relation(fields: [websiteId], references: [id])
userId String
user User @relation(fields: [userId], references: [id])
type ReportType
format ReportFormat
period Json // ReportPeriod type
summary Json // ReportSummary type
data Json // Report data
fileUrl String?
generatedAt DateTime @default(now())
@@index([websiteId])
@@index([userId])
@@index([generatedAt])
}
enum UserRole {
USER
ADMIN
}
enum JobStatus {
PENDING
RUNNING
COMPLETED
FAILED
}
enum ReportType {
COMPLIANCE
EXECUTIVE
TECHNICAL
TREND
}
enum ReportFormat {
PDF
HTML
JSON
CSV
}