topfans/backend/cmd/laser_test/main.go
Lenticular Studio Agent 67cf3d4177 chore: 清理 laserCompositor 微服务残留
- 删除已弃用的 compositor_client.go
- 删除激光合成微服务代码
- 添加 gateway 合成控制器和测试文件
- 添加 Dify prompt 补丁脚本

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-23 22:44:03 +08:00

90 lines
3.0 KiB
Go

// 一次性测试程序:打 /api/v1/laser/generate 验证 OpenAI 路径
// 用法:JWT_SECRET=xxx go run cmd/laser_test/main.go
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"time"
"github.com/golang-jwt/jwt/v5"
)
type Claims struct {
UserID int64 `json:"user_id"`
StarID int64 `json:"star_id"`
UpdatedAt int64 `json:"updated_at"`
jwt.RegisteredClaims
}
func main() {
jwtSecret := []byte(os.Getenv("JWT_SECRET"))
if len(jwtSecret) == 0 {
fmt.Println("FATAL: JWT_SECRET not set")
os.Exit(1)
}
now := time.Now()
claims := Claims{
UserID: 1001,
StarID: 2002,
UpdatedAt: now.Unix(),
RegisteredClaims: jwt.RegisteredClaims{
IssuedAt: jwt.NewNumericDate(now),
ExpiresAt: jwt.NewNumericDate(now.Add(1 * time.Hour)),
},
}
tok := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
tokenStr, err := tok.SignedString(jwtSecret)
if err != nil {
fmt.Println("FATAL sign:", err)
os.Exit(1)
}
fmt.Println("[1] JWT generated, len=", len(tokenStr))
// 用一个 OpenAI 能访问的公网图片作 cutout
body := map[string]interface{}{
"cutout_url": "https://www.gstatic.com/webp/gallery3/1.png",
"preset_codes": []string{"dream", "classic", "holoFull", "ice", "sunset"},
"render_configs": []map[string]interface{}{
{"preset_id": "dream", "bg_prompt": "holographic laser card, dream style, pink, bokeh, iridescent", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 15}},
{"preset_id": "classic", "bg_prompt": "holographic laser card, classic style, gold, premium, museum", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 20}},
{"preset_id": "holoFull", "bg_prompt": "holographic laser card, cyberpunk, neon, magenta, grid", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 25}},
{"preset_id": "ice", "bg_prompt": "holographic laser card, ice blue, frosted, chrome", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 30}},
{"preset_id": "sunset", "bg_prompt": "holographic laser card, warm orange sunset, silhouette", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 35}},
},
"user_prompt": "",
}
bodyBytes, _ := json.Marshal(body)
url := "http://localhost:8080/api/v1/laser/generate"
req, _ := http.NewRequest("POST", url, bytes.NewReader(bodyBytes))
req.Header.Set("Authorization", "Bearer "+tokenStr)
req.Header.Set("Content-Type", "application/json")
cli := &http.Client{Timeout: 300 * time.Second}
fmt.Println("[2] POST", url, "timeout=300s")
t0 := time.Now()
resp, err := cli.Do(req)
if err != nil {
fmt.Println("FATAL request:", err)
os.Exit(1)
}
defer resp.Body.Close()
respBody, _ := io.ReadAll(resp.Body)
elapsed := time.Since(t0)
fmt.Printf("[3] HTTP %d (elapsed: %v)\n", resp.StatusCode, elapsed.Round(time.Second))
preview := string(respBody)
if len(preview) > 3000 {
preview = preview[:3000] + "...(truncated)"
}
fmt.Println("[4] Response body:")
fmt.Println(preview)
}