const sdk = require('node-appwrite'); const client = new sdk.Client(); const databases = new sdk.Databases(client); const storage = new sdk.Storage(client); const ENDPOINT = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1'; const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c'; const API_KEY = process.env.APPWRITE_API_KEY || 'standard_ee81a4ca6784c0fa6a23abab0a983dbba9cd0c2d8e211a00c759d9801f5d8e27b43a605bfa373e13106da87acfc7673608f0ffb0eb04e10cae3dae93d2404bfda8676f96e3fcfd6bd642f6e12d69367916b796c54e98e2e4c4bc0b7a27aa42ba5048582fcbd45b1365b51c5014cb939c1853923c418048ff0e39c2237065da3c'; client .setEndpoint(ENDPOINT) .setProject(PROJECT_ID) .setKey(API_KEY); const delay = ms => new Promise(res => setTimeout(res, ms)); const dbId = 'almeira'; const targetBucketId = 'media_bucket'; async function setupMedia() { try { console.log('========================================'); console.log('Almeira Web — Setup Media Library'); console.log('========================================\n'); // 1. Create Storage Bucket console.log('[1/2] Creando Storage Bucket: media_bucket...'); try { await storage.createBucket( targetBucketId, 'Biblioteca de Medios', [sdk.Permission.read(sdk.Role.any())], // Anyone can view files publicly true, // fileSecurity true, // enabled 150000000, // maximum file size (150MB) ['jpg', 'jpeg', 'png', 'gif', 'webp', 'mp4', 'webm', 'mov'] // allowed file extensions ); console.log(' ✓ Storage Bucket creado exitosamente.'); } catch(e){ if (e.code === 409) { console.log(' ✓ Storage Bucket ya existe.'); } else { console.log(' x Error creando Bucket:', e.message); } } await delay(1000); // 2. Create Media DB Collection for SEO console.log('\n[2/2] Creando colección: Medios y SEO...'); try { await databases.createCollection(dbId, 'media', 'Medios y SEO', [], false); console.log(' ✓ Colección creada.'); } catch(e){ if (e.code === 409) { console.log(' ✓ Colección ya existe.'); } else { console.log(' x Error:', e.message); } } await delay(500); try { await databases.createStringAttribute(dbId, 'media', 'file_id', 255, true); console.log(" ✓ Atributo file_id"); } catch(e){} await delay(300); try { await databases.createStringAttribute(dbId, 'media', 'bucket_id', 255, true); console.log(" ✓ Atributo bucket_id"); } catch(e){} await delay(300); try { await databases.createStringAttribute(dbId, 'media', 'titulo', 255, true); console.log(" ✓ Atributo titulo"); } catch(e){} await delay(300); try { await databases.createStringAttribute(dbId, 'media', 'alt_text', 500, false); console.log(" ✓ Atributo alt_text"); } catch(e){} await delay(300); try { await databases.createStringAttribute(dbId, 'media', 'descripcion_seo', 2000, false); console.log(" ✓ Atributo descripcion_seo"); } catch(e){} await delay(300); try { await databases.createStringAttribute(dbId, 'media', 'tipo', 50, true); console.log(" ✓ Atributo tipo"); } catch(e){} await delay(300); console.log('\n========================================'); console.log('✅ Setup Media completado con éxito!'); console.log('========================================'); } catch(e) { console.error('\n❌ Error global:', e.message); } } setupMedia();