/** * Script de inicialización de la Base de Datos Independiente en Appwrite * Ejecutar con: node scripts/setup-appwrite.js */ const { Client, Databases, Storage, Permission, Role } = require('node-appwrite'); const fs = require('fs'); const path = require('path'); // Leer variables de .env.local manualmente si dotenv no está disponible en este script const envPath = path.resolve(__dirname, '../.env.local'); if (fs.existsSync(envPath)) { const envContent = fs.readFileSync(envPath, 'utf8'); envContent.split('\n').forEach((line) => { const trimmed = line.trim(); if (trimmed && !trimmed.startsWith('#')) { const [k, ...v] = trimmed.split('='); if (k && v) process.env[k.trim()] = v.join('=').trim(); } }); } const endpoint = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1'; const projectId = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c'; const apiKey = process.env.APPWRITE_API_KEY; const databaseId = process.env.NEXT_PUBLIC_APPWRITE_DATABASE_ID || 'sneakers_multistore_db'; const bucketId = process.env.NEXT_PUBLIC_APPWRITE_MEDIA_BUCKET_ID || 'sneakers_media_bucket'; if (!apiKey) { console.error('❌ Falta APPWRITE_API_KEY en .env.local'); process.exit(1); } const client = new Client() .setEndpoint(endpoint) .setProject(projectId) .setKey(apiKey); const databases = new Databases(client); const storage = new Storage(client); async function setup() { console.log('🚀 Iniciando configuración de la Base de Datos Independiente para la Tienda...'); console.log(`Endpoint: ${endpoint}`); console.log(`Database ID: ${databaseId}`); console.log(`Bucket ID: ${bucketId}`); // 1. Crear Base de Datos Independiente si no existe try { await databases.get(databaseId); console.log(`✅ Base de datos independiente "${databaseId}" ya existe.`); } catch (e) { console.log(`Creando base de datos independiente "${databaseId}"...`); await databases.create(databaseId, 'Sneakers Multi-Store DB'); console.log(`✅ Base de datos "${databaseId}" creada con éxito.`); } // 2. Crear Storage Bucket Independiente si no existe try { await storage.getBucket(bucketId); console.log(`✅ Storage Bucket "${bucketId}" ya existe.`); } catch (e) { console.log(`Creando Storage Bucket "${bucketId}"...`); try { await storage.createBucket( bucketId, 'Sneakers Media Assets', [Permission.read(Role.any()), Permission.create(Role.any())], false, // fileSecurity true, // enabled 50000000, // 50MB max file size ['jpg', 'png', 'webp', 'jpeg'] ); console.log(`✅ Storage Bucket "${bucketId}" creado con éxito.`); } catch (bErr) { console.warn('Nota sobre creación de bucket:', bErr.message); } } // 3. Crear Colecciones Independientes const collections = [ { id: 'products', name: 'Productos y Zapatillas', }, { id: 'cities', name: 'Ciudades y Envíos', }, { id: 'payment_methods', name: 'Métodos de Pago', }, { id: 'orders', name: 'Pedidos de Clientes', }, { id: 'supplier_posts', name: 'Feed de Mensajes WhatsApp', }, ]; for (const col of collections) { try { await databases.getCollection(databaseId, col.id); console.log(`✅ Colección "${col.name}" (${col.id}) ya existe.`); } catch (e) { console.log(`Creando colección "${col.name}" (${col.id})...`); try { await databases.createCollection( databaseId, col.id, col.name, [ Permission.read(Role.any()), Permission.create(Role.any()), Permission.update(Role.any()), Permission.delete(Role.any()), ] ); console.log(`✅ Colección creada: ${col.id}`); } catch (cErr) { console.warn(`Error creando colección ${col.id}:`, cErr.message); } } } console.log('🎉 ¡Base de datos y colecciones independientes configuradas al 100%!'); } setup().catch((err) => console.error('Error configurando Appwrite:', err));