// Supabase Configuration and API Functions // API Workflow Builder - Database Integration const SUPABASE_URL = 'https://rootomzbucovwdqsscqd.supabase.co'; const SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InJvb3RvbXpidWNvdndkcXNzY3FkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MzU4OTE4ODMsImV4cCI6MjA1MTQ2Nzg4M30.fYKOe-HPh4WUdvBhEJxakLWCMQBp4E90EDwARk7ucf8'; // Supabaseクライアント初期化 const supabaseClient = supabase.createClient(SUPABASE_URL, SUPABASE_ANON_KEY); console.log('✅ Supabase Client initialized'); /** * ページをSupabaseに保存 * @param {string} pageName - ページ名 * @param {string} html - HTML内容 * @param {string} css - CSS内容 * @param {object} components - GrapeJSコンポーネント * @returns {Promise<{success: boolean, data: any, error: string}>} */ async function savePageToSupabase(pageName, html, css, components) { try { const { data, error } = await supabaseClient .from('page_builder_pages') .insert({ name: pageName, html_content: html, css_content: css, components_json: components, created_at: new Date().toISOString(), updated_at: new Date().toISOString() }) .select(); if (error) throw error; console.log('✅ Page saved to Supabase:', data); return { success: true, data: data, error: null }; } catch (error) { console.error('❌ Error saving page:', error); return { success: false, data: null, error: error.message }; } } /** * Supabaseから全ページを取得 * @returns {Promise<{success: boolean, data: any[], error: string}>} */ async function loadPagesFromSupabase() { try { const { data, error } = await supabaseClient .from('page_builder_pages') .select('*') .order('updated_at', { ascending: false }); if (error) throw error; console.log('✅ Pages loaded from Supabase:', data.length); return { success: true, data: data, error: null }; } catch (error) { console.error('❌ Error loading pages:', error); return { success: false, data: [], error: error.message }; } } /** * Supabaseから特定のページを取得 * @param {string} pageId - ページID * @returns {Promise<{success: boolean, data: any, error: string}>} */ async function loadPageFromSupabase(pageId) { try { const { data, error } = await supabaseClient .from('page_builder_pages') .select('*') .eq('id', pageId) .single(); if (error) throw error; console.log('✅ Page loaded from Supabase:', data.name); return { success: true, data: data, error: null }; } catch (error) { console.error('❌ Error loading page:', error); return { success: false, data: null, error: error.message }; } } /** * API実行ログをSupabaseに保存 * @param {string} apiName - API名 * @param {string} endpoint - エンドポイント * @param {object} request - リクエストデータ * @param {object} response - レスポンスデータ * @param {string} status - ステータス ('success' or 'error') * @returns {Promise<{success: boolean, data: any, error: string}>} */ async function saveApiLogToSupabase(apiName, endpoint, request, response, status) { try { const { data, error } = await supabaseClient .from('api_execution_logs') .insert({ api_name: apiName, endpoint: endpoint, request_data: request, response_data: response, status: status, executed_at: new Date().toISOString() }) .select(); if (error) throw error; console.log('✅ API log saved:', apiName, status); return { success: true, data: data, error: null }; } catch (error) { console.error('❌ Error saving API log:', error); return { success: false, data: null, error: error.message }; } } /** * Supabaseから API実行ログを取得 * @param {number} limit - 取得件数 * @returns {Promise<{success: boolean, data: any[], error: string}>} */ async function getApiLogsFromSupabase(limit = 50) { try { const { data, error } = await supabaseClient .from('api_execution_logs') .select('*') .order('executed_at', { ascending: false }) .limit(limit); if (error) throw error; console.log('✅ API logs loaded:', data.length); return { success: true, data: data, error: null }; } catch (error) { console.error('❌ Error loading API logs:', error); return { success: false, data: [], error: error.message }; } } // グローバルに公開 window.savePageToSupabase = savePageToSupabase; window.loadPagesFromSupabase = loadPagesFromSupabase; window.loadPageFromSupabase = loadPageFromSupabase; window.saveApiLogToSupabase = saveApiLogToSupabase; window.getApiLogsFromSupabase = getApiLogsFromSupabase;