feat: implement multistreaming module with Appwrite backend and UI setup
This commit is contained in:
parent
e8536d8367
commit
67d88f5d8c
75
setup_multistream_appwrite.js
Normal file
75
setup_multistream_appwrite.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
const sdk = require('node-appwrite');
|
||||||
|
require('dotenv').config({ path: '.env.local' });
|
||||||
|
|
||||||
|
// Script para inicializar la colección "SocialAccounts" en Appwrite para la Gestión Multistreaming
|
||||||
|
async function setupMultistreamAppwrite() {
|
||||||
|
console.log("Iniciando setup de Multistreaming en Appwrite...");
|
||||||
|
|
||||||
|
const client = new sdk.Client()
|
||||||
|
.setEndpoint(process.env.APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1')
|
||||||
|
.setProject(process.env.APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c')
|
||||||
|
.setKey(process.env.APPWRITE_API_KEY);
|
||||||
|
|
||||||
|
const databases = new sdk.Databases(client);
|
||||||
|
const DATABASE_ID = process.env.APPWRITE_DATABASE_ID || 'almeira_db';
|
||||||
|
const COLLECTION_ID = 'social_accounts';
|
||||||
|
const COLLECTION_NAME = 'Social Accounts (Multistreaming)';
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 1. Crear Colección
|
||||||
|
try {
|
||||||
|
await databases.createCollection(DATABASE_ID, COLLECTION_ID, COLLECTION_NAME, [
|
||||||
|
sdk.Permission.read(sdk.Role.users()),
|
||||||
|
sdk.Permission.write(sdk.Role.users()), // Solo el propio usuario mediante validación de API
|
||||||
|
]);
|
||||||
|
console.log(`Colección '${COLLECTION_NAME}' creada exitosamente.`);
|
||||||
|
} catch (e) {
|
||||||
|
if (e.code === 409) {
|
||||||
|
console.log(`La colección '${COLLECTION_NAME}' ya existe. Procediendo a verificar atributos...`);
|
||||||
|
} else {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Crear Atributos (Columnas)
|
||||||
|
console.log("Creando atributos para Social Accounts...");
|
||||||
|
|
||||||
|
// Identificador del Usuario dueño de la cuenta
|
||||||
|
await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'userId', 255, true);
|
||||||
|
|
||||||
|
// Plataforma (YOUTUBE, FACEBOOK, TWITCH, TIKTOK, INSTAGRAM, CUSTOM)
|
||||||
|
await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'provider', 50, true);
|
||||||
|
|
||||||
|
// Tokens de OAuth (Deberían cifrarse antes de guardarse)
|
||||||
|
await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'accessToken', 2048, false);
|
||||||
|
await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'refreshToken', 2048, false);
|
||||||
|
await databases.createDatetimeAttribute(DATABASE_ID, COLLECTION_ID, 'tokenExpiresAt', false);
|
||||||
|
|
||||||
|
// Perfil en la Plataforma
|
||||||
|
await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'providerAccountId', 255, false);
|
||||||
|
await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'providerAccountName', 255, false);
|
||||||
|
await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'providerAvatarUrl', 1024, false);
|
||||||
|
|
||||||
|
// Conexión RTMP Directa (Para configuraciones manuales o fallback)
|
||||||
|
await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'rtmpServerUrl', 1024, false);
|
||||||
|
await databases.createStringAttribute(DATABASE_ID, COLLECTION_ID, 'streamKey', 1024, false);
|
||||||
|
|
||||||
|
// Estado y Metadata
|
||||||
|
await databases.createBooleanAttribute(DATABASE_ID, COLLECTION_ID, 'isActive', false, true, false);
|
||||||
|
|
||||||
|
console.log("Esperando inicialización de atributos...");
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 3000));
|
||||||
|
|
||||||
|
// 3. Crear Índices
|
||||||
|
console.log("Creando índices...");
|
||||||
|
|
||||||
|
// Índice de búsqueda por usuario para obtener sus plataformas rápidamente
|
||||||
|
await databases.createIndex(DATABASE_ID, COLLECTION_ID, 'idx_user_provider', sdk.IndexType.Unique, ['userId', 'provider', 'providerAccountId'], ['ASC', 'ASC', 'ASC']);
|
||||||
|
|
||||||
|
console.log("¡Setup de Multistreaming finalizado con éxito!");
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error durante el setup:", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setupMultistreamAppwrite();
|
||||||
Loading…
Reference in New Issue
Block a user