mirror of
https://github.com/arkorty/B.Tech-Project-III.git
synced 2026-04-19 12:41:48 +00:00
133 lines
5.2 KiB
TypeScript
133 lines
5.2 KiB
TypeScript
import 'dotenv/config';
|
|
import { ethers } from 'ethers';
|
|
import { prisma } from './src/database/connections';
|
|
import { blockchainService } from './src/services/blockchain.service';
|
|
import { TaskType } from './src/types/database.types';
|
|
|
|
/**
|
|
* This script creates a task directly using the blockchain service,
|
|
* bypassing the API authentication requirements.
|
|
*
|
|
* This is useful for testing the complete payment flow.
|
|
*/
|
|
|
|
async function createTaskDirectly() {
|
|
try {
|
|
console.log('🚀 Creating task with blockchain integration...\n');
|
|
|
|
// Task creator wallet (must be registered first)
|
|
const requesterWallet = '0xA0e793E7257c065b30c46Ef6828F2B3C0de87A8E';
|
|
|
|
// Check if user exists, if not create them
|
|
let requester = await prisma.user.findUnique({
|
|
where: { walletAddress: requesterWallet.toLowerCase() },
|
|
});
|
|
|
|
if (!requester) {
|
|
console.log('📝 Creating user...');
|
|
requester = await prisma.user.create({
|
|
data: {
|
|
walletAddress: requesterWallet.toLowerCase(),
|
|
reputationScore: 100,
|
|
role: 'worker',
|
|
},
|
|
});
|
|
console.log(`✅ User created: ${requester.id}\n`);
|
|
} else {
|
|
console.log(`✅ User found: ${requester.id}\n`);
|
|
}
|
|
|
|
// Task details
|
|
const taskData = {
|
|
title: 'Verify this text - BLOCKCHAIN TASK 3',
|
|
description: 'Check if text makes sense. This task has proper blockchain integration!',
|
|
taskType: TaskType.TEXT_VERIFICATION,
|
|
paymentAmount: 0.01,
|
|
verificationCriteria: {
|
|
aiPrompt: 'Verify if the text makes sense',
|
|
requiredFields: ['text'],
|
|
},
|
|
maxSubmissions: 1,
|
|
expiresAt: new Date('2025-11-01T00:00:00Z'),
|
|
};
|
|
|
|
console.log('💰 Task Details:');
|
|
console.log(` Title: ${taskData.title}`);
|
|
console.log(` Payment: ${taskData.paymentAmount} cUSD`);
|
|
console.log(` Type: ${taskData.taskType}`);
|
|
console.log(` Max Submissions: ${taskData.maxSubmissions}`);
|
|
console.log(` Expires: ${taskData.expiresAt}\n`);
|
|
|
|
// Calculate duration
|
|
const durationMs = taskData.expiresAt.getTime() - Date.now();
|
|
const durationInDays = Math.ceil(durationMs / (1000 * 60 * 60 * 24));
|
|
console.log(`⏰ Duration: ${durationInDays} days\n`);
|
|
|
|
// Step 1: Create task on blockchain
|
|
console.log('⛓️ Creating task on blockchain...');
|
|
const blockchainResult = await blockchainService.createTask(
|
|
taskData.paymentAmount.toString(),
|
|
durationInDays
|
|
);
|
|
console.log(`✅ Blockchain task created!`);
|
|
console.log(` Contract Task ID: ${blockchainResult.taskId}`);
|
|
console.log(` Transaction Hash: ${blockchainResult.txHash}\n`);
|
|
|
|
// Step 2: Store in database
|
|
console.log('💾 Storing task in database...');
|
|
const task = await prisma.task.create({
|
|
data: {
|
|
requesterId: requester.id,
|
|
title: taskData.title,
|
|
description: taskData.description,
|
|
taskType: taskData.taskType,
|
|
paymentAmount: taskData.paymentAmount,
|
|
verificationCriteria: taskData.verificationCriteria,
|
|
maxSubmissions: taskData.maxSubmissions,
|
|
expiresAt: taskData.expiresAt,
|
|
contractTaskId: blockchainResult.taskId,
|
|
status: 'open',
|
|
},
|
|
});
|
|
|
|
console.log(`✅ Task created in database!`);
|
|
console.log(` Task ID: ${task.id}`);
|
|
console.log(` Contract Task ID: ${task.contractTaskId}\n`);
|
|
|
|
// Update user stats
|
|
await prisma.user.update({
|
|
where: { id: requester.id },
|
|
data: {
|
|
totalTasksCreated: {
|
|
increment: 1,
|
|
},
|
|
},
|
|
});
|
|
|
|
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
console.log('✅ SUCCESS! Task created with blockchain integration!');
|
|
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
|
|
|
|
console.log('📋 Task Summary:');
|
|
console.log(` Database ID: ${task.id}`);
|
|
console.log(` Blockchain Contract ID: ${task.contractTaskId}`);
|
|
console.log(` Status: ${task.status}`);
|
|
console.log(` Payment Amount: ${task.paymentAmount} cUSD`);
|
|
console.log(` Transaction Hash: ${blockchainResult.txHash}\n`);
|
|
|
|
console.log('🎯 Next Steps:');
|
|
console.log('1. View this task at: http://localhost:3000/tasks');
|
|
console.log(`2. Submit work to task ID: ${task.id}`);
|
|
console.log('3. Verification will run automatically');
|
|
console.log('4. Payment will be released on approval! 🎉\n');
|
|
|
|
process.exit(0);
|
|
} catch (error: any) {
|
|
console.error('\n❌ Error creating task:', error.message);
|
|
console.error('Stack:', error.stack);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
createTaskDirectly();
|