managarten/chat/apps/mobile/scripts/spaces/setup_spaces.js
Till-JS c638a7ffee feat(chat): integrate chat project into monorepo with full app structure
- Restructure chat as apps/mobile, apps/web, apps/landing, backend
- Add NestJS backend for secure Azure OpenAI API calls
- Remove exposed API key from mobile app (security fix)
- Add shared chat-types package
- Create SvelteKit web app scaffold
- Create Astro landing page scaffold
- Update pnpm workspace configuration
- Add project-level CLAUDE.md documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 13:48:24 +01:00

83 lines
No EOL
2.2 KiB
JavaScript
Executable file

#!/usr/bin/env node
/**
* This script sets up the spaces feature by running the necessary SQL scripts
*/
const fs = require('fs');
const path = require('path');
const { spawnSync } = require('child_process');
const { createClient } = require('@supabase/supabase-js');
// Get environment variables
const SUPABASE_URL = process.env.SUPABASE_URL;
const SUPABASE_SERVICE_KEY = process.env.SUPABASE_SERVICE_KEY;
if (!SUPABASE_URL || !SUPABASE_SERVICE_KEY) {
console.error('Error: SUPABASE_URL and SUPABASE_SERVICE_KEY environment variables must be set');
process.exit(1);
}
// Create Supabase client
const supabase = createClient(SUPABASE_URL, SUPABASE_SERVICE_KEY, {
auth: {
autoRefreshToken: false,
persistSession: false
}
});
async function executeSQL(filename) {
try {
const filePath = path.join(__dirname, filename);
const sql = fs.readFileSync(filePath, 'utf8');
// Split the SQL file by semicolons to get individual statements
const statements = sql
.split(';')
.map(statement => statement.trim())
.filter(statement => statement.length > 0);
console.log(`Executing ${statements.length} statements from ${filename}...`);
for (const statement of statements) {
const { error } = await supabase.rpc('exec_sql', { sql: statement });
if (error) {
console.error(`Error executing statement:`, error);
console.error(`Statement was: ${statement.substring(0, 100)}...`);
}
}
console.log(`✅ Successfully executed ${filename}`);
return true;
} catch (error) {
console.error(`❌ Error executing ${filename}:`, error);
return false;
}
}
async function main() {
console.log('Setting up spaces feature...');
// Run the SQL scripts in the correct order
const scripts = [
'create_spaces_tables.sql',
'create_spaces_triggers.sql',
'create_spaces_rls.sql'
];
for (const script of scripts) {
const success = await executeSQL(script);
if (!success) {
console.error(`Failed to execute ${script}. Aborting.`);
process.exit(1);
}
}
console.log('✅ Spaces feature setup complete!');
}
main().catch(err => {
console.error('Unhandled error:', err);
process.exit(1);
});