File size: 7,268 Bytes
f16f488
 
 
 
 
 
61e6506
f16f488
 
 
 
 
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
---

title: API Workflow Builder
emoji: 🚀
colorFrom: purple
colorTo: blue
sdk: gradio
sdk_version: "5.9.1"
app_file: app.py
pinned: false
license: mit
---


# 🚀 API Workflow Builder

Visual page builder with API integration powered by GrapeJS and Supabase.

## 📋 概要

ドラッグ&ドロップでAPIワークフロー画面を構築できるビジュアルエディタ。
Shop11 APIと連携し、商品・顧客・査定データを簡単に操作できます。

## ✨ 機能

### 📦 ページビルダー
- **ドラッグ&ドロップ**: GrapeJSベースの直感的なエディタ
- **リアルタイムプレビュー**: 編集内容をその場で確認
- **Supabase連携**: ページデータをクラウドに保存
- **HTML出力**: 作成したページをHTMLファイルとしてダウンロード

### 🔌 APIブロック

#### Shop11 API連携ブロック
1. **地金チェック削除** (`gold-check-delete`)
   - エンドポイント: `POST /api/shouhin/gold_check_id_delete`
   - 商品IDを指定して地金チェックを削除

2. **査定タイトル生成** (`satei-title`)
   - エンドポイント: `GET /api/satei_func/create_title/{product_id}`
   - 商品IDから査定タイトルを自動生成

3. **メール送信** (`send-notification`)
   - エンドポイント: `POST /api/notification/mail`
   - 宛先・件名・本文を指定してメール送信

4. **商品検索** (`product-search`)
   - エンドポイント: `GET /api/auto_complete_refasta/ResultSearch`
   - キーワードで商品を検索

5. **商品データテーブル** (`product-data-table`)
   - 商品データを検索してテーブル表示
   - ソート・フィルタリング対応

6. **顧客検索テーブル** (`customer-data-table`)
   - 顧客名・電話番号で検索
   - 顧客情報を一覧表示

7. **査定検索テーブル** (`satei-data-table`)
   - 査定データを検索・表示
   - ステータス別バッジ表示

8. **商品登録フォーム** (`product-register-form`)
   - エンドポイント: `POST /api/shouhin/register`
   - 新規商品をフォームから登録

### 💾 データ永続化
- **Supabase Tables**:
  - `page_builder_pages`: ページデータ保存
  - `api_execution_logs`: API実行履歴ログ
- **LocalStorage**: エディタの自動保存

## 🚀 使い方

### 1. アクセス
```

http://localhost/shop11/public/page-builder/

```

### 2. ブロックを追加
1. 左サイドバーから「Shop11 API」カテゴリを選択
2. 使いたいブロックをキャンバスにドラッグ&ドロップ
3. ブロック内の入力フォームに値を入力
4. ボタンをクリックしてAPI実行

### 3. ページを保存
1. ヘッダーの「💾 保存」ボタンをクリック
2. ページ名を入力
3. Supabaseに保存 + HTMLファイルをダウンロード

### 4. ページを読込
1. ヘッダーの「📂 読込」ボタンをクリック
2. 過去に保存したページ一覧から選択
3. エディタに読み込まれます

### 5. プレビュー
- 「👁️ プレビュー」ボタンで新しいタブで表示確認

## 📁 ファイル構成

```

page-builder/

├── index.html           # メインエディタ画面

├── supabase-config.js   # Supabase接続設定

├── api-functions.js     # API呼び出し関数

├── .htaccess           # Apache設定

└── README.md           # このファイル

```

## 🔧 技術スタック

- **フロントエンド**: GrapeJS, Bootstrap 4.5.2, jQuery 3.5.1
- **バックエンド**: Laravel (Shop11), Supabase
- **データベース**: PostgreSQL (Supabase)
- **ストレージ**: Supabase Storage (将来実装予定)

## 🗄️ データベーススキーマ

### page_builder_pages
```sql

CREATE TABLE page_builder_pages (

  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),

  name text NOT NULL,

  html_content text,

  css_content text,

  components_json jsonb,

  created_at timestamp with time zone DEFAULT now(),

  updated_at timestamp with time zone DEFAULT now()

);

```

### api_execution_logs
```sql

CREATE TABLE api_execution_logs (

  id uuid PRIMARY KEY DEFAULT gen_random_uuid(),

  api_name text NOT NULL,

  endpoint text NOT NULL,

  request_data jsonb,

  response_data jsonb,

  status text CHECK (status IN ('success', 'error')),

  executed_at timestamp with time zone DEFAULT now()

);

```

## 🔐 Supabase設定

### 環境変数
- **SUPABASE_URL**: `https://rootomzbucovwdqsscqd.supabase.co`

- **SUPABASE_ANON_KEY**: `eyJhbGci...` (supabase-config.jsに記載)



### RLS (Row Level Security)

現在はテスト用に全アクセス許可。本番環境では認証を追加してください。



## 🎨 カスタマイズ



### 新しいAPIブロックを追加



1. **index.htmlに登録**:

```javascript

blockManager.add('my-custom-block', {

    label: '新しいブロック',

    category: 'Shop11 API',

    content: '<div class="shop11-api-block">...</div>'

});

```



2. **api-functions.jsに関数追加**:

```javascript

function myCustomFunction(button) {

    const block = button.closest('.shop11-api-block');

    // API呼び出し処理

    fetch('/api/my-endpoint', {...})

        .then(res => res.json())

        .then(data => {

            // Supabaseログ保存

            if (window.saveApiLogToSupabase) {

                saveApiLogToSupabase('API名', endpoint, requestData, data, 'success');

            }

        });

}

```



3. **イベントリスナーに登録**:

```javascript

case 'myCustomAction':

    myCustomFunction(e.target);

    break;

```



## 📊 API実行ログの確認



```javascript

// 直近50件のログを取得

getApiLogsFromSupabase(50).then(result => {

    console.log(result.data);

});

```



または、Supabase Dashboardで直接確認:

```sql

SELECT * FROM api_execution_logs 

ORDER BY executed_at DESC 

LIMIT 50;

```



## 🐛 トラブルシューティング



### ブロックがドラッグできない

- ブラウザのキャッシュをクリア

- F5でページをリロード



### APIエラーが発生する

- CSRF Tokenが正しく設定されているか確認

- Laravel側のルーティングを確認

- ネットワークタブでHTTPステータスコードを確認



### Supabaseに保存できない

- Supabase接続情報が正しいか確認

- RLSポリシーでアクセスが許可されているか確認

- ブラウザコンソールでエラーメッセージを確認



## 🚧 今後の拡張予定



- [ ] Supabase Storageへのファイルアップロード

- [ ] 認証機能の追加

- [ ] ページバージョン管理

- [ ] コラボレーション機能

- [ ] カスタムコンポーネント作成UI

- [ ] ワークフロー自動化

- [ ] Hugging Face Spaceへのデプロイ



## 📝 ライセンス



MIT License (予定)



## 👤 作者



Created for API workflow automation and visual page building.



## 📞 サポート



問題が発生した場合は、ブラウザのコンソールログを確認してください。