Files
ai_site/platform/scripts/smoke.go
2026-07-31 10:19:22 +08:00

106 lines
2.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//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
}