// ============================================================ // PAYOUT CRON — Veckovis utbetalning // ============================================================ // Kör varje måndag 09:00 UTC // Hämtar alla zoomers med payout-schema och utför utbetalning const { Pool } = require('pg'); const axios = require('axios'); const pool = new Pool({ connectionString: process.env.DATABASE_URL }); const API_BASE = process.env.API_BASE || 'http://localhost:8080'; async function executeWeeklyPayouts() { console.log('💸 Startar veckovis payout...'); console.log(`📅 ${new Date().toISOString()}`); try { // Hämta dagens dag (1 = Måndag) const today = new Date().getDay(); if (today !== 1) { console.log('📅 Idag är inte måndag. Avslutar.'); return; } // Hämta alla aktiva payout-scheman för idag const schedules = await pool.query( `SELECT ps.*, zw.balance_qz_token, zw.stripe_connect_account_id, z.name as zoomer_name FROM payout_schedules ps JOIN zoomer_wallets zw ON zw.id = ps.wallet_id JOIN zoomers z ON z.id = ps.zoomer_id WHERE ps.day_of_week = $1 AND ps.status = 'active' AND zw.stripe_connect_status = 'active' AND zw.balance_qz_token >= ps.minimum_qz_token`, [today] ); console.log(`📊 Hittade ${schedules.rows.length} zoomers för payout`); let successCount = 0; let failCount = 0; for (const schedule of schedules.rows) { try { console.log(`\n💸 Behandlar payout för ${schedule.zoomer_name}...`); console.log(` Saldo: ${schedule.balance_qz_token} QZ TOKEN`); // Anropa API för att utföra payout const response = await axios.post(`${API_BASE}/api/v1/payouts/execute`, { zoomer_id: schedule.zoomer_id }); if (response.data.success) { console.log(` ✅ Payout utförd: $${response.data.results[0]?.amount_usd}`); successCount++; } } catch (error) { console.error(` ❌ Payout misslyckades: ${error.message}`); failCount++; } } console.log('\n📊 Payout-sammanfattning:'); console.log(` Lyckade: ${successCount}`); console.log(` Misslyckade: ${failCount}`); console.log(` Totalt: ${schedules.rows.length}`); } catch (error) { console.error('❌ Kritiskt fel vid payout:', error); process.exit(1); } finally { await pool.end(); } } // Kör om detta är huvudscript if (require.main === module) { executeWeeklyPayouts(); } module.exports = { executeWeeklyPayouts };