chore: initial commit of ai site platform
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
105
platform/scripts/smoke.go
Normal file
105
platform/scripts/smoke.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user