PRIMEIRO ENVIO
This commit is contained in:
@@ -0,0 +1,291 @@
|
||||
// This is your Prisma schema file,
|
||||
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
// User Management
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
email String @unique
|
||||
passwordHash String
|
||||
firstName String?
|
||||
lastName String?
|
||||
avatar String?
|
||||
isActive Boolean @default(true)
|
||||
emailVerified Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
// Subscription and billing
|
||||
subscription SubscriptionTier @default(FREE)
|
||||
billingId String?
|
||||
usageMetrics UsageMetrics?
|
||||
|
||||
// Relationships
|
||||
projects Project[]
|
||||
collaborations ProjectCollaboration[]
|
||||
sessions UserSession[]
|
||||
auditLogs AuditLog[]
|
||||
|
||||
@@map("users")
|
||||
}
|
||||
|
||||
model UserSession {
|
||||
id String @id @default(cuid())
|
||||
userId String
|
||||
token String @unique
|
||||
expiresAt DateTime
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("user_sessions")
|
||||
}
|
||||
|
||||
// Project Management
|
||||
model Project {
|
||||
id String @id @default(cuid())
|
||||
name String
|
||||
description String?
|
||||
sourceUrl String
|
||||
status ProjectStatus @default(CREATED)
|
||||
settings Json @default("{}")
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
// Owner
|
||||
userId String
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
// Relationships
|
||||
pages Page[]
|
||||
assets Asset[]
|
||||
components Component[]
|
||||
collaborations ProjectCollaboration[]
|
||||
analytics ProjectAnalytics?
|
||||
exports ProjectExport[]
|
||||
|
||||
@@map("projects")
|
||||
}
|
||||
|
||||
model ProjectCollaboration {
|
||||
id String @id @default(cuid())
|
||||
projectId String
|
||||
userId String
|
||||
role CollaborationRole @default(VIEWER)
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@unique([projectId, userId])
|
||||
@@map("project_collaborations")
|
||||
}
|
||||
|
||||
// Site Structure
|
||||
model Page {
|
||||
id String @id @default(cuid())
|
||||
projectId String
|
||||
url String
|
||||
title String?
|
||||
depth Int @default(0)
|
||||
status PageStatus @default(DISCOVERED)
|
||||
metadata Json @default("{}")
|
||||
content String?
|
||||
screenshot String?
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
assets Asset[]
|
||||
|
||||
@@unique([projectId, url])
|
||||
@@map("pages")
|
||||
}
|
||||
|
||||
// Asset Management
|
||||
model Asset {
|
||||
id String @id @default(cuid())
|
||||
projectId String
|
||||
pageId String?
|
||||
originalUrl String
|
||||
storedUrl String
|
||||
filename String
|
||||
type AssetType
|
||||
size Int
|
||||
hash String
|
||||
optimized Boolean @default(false)
|
||||
cdnUrl String?
|
||||
metadata Json @default("{}")
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
page Page? @relation(fields: [pageId], references: [id], onDelete: SetNull)
|
||||
|
||||
@@unique([projectId, hash])
|
||||
@@map("assets")
|
||||
}
|
||||
|
||||
// Component System
|
||||
model Component {
|
||||
id String @id @default(cuid())
|
||||
projectId String
|
||||
name String
|
||||
type ComponentType
|
||||
html String
|
||||
css String
|
||||
javascript String?
|
||||
props Json @default("[]")
|
||||
frequency Int @default(1)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
instances ComponentInstance[]
|
||||
|
||||
@@map("components")
|
||||
}
|
||||
|
||||
model ComponentInstance {
|
||||
id String @id @default(cuid())
|
||||
componentId String
|
||||
selector String
|
||||
props Json @default("{}")
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
component Component @relation(fields: [componentId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("component_instances")
|
||||
}
|
||||
|
||||
// Analytics and Metrics
|
||||
model ProjectAnalytics {
|
||||
id String @id @default(cuid())
|
||||
projectId String @unique
|
||||
cloneAccuracy Float?
|
||||
processingTime Int? // in milliseconds
|
||||
totalPages Int @default(0)
|
||||
totalAssets Int @default(0)
|
||||
totalComponents Int @default(0)
|
||||
lastUpdated DateTime @default(now())
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("project_analytics")
|
||||
}
|
||||
|
||||
model UsageMetrics {
|
||||
id String @id @default(cuid())
|
||||
userId String @unique
|
||||
pagesCloned Int @default(0)
|
||||
storageUsed BigInt @default(0) // in bytes
|
||||
apiCalls Int @default(0)
|
||||
lastReset DateTime @default(now())
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("usage_metrics")
|
||||
}
|
||||
|
||||
// Export and Deployment
|
||||
model ProjectExport {
|
||||
id String @id @default(cuid())
|
||||
projectId String
|
||||
format ExportFormat
|
||||
status ExportStatus @default(PENDING)
|
||||
fileUrl String?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@map("project_exports")
|
||||
}
|
||||
|
||||
// Security and Audit
|
||||
model AuditLog {
|
||||
id String @id @default(cuid())
|
||||
userId String?
|
||||
action String
|
||||
resource String
|
||||
details Json @default("{}")
|
||||
ipAddress String?
|
||||
userAgent String?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
user User? @relation(fields: [userId], references: [id], onDelete: SetNull)
|
||||
|
||||
@@map("audit_logs")
|
||||
}
|
||||
|
||||
// Enums
|
||||
enum SubscriptionTier {
|
||||
FREE
|
||||
BASIC
|
||||
PRO
|
||||
ENTERPRISE
|
||||
}
|
||||
|
||||
enum ProjectStatus {
|
||||
CREATED
|
||||
CRAWLING
|
||||
PROCESSING
|
||||
GENERATING
|
||||
COMPLETED
|
||||
FAILED
|
||||
}
|
||||
|
||||
enum PageStatus {
|
||||
DISCOVERED
|
||||
CRAWLING
|
||||
SCRAPED
|
||||
PROCESSED
|
||||
FAILED
|
||||
}
|
||||
|
||||
enum AssetType {
|
||||
IMAGE
|
||||
CSS
|
||||
JAVASCRIPT
|
||||
FONT
|
||||
MEDIA
|
||||
OTHER
|
||||
}
|
||||
|
||||
enum ComponentType {
|
||||
NAVIGATION
|
||||
HEADER
|
||||
FOOTER
|
||||
CARD
|
||||
FORM
|
||||
BUTTON
|
||||
OTHER
|
||||
}
|
||||
|
||||
enum CollaborationRole {
|
||||
VIEWER
|
||||
EDITOR
|
||||
ADMIN
|
||||
}
|
||||
|
||||
enum ExportFormat {
|
||||
ZIP
|
||||
GITHUB
|
||||
VERCEL
|
||||
NETLIFY
|
||||
}
|
||||
|
||||
enum ExportStatus {
|
||||
PENDING
|
||||
PROCESSING
|
||||
COMPLETED
|
||||
FAILED
|
||||
}
|
||||
Reference in New Issue
Block a user