const { Client, Databases, Query } = require('node-appwrite'); const client = new Client() .setEndpoint('https://appwrite.almeira.com.co/v1') .setProject('69b84df5003bd8957c5c') .setKey('standard_cce3cdb866ea6433888d40cedd24dc45987372308fdc3dd0697de08648c0e5c7e04b02c3bcee271403fd656b00a5820f04c08b51631284a6e8a3582d8aed2aa33234f3c29cc777e9b162eb54810b789251b0d006a9a3b081ebc2da53b9baa94614b124b3508ad849fd9a4187cc6094f506d4b57f409b69d9562a74df594f3ec3'); const databases = new Databases(client); const DB_ID = 'sneakers_multistore_db'; const COLL_ID = 'payment_methods'; const INITIAL_PAYMENT_METHODS = [ { id: 'pay-bold-deposit-10k', name: 'Separación con $10.000 COP + Saldo Contraentrega', type: 'bold', boldChannel: 'deposit', badge: 'Bold 💳 PSE / Nequi / Tarjeta ($10.000)', icon: 'ShieldCheck', description: 'Asegura tu pedido pagando solo $10.000 COP de anticipo vía Bold (PSE, Nequi o Tarjetas). El saldo restante lo pagas en efectivo o transferencia cuando recibas el paquete en tu puerta.', requiresDeposit: true, depositAmount: 10000, boldPaymentLink: 'https://checkout.bold.co/payment/LNK_AJPFKOPB0C', boldQrUrl: 'https://storage.almeira.com.co/v1/storage/buckets/products-images/files/bold-qr-bre-b/view?project=6761c57300305a415ff6', isActive: true, }, { id: 'pay-bold-pse', name: 'PSE • Débito desde cualquier banco (vía Bold)', type: 'bold', boldChannel: 'pse', badge: 'Bold 🏦 PSE Directo', icon: 'Landmark', description: 'Paga de forma inmediata con débito directo desde tu cuenta bancaria (Bancolombia, Davivienda, BBVA, Banco de Bogotá, Nequi, etc.) a través de la pasarela oficial Bold.', requiresDeposit: false, depositAmount: 0, boldPaymentLink: 'https://checkout.bold.co/payment/LNK_AJPFKOPB0C', isActive: true, }, { id: 'pay-bold-cards', name: 'Tarjetas Débito y Crédito (Visa, Mastercard, Amex)', type: 'bold', boldChannel: 'card', badge: 'Bold 💳 Tarjetas (Cuotas)', icon: 'CreditCard', description: 'Paga con tarjeta de crédito (hasta 36 cuotas) o débito con CVV de cualquier franquicia nacional o internacional mediante el checkout seguro de Bold.', requiresDeposit: false, depositAmount: 0, boldPaymentLink: 'https://checkout.bold.co/payment/LNK_AJPFKOPB0C', isActive: true, }, { id: 'pay-bold-nequi', name: 'Nequi en Línea (Pasarela Bold)', type: 'bold', boldChannel: 'nequi', badge: 'Bold 📱 Nequi en Línea', icon: 'Smartphone', description: 'Paga directamente desde tu app Nequi confirmando la notificación push o con tu clave dinámica a través de Bold.', requiresDeposit: false, depositAmount: 0, boldPaymentLink: 'https://checkout.bold.co/payment/LNK_AJPFKOPB0C', isActive: true, }, { id: 'pay-bold-bancolombia', name: 'Botón Bancolombia (Transferencia Directa)', type: 'bold', boldChannel: 'bancolombia', badge: 'Bold 🟡 Botón Bancolombia', icon: 'Wallet', description: 'Transfiere al instante desde tu app Bancolombia o A la Mano sin comisiones adicionales vía Bold.', requiresDeposit: false, depositAmount: 0, boldPaymentLink: 'https://checkout.bold.co/payment/LNK_AJPFKOPB0C', isActive: true, }, { id: 'pay-bold-bre-b', name: 'Código QR Bre-B • Interoperabilidad Inmediata', type: 'bold', boldChannel: 'bre_b', badge: 'Bold ⚡ QR Bre-B', icon: 'QrCode', description: 'Escanea el código QR oficial de Bold compatible con la red nacional Bre-B desde cualquier entidad financiera aliada para pago instantáneo.', requiresDeposit: false, depositAmount: 0, boldQrUrl: 'https://storage.almeira.com.co/v1/storage/buckets/products-images/files/bold-qr-bre-b/view?project=6761c57300305a415ff6', boldPaymentLink: 'https://checkout.bold.co/payment/LNK_AJPFKOPB0C', isActive: true, }, { id: 'pay-bold-checkout', name: 'Checkout Global Bold • Todos los Métodos Digitales', type: 'bold', boldChannel: 'all', badge: 'Bold 🛡️ Todos los Métodos', icon: 'Zap', description: 'Accede al portal completo de Bold donde podrás escoger entre PSE, Tarjetas, Nequi, Botón Bancolombia o efectivo en puntos autorizados.', requiresDeposit: false, depositAmount: 0, boldPaymentLink: 'https://checkout.bold.co/payment/LNK_AJPFKOPB0C', isActive: true, }, { id: 'pay-cod-full', name: 'Pago 100% Contraentrega en Efectivo', type: 'contraentrega', boldChannel: 'custom', badge: '💵 Contraentrega Cali', icon: 'Banknote', description: 'Paga el valor total en efectivo al domiciliario al momento de recibir tu pedido. Disponible en Cali y cobertura local.', requiresDeposit: false, depositAmount: 0, isActive: true, }, { id: 'pay-direct-nequi-daviplata', name: 'Transferencia Directa Nequi / Daviplata', type: 'transferencia', boldChannel: 'custom', badge: '📲 Transferencia Directa', icon: 'Send', description: 'Transfiere directamente a las cuentas oficiales de la tienda y envía tu comprobante para despacho prioritario.', requiresDeposit: false, depositAmount: 0, accountInfo: 'Nequi / Daviplata: 316 745 5877 • Titular: Carlos Lasso', isActive: true, } ]; async function sync() { console.log('[1] Obteniendo metodos existentes en Appwrite...'); const existing = await databases.listDocuments(DB_ID, COLL_ID, [Query.limit(100)]); console.log(`Encontrados ${existing.documents.length} metodos existentes.`); for (const doc of existing.documents) { try { await databases.deleteDocument(DB_ID, COLL_ID, doc.$id); console.log(` - Eliminado: ${doc.$id}`); } catch (e) { console.warn(` - Error eliminando ${doc.$id}:`, e.message); } } console.log('[2] Insertando metodos organizados por canales Bold...'); for (const m of INITIAL_PAYMENT_METHODS) { const metaPayload = { boldChannel: m.boldChannel, badge: m.badge, icon: m.icon, info: m.accountInfo || '' }; const payload = { name: m.name, type: m.type, description: m.description, requiresDeposit: m.requiresDeposit, depositAmount: m.depositAmount, accountInfo: JSON.stringify(metaPayload), boldPaymentLink: m.boldPaymentLink || '', boldQrUrl: m.boldQrUrl || '', isActive: m.isActive }; try { await databases.createDocument(DB_ID, COLL_ID, m.id, payload); console.log(` + Creado con exito: [${m.id}] ${m.name}`); } catch (e) { console.error(` x Error creando [${m.id}]:`, e.message); } } console.log('\n[3] Verificando store_settings (modo produccion/pruebas)...'); const SETTINGS_COLL = 'store_settings'; const settingsList = await databases.listDocuments(DB_ID, SETTINGS_COLL, [Query.limit(5)]); if (settingsList.documents.length > 0) { const sDoc = settingsList.documents[0]; console.log(`Configuracion actual: ID=${sDoc.$id}, boldMerchantId=${sDoc.boldMerchantId}, boldPaymentLink=${sDoc.boldPaymentLink}`); // Guardar boldEnvironment en boldMerchantId y API keys en boldApiKey await databases.updateDocument(DB_ID, SETTINGS_COLL, sDoc.$id, { boldMerchantId: 'production', boldPaymentLink: 'https://checkout.bold.co/payment/LNK_AJPFKOPB0C' }); console.log(' -> Actualizado store_settings con boldMerchantId: production y boldPaymentLink oficial.'); } console.log('\n✅ SINCRONIZACION COMPLETADA EXITOSAMENTE!'); } sync().catch(console.error);