learning_ai_invt_trdg/backend/seed_profile_data.ts

91 lines
3.4 KiB
TypeScript

import { createClient } from '@supabase/supabase-js';
import { config } from '../src/config/index.js';
async function seedTestData() {
console.log('--- SEEDING TEST DATA FOR PROFILES ---');
if (!config.SUPABASE_URL || !config.SUPABASE_KEY) {
console.error('Supabase credentials missing.');
return;
}
const supabase = createClient(config.SUPABASE_URL, config.SUPABASE_KEY);
// 1. Get all profiles
const { data: profiles, error: pError } = await supabase
.from('trade_profiles')
.select('*');
if (pError || !profiles) {
console.error('Error fetching profiles:', pError?.message);
return;
}
console.log(`Found ${profiles.length} profiles to seed.`);
const symbols = ['BTC/USD', 'ETH/USD', 'AAPL', 'TSLA', 'NVDA', 'SOL/USD'];
for (const profile of profiles) {
console.log(`Seeding data for profile: ${profile.name}...`);
const userId = profile.user_id;
const profileId = profile.id;
// Generate 2-3 mock history records
const recordsCount = 2 + Math.floor(Math.random() * 2);
const historyEntries = [];
const orderEntries = [];
for (let i = 0; i < recordsCount; i++) {
const sym = symbols[Math.floor(Math.random() * symbols.length)];
const entryPrice = 100 + Math.random() * 1000;
const pnlPercent = (Math.random() * 10) - 4; // -4% to +6%
const exitPrice = entryPrice * (1 + (pnlPercent / 100));
const size = 1 + Math.random() * 5;
const pnl = (exitPrice - entryPrice) * size;
historyEntries.push({
user_id: userId,
profile_id: profileId,
symbol: sym,
side: 'BUY',
entry_price: entryPrice,
exit_price: exitPrice,
size: size,
pnl: pnl,
pnl_percent: pnlPercent,
reason: 'STRATEGY_SIGNAL_AUTO',
timestamp: Math.floor(Date.now() - (i * 86400000) - (Math.random() * 1000000)),
});
// Add a corresponding order for the latest trade
orderEntries.push({
user_id: userId,
profile_id: profileId,
order_id: `test-ord-${Math.random().toString(36).substring(7)}`,
symbol: sym,
type: 'Market',
side: 'buy',
qty: size,
price: entryPrice,
status: 'Filled',
timestamp: Math.floor(Date.now() - (i * 86400000) - 500000)
});
}
// Insert History
const { error: hError } = await supabase.from('trade_history').insert(historyEntries);
if (hError) console.error(`Error inserting history for ${profile.name}:`, hError.message);
else console.log(`✅ Inserted ${historyEntries.length} history records for ${profile.name}`);
// Insert Orders
const { error: oError } = await supabase.from('orders').insert(orderEntries);
if (oError) console.error(`Error inserting orders for ${profile.name}:`, oError.message);
else console.log(`✅ Inserted ${orderEntries.length} order records for ${profile.name}`);
}
console.log('\n--- SEEDING COMPLETE ---');
}
seedTestData().catch(console.error);