package main import ( "encoding/json" "fmt" "fwh-toolbox-server/logger" "fwh-toolbox-server/repositories/api/plane_v2" ) // 打印模式:true=完整JSON,false=简洁摘要 var verbose = false func main() { // 初始化 logger.Init("dev") slug := "au-version" projectId := "b44a29fc-496b-4767-bbf1-1912f4c922ab" host := "http://localhost:8600" email := "liang_jlyx@163.com" password := "Ljd@163.com" fmt.Println("=== Plane V2 API 测试 ===") fmt.Printf("Host: %s\n", host) fmt.Printf("Workspace: %s\n", slug) fmt.Printf("Project: %s\n", projectId) fmt.Println() // 初始化 Client fmt.Print("1. 初始化 PlaneClient... ") plane_v2.InitPlaneClient(host, email, password) svc := plane_v2.NewPlaneService() fmt.Println("✅ 登录成功") fmt.Println() // 测试 Workspace API fmt.Println("=== Workspace ===") testGet("ListWorkspaces", func() ([]byte, error) { return svc.ListWorkspaces() }) testGet("GetWorkspace", func() ([]byte, error) { return svc.GetWorkspace(slug) }) // 测试 Project API fmt.Println("\n=== Project ===") testGet("ListProjects", func() ([]byte, error) { return svc.ListProjects(slug) }) testGet("GetProject", func() ([]byte, error) { return svc.GetProject(slug, projectId) }) // 测试 Member API fmt.Println("\n=== Member ===") testGet("ListWorkspaceMembers", func() ([]byte, error) { return svc.ListWorkspaceMembers(slug) }) testGet("ListProjectMembers", func() ([]byte, error) { return svc.ListProjectMembers(slug, projectId) }) // 测试 Label API fmt.Println("\n=== Label ===") testGet("ListLabels", func() ([]byte, error) { return svc.ListLabels(slug, projectId) }) // 测试 State API fmt.Println("\n=== State ===") testGet("ListStates", func() ([]byte, error) { return svc.ListStates(slug, projectId) }) // 测试 Issue API fmt.Println("\n=== Issue ===") testGet("ListIssues", func() ([]byte, error) { return svc.ListIssues(slug, projectId) }) // 测试 Intake API fmt.Println("\n=== Intake ===") testGet("ListIntakeIssues (all)", func() ([]byte, error) { return svc.ListIntakeIssues(slug, projectId, "-2,-1,0,1,2") }) // 测试 Cycle API fmt.Println("\n=== Cycle ===") testGet("ListCycles", func() ([]byte, error) { return svc.ListCycles(slug, projectId) }) // 测试 Module API fmt.Println("\n=== Module ===") testGet("ListModules", func() ([]byte, error) { return svc.ListModules(slug, projectId) }) // 测试 Page API fmt.Println("\n=== Page ===") testGet("ListPages", func() ([]byte, error) { return svc.ListPages(slug, projectId) }) // 测试 Sticky API fmt.Println("\n=== Sticky ===") testGet("ListStickies", func() ([]byte, error) { return svc.ListStickies(slug) }) fmt.Println("\n=== 测试完成 ===") } func testGet(name string, fn func() ([]byte, error)) { fmt.Printf(" %s... ", name) data, err := fn() if err != nil { fmt.Printf("❌ %v\n", err) return } var parsed any if err := json.Unmarshal(data, &parsed); err == nil { if verbose { // 完整打印模式 pretty, _ := json.MarshalIndent(parsed, " ", " ") fmt.Printf("✅\n %s\n", string(pretty)) } else { // 简洁打印模式 switch v := parsed.(type) { case []any: fmt.Printf("✅ (%d items)\n", len(v)) case map[string]any: if results, ok := v["results"].([]any); ok { fmt.Printf("✅ (%d results)\n", len(results)) } else { fmt.Printf("✅ (object, %d keys)\n", len(v)) } default: fmt.Printf("✅ (%d bytes)\n", len(data)) } } } else { fmt.Printf("✅ (%d bytes, non-JSON)\n", len(data)) } }