This commit is contained in:
2026-04-05 00:43:23 +05:30
commit 8be37d3e92
425 changed files with 101853 additions and 0 deletions

View File

@@ -0,0 +1,140 @@
-- CreateEnum
CREATE TYPE "UserRole" AS ENUM ('requester', 'worker');
-- CreateEnum
CREATE TYPE "TaskType" AS ENUM ('text_verification', 'image_labeling', 'survey', 'content_moderation');
-- CreateEnum
CREATE TYPE "TaskStatus" AS ENUM ('open', 'in_progress', 'completed', 'expired');
-- CreateEnum
CREATE TYPE "VerificationStatus" AS ENUM ('pending', 'approved', 'rejected');
-- CreateEnum
CREATE TYPE "PaymentStatus" AS ENUM ('pending', 'completed', 'failed');
-- CreateTable
CREATE TABLE "tasks" (
"id" TEXT NOT NULL,
"requester_id" TEXT NOT NULL,
"title" VARCHAR(100) NOT NULL,
"description" TEXT NOT NULL,
"task_type" "TaskType" NOT NULL,
"payment_amount" DECIMAL(10,2) NOT NULL,
"status" "TaskStatus" NOT NULL DEFAULT 'open',
"verification_criteria" JSONB NOT NULL,
"max_submissions" INTEGER NOT NULL,
"contract_task_id" INTEGER,
"expires_at" TIMESTAMP(3) NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "tasks_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "users" (
"id" TEXT NOT NULL,
"wallet_address" TEXT NOT NULL,
"phone_number" TEXT,
"role" "UserRole" NOT NULL,
"reputation_score" INTEGER NOT NULL DEFAULT 0,
"total_earnings" DECIMAL(10,2) NOT NULL DEFAULT 0,
"total_tasks_created" INTEGER NOT NULL DEFAULT 0,
"total_tasks_completed" INTEGER NOT NULL DEFAULT 0,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "submissions" (
"id" TEXT NOT NULL,
"task_id" TEXT NOT NULL,
"worker_id" TEXT NOT NULL,
"submission_data" JSONB NOT NULL,
"ai_verification_result" JSONB,
"verification_status" "VerificationStatus" NOT NULL DEFAULT 'pending',
"payment_transaction_hash" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL,
CONSTRAINT "submissions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "payments" (
"id" TEXT NOT NULL,
"task_id" TEXT NOT NULL,
"worker_id" TEXT NOT NULL,
"amount" DECIMAL(10,2) NOT NULL,
"transaction_hash" TEXT NOT NULL,
"status" "PaymentStatus" NOT NULL DEFAULT 'pending',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "payments_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE INDEX "tasks_requester_id_idx" ON "tasks"("requester_id");
-- CreateIndex
CREATE INDEX "tasks_status_idx" ON "tasks"("status");
-- CreateIndex
CREATE INDEX "tasks_task_type_idx" ON "tasks"("task_type");
-- CreateIndex
CREATE INDEX "tasks_expires_at_idx" ON "tasks"("expires_at");
-- CreateIndex
CREATE INDEX "tasks_contract_task_id_idx" ON "tasks"("contract_task_id");
-- CreateIndex
CREATE UNIQUE INDEX "users_wallet_address_key" ON "users"("wallet_address");
-- CreateIndex
CREATE INDEX "users_wallet_address_idx" ON "users"("wallet_address");
-- CreateIndex
CREATE INDEX "users_role_idx" ON "users"("role");
-- CreateIndex
CREATE INDEX "submissions_task_id_idx" ON "submissions"("task_id");
-- CreateIndex
CREATE INDEX "submissions_worker_id_idx" ON "submissions"("worker_id");
-- CreateIndex
CREATE INDEX "submissions_verification_status_idx" ON "submissions"("verification_status");
-- CreateIndex
CREATE UNIQUE INDEX "submissions_task_id_worker_id_key" ON "submissions"("task_id", "worker_id");
-- CreateIndex
CREATE INDEX "payments_task_id_idx" ON "payments"("task_id");
-- CreateIndex
CREATE INDEX "payments_worker_id_idx" ON "payments"("worker_id");
-- CreateIndex
CREATE INDEX "payments_transaction_hash_idx" ON "payments"("transaction_hash");
-- CreateIndex
CREATE INDEX "payments_status_idx" ON "payments"("status");
-- AddForeignKey
ALTER TABLE "tasks" ADD CONSTRAINT "tasks_requester_id_fkey" FOREIGN KEY ("requester_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "submissions" ADD CONSTRAINT "submissions_task_id_fkey" FOREIGN KEY ("task_id") REFERENCES "tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "submissions" ADD CONSTRAINT "submissions_worker_id_fkey" FOREIGN KEY ("worker_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "payments" ADD CONSTRAINT "payments_task_id_fkey" FOREIGN KEY ("task_id") REFERENCES "tasks"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "payments" ADD CONSTRAINT "payments_worker_id_fkey" FOREIGN KEY ("worker_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "postgresql"

View File

@@ -0,0 +1,123 @@
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
}