Files
B.Tech-Project-III/dmtp/server/prisma/schema.prisma
2026-04-05 00:43:23 +05:30

124 lines
4.0 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Task {
id String @id @default(uuid())
requesterId String @map("requester_id")
title String @db.VarChar(100)
description String
taskType TaskType @map("task_type")
paymentAmount Decimal @map("payment_amount") @db.Decimal(10, 2)
status TaskStatus @default(open)
verificationCriteria Json @map("verification_criteria")
maxSubmissions Int @map("max_submissions")
contractTaskId Int? @map("contract_task_id")
expiresAt DateTime @map("expires_at")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
payments Payment[]
submissions Submission[]
requester User @relation("TaskRequester", fields: [requesterId], references: [id], onDelete: Cascade)
@@index([requesterId])
@@index([status])
@@index([taskType])
@@index([expiresAt])
@@index([contractTaskId])
@@map("tasks")
}
model User {
id String @id @default(uuid())
walletAddress String @unique @map("wallet_address")
phoneNumber String? @map("phone_number")
role UserRole
reputationScore Int @default(0) @map("reputation_score")
totalEarnings Decimal @default(0) @map("total_earnings") @db.Decimal(10, 2)
totalTasksCreated Int @default(0) @map("total_tasks_created")
totalTasksCompleted Int @default(0) @map("total_tasks_completed")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
payments Payment[]
submissions Submission[]
createdTasks Task[] @relation("TaskRequester")
@@index([walletAddress])
@@index([role])
@@map("users")
}
model Submission {
id String @id @default(uuid())
taskId String @map("task_id")
workerId String @map("worker_id")
submissionData Json @map("submission_data")
aiVerificationResult Json? @map("ai_verification_result")
verificationStatus VerificationStatus @default(pending) @map("verification_status")
paymentTransactionHash String? @map("payment_transaction_hash")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at")
task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
worker User @relation(fields: [workerId], references: [id], onDelete: Cascade)
@@unique([taskId, workerId])
@@index([taskId])
@@index([workerId])
@@index([verificationStatus])
@@map("submissions")
}
model Payment {
id String @id @default(uuid())
taskId String @map("task_id")
workerId String @map("worker_id")
amount Decimal @db.Decimal(10, 2)
transactionHash String @map("transaction_hash")
status PaymentStatus @default(pending)
createdAt DateTime @default(now()) @map("created_at")
task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
worker User @relation(fields: [workerId], references: [id], onDelete: Cascade)
@@index([taskId])
@@index([workerId])
@@index([transactionHash])
@@index([status])
@@map("payments")
}
enum UserRole {
requester
worker
}
enum TaskType {
text_verification
image_labeling
survey
content_moderation
}
enum TaskStatus {
open
in_progress
completed
expired
}
enum VerificationStatus {
pending
approved
rejected
}
enum PaymentStatus {
pending
completed
failed
}