almeira-web/scripts/sync_payment_methods.js

193 lines
7.5 KiB
JavaScript

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);