132 lines
4.1 KiB
JavaScript
132 lines
4.1 KiB
JavaScript
/**
|
|
* 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));
|