File size: 5,434 Bytes
69996c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
// 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;