Tech4biz-channel/Channel-Backend/prisma/schema.prisma
2026-07-09 15:32:31 +05:30

140 lines
4.1 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
}
enum Role {
ADMIN
PARTNER_USER
}
enum DocumentType {
NDA
MSA
}
model Organization {
id String @id @default(uuid())
name String
status String @default("ACTIVE")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
users User[]
sharedAssets SharedAsset[]
}
model User {
id String @id @default(uuid())
email String @unique
passwordHash String
role Role @default(PARTNER_USER)
mfaEnabled Boolean @default(true)
mfaSecret String?
inviteToken String? @unique
inviteTokenExp DateTime?
organizationId String?
onboardingStatus String @default("PENDING_ONBOARDING")
organization Organization? @relation(fields: [organizationId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
acceptances LegalAcceptance[]
auditLogs AuditLog[]
sharedAssets SharedAsset[]
downloadRequests DownloadRequest[]
}
model Asset {
id String @id @default(uuid())
title String
type String
size Int
url String
version Int @default(1)
uploadedBy String
description String? @db.Text
categoryId String?
subcategory String?
tags String[]
downloadsCount Int @default(0)
githubUrl String?
status String @default("published")
isDownloadable Boolean @default(true)
folderId String?
folder Folder? @relation(fields: [folderId], references: [id], onDelete: SetNull)
sharedWith SharedAsset[]
downloadRequests DownloadRequest[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model SharedAsset {
id String @id @default(uuid())
assetId String
organizationId String
userId String?
createdAt DateTime @default(now())
asset Asset @relation(fields: [assetId], references: [id], onDelete: Cascade)
organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([assetId, organizationId, userId])
}
model DownloadRequest {
id String @id @default(uuid())
assetId String
userId String
status String @default("PENDING") // PENDING, APPROVED, REJECTED
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
asset Asset @relation(fields: [assetId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([assetId, userId])
}
model Folder {
id String @id @default(uuid())
name String
parentId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
assets Asset[]
}
model LegalDocument {
id String @id @default(uuid())
type DocumentType
version String
content String
isActive Boolean @default(false)
pdfUrl String?
createdAt DateTime @default(now())
acceptances LegalAcceptance[]
}
model LegalAcceptance {
id String @id @default(uuid())
docId String
userId String
ipAddress String
signatureHash String?
documentUrl String?
acceptedAt DateTime @default(now())
document LegalDocument @relation(fields: [docId], references: [id])
user User @relation(fields: [userId], references: [id])
}
model AuditLog {
id String @id @default(uuid())
actorId String
action String
resource String
metadata Json?
createdAt DateTime @default(now())
actor User @relation(fields: [actorId], references: [id])
}