const axios = require('axios'); require('dotenv').config(); const LEGACY_API_BASE = 'https://eluxnetworks.net/function/well-api/api'; const TOKEN = process.env.LEGACY_API_TOKEN; const USERNAME = process.env.LEGACY_API_USERNAME || 'robster'; // 1x1 pixel JPEG const MINI_PHOTO = '/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAABAAEDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAn/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAX/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCwAB//2Q=='; // Бенефициары которым нужно создать deployment const beneficiaries = [ // Сначала те у кого NULL { id: 60, name: 'Test Deployment User', deploymentId: 47 }, { id: 61, name: 'Test With Photo', deploymentId: 48 }, // Потом те у кого общий ID=45 (нужно пересоздать) { id: 12, name: 'Test Person', deploymentId: 27 }, { id: 13, name: 'Mama', deploymentId: 42 }, { id: 14, name: 'Mama2', deploymentId: 28 }, { id: 15, name: 'Mwm2', deploymentId: 30 }, { id: 16, name: 'Name16', deploymentId: 19 }, { id: 17, name: 'Mama', deploymentId: 34 }, { id: 18, name: 'Mam22', deploymentId: 36 }, { id: 19, name: 'Mama', deploymentId: 23 }, { id: 21, name: 'Mama', deploymentId: 33 }, { id: 22, name: 'Mama2', deploymentId: 37 }, { id: 23, name: 'Mama3', deploymentId: 38 }, { id: 24, name: 'Mama4', deploymentId: 32 }, { id: 25, name: 'Mama5', deploymentId: 40 }, { id: 26, name: 'Mama6', deploymentId: 24 }, { id: 27, name: 'Mama10', deploymentId: 44 }, { id: 28, name: 'Mama 8', deploymentId: 46 }, { id: 29, name: 'Mama20', deploymentId: 39 }, { id: 30, name: 'Mama3030', deploymentId: 26 }, { id: 31, name: 'Mama40', deploymentId: 41 }, { id: 33, name: 'Papa10', deploymentId: 25 }, { id: 34, name: 'Mama1000', deploymentId: 43 }, { id: 35, name: 'Lisa', deploymentId: 20 }, { id: 36, name: 'Lis2', deploymentId: 31 }, { id: 37, name: 'Haha', deploymentId: 22 }, { id: 38, name: 'Bkbb', deploymentId: 35 }, { id: 39, name: 'Mama home', deploymentId: 21 }, { id: 40, name: 'Lisa', deploymentId: 45 }, { id: 42, name: 'Mama', deploymentId: 29 }, { id: 46, name: 'Test Deployment User', deploymentId: 6 }, { id: 47, name: 'Test Legacy User', deploymentId: 7 }, { id: 48, name: 'John Smith', deploymentId: 8 }, { id: 49, name: 'Mary Johnson', deploymentId: 9 }, { id: 50, name: 'Robert Williams', deploymentId: 10 }, { id: 51, name: 'Anna Davis', deploymentId: 11 }, { id: 52, name: 'Final Test', deploymentId: 12 }, { id: 53, name: 'Address Test', deploymentId: 13 }, { id: 54, name: 'GPS Test', deploymentId: 14 }, { id: 55, name: 'Phone Test', deploymentId: 15 }, { id: 56, name: 'Final Victory', deploymentId: 16 }, { id: 58, name: 'Test Legacy Integration', deploymentId: 17 }, { id: 59, name: 'DeploymentTest User', deploymentId: 18 }, ]; async function createLegacyDeployment(beneficiaryId, beneficiaryName) { // Format name for Legacy API (needs exactly 2 words) const nameParts = beneficiaryName.trim().split(/\s+/); let firstName, lastName; if (nameParts.length === 1) { firstName = nameParts[0]; lastName = 'User'; } else { firstName = nameParts[0]; lastName = nameParts[1]; } const legacyName = firstName + ' ' + lastName; const beneficiaryUsername = 'beneficiary_' + beneficiaryId; const password = Math.random().toString(36).substring(2, 15); const formData = new URLSearchParams({ function: 'set_deployment', user_name: USERNAME, token: TOKEN, deployment: 'NEW', beneficiary_name: legacyName, beneficiary_email: 'beneficiary-' + beneficiaryId + '@wellnuo.app', beneficiary_user_name: beneficiaryUsername, beneficiary_password: password, beneficiary_address: 'test', // ВАЖНО: всегда "test" beneficiary_photo: MINI_PHOTO, firstName: firstName, lastName: lastName, first_name: firstName, last_name: lastName, new_user_name: beneficiaryUsername, phone_number: '+10000000000', key: password, signature: 'Test', gps_age: '0', wifis: '[]', devices: '[]' }); const response = await axios.post(LEGACY_API_BASE, formData, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }); return response.data; } async function main() { console.log('Starting Legacy API deployment creation...\n'); const results = []; for (const b of beneficiaries) { try { console.log('Processing beneficiary ' + b.id + ' (' + b.name + ')...'); const result = await createLegacyDeployment(b.id, b.name); if (result.deployment_id && result.deployment_id > 0) { console.log(' OK Created legacy_deployment_id: ' + result.deployment_id); results.push({ beneficiaryId: b.id, deploymentId: b.deploymentId, legacyDeploymentId: result.deployment_id, success: true }); } else { console.log(' WARN No deployment_id returned'); results.push({ beneficiaryId: b.id, deploymentId: b.deploymentId, legacyDeploymentId: null, success: false, error: 'No deployment_id' }); } // Small delay to not overwhelm the API await new Promise(r => setTimeout(r, 500)); } catch (error) { console.log(' ERROR: ' + error.message); results.push({ beneficiaryId: b.id, deploymentId: b.deploymentId, legacyDeploymentId: null, success: false, error: error.message }); } } console.log('\n\n=== RESULTS ===\n'); // Print SQL updates console.log('-- SQL to update beneficiary_deployments:\n'); for (const r of results) { if (r.success && r.legacyDeploymentId) { console.log('UPDATE beneficiary_deployments SET legacy_deployment_id = ' + r.legacyDeploymentId + ' WHERE id = ' + r.deploymentId + ';'); } } console.log('\n\n-- Summary:'); const successful = results.filter(r => r.success).length; const failed = results.filter(r => !r.success).length; console.log('Total: ' + results.length + ', Success: ' + successful + ', Failed: ' + failed); } main().catch(console.error);