-- 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;