Spaces:
Sleeping
Sleeping
| // 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; | |