chore: initial commit of ai site platform

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
whm
2026-07-31 10:31:17 +08:00
commit 4ca82fb58a
203 changed files with 45745 additions and 0 deletions

105
platform/scripts/smoke.go Normal file
View File

@@ -0,0 +1,105 @@
//go:build ignore
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"net/url"
"os"
"path/filepath"
"time"
)
func main() {
base := "http://127.0.0.1:8888"
fmt.Println("== token ==")
tokBody, _ := json.Marshal(map[string]any{
"tenant_id": 1,
"user_id": 1,
"secret": "dev-only-change-me",
})
code, raw := do(http.MethodPost, base+"/api/v1/auth/token", tokBody, "")
fmt.Printf("status=%d\n%s\n", code, raw)
var tok struct {
AccessToken string `json:"access_token"`
}
must(json.Unmarshal(raw, &tok))
if tok.AccessToken == "" {
panic("empty access_token")
}
bearer := tok.AccessToken
// 若已发布则跳过 publish验证元数据落库后重启仍可 CRUD
fmt.Println("== blueprint (check existing) ==")
bpCode, bpRaw := do(http.MethodGet, base+"/api/v1/apps/inventory_ledger/blueprint", nil, bearer)
fmt.Printf("status=%d\n", bpCode)
if bpCode != 200 {
bpPath := filepath.Join("..", "blueprint", "examples", "inventory-ledger.blueprint.json")
bp, err := os.ReadFile(bpPath)
must(err)
pubBody, _ := json.Marshal(map[string]json.RawMessage{"blueprint": bp})
fmt.Println("== publish ==")
printDo(http.MethodPost, base+"/api/v1/apps/inventory_ledger/publish", pubBody, bearer)
} else {
fmt.Println("skip publish: app already in meta store")
fmt.Printf("%s\n", truncate(bpRaw, 200))
}
sku := fmt.Sprintf("A-%d", time.Now().Unix()%100000)
row, _ := json.Marshal(map[string]any{
"sku": sku, "product_name": "无线鼠标", "warehouse": "华东仓",
"qty": 120, "unit_price": 59.9, "status": "在售",
})
fmt.Println("== create ==")
printDo(http.MethodPost, base+"/api/v1/apps/inventory_ledger/inventory_items", row, bearer)
q := url.Values{}
q.Set("filter.warehouse", "华东仓")
q.Set("sort", "-qty")
fmt.Println("== list ==")
printDo(http.MethodGet, base+"/api/v1/apps/inventory_ledger/inventory_items?"+q.Encode(), nil, bearer)
}
func truncate(b []byte, n int) string {
if len(b) <= n {
return string(b)
}
return string(b[:n]) + "..."
}
func must(err error) {
if err != nil {
panic(err)
}
}
func printDo(method, rawURL string, body []byte, bearer string) {
code, raw := do(method, rawURL, body, bearer)
fmt.Printf("status=%d\n%s\n", code, raw)
}
func do(method, rawURL string, body []byte, bearer string) (int, []byte) {
var r io.Reader
if body != nil {
r = bytes.NewReader(body)
}
req, err := http.NewRequest(method, rawURL, r)
must(err)
if body != nil {
req.Header.Set("Content-Type", "application/json")
}
if bearer != "" {
req.Header.Set("Authorization", "Bearer "+bearer)
}
resp, err := http.DefaultClient.Do(req)
must(err)
defer resp.Body.Close()
b, _ := io.ReadAll(resp.Body)
return resp.StatusCode, b
}