almeira-web/setup_media.js

86 lines
3.8 KiB
JavaScript

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