// Example: search demonstrates search functionality. package main import ( "context" "fmt" "log" "os" "time" kanboard "code.beautifulmachines.dev/jakoubek/kanboard-api" ) func main() { // Read configuration from environment baseURL := os.Getenv("KANBOARD_URL") token := os.Getenv("KANBOARD_TOKEN") if baseURL == "" || token == "" { log.Fatal("Set KANBOARD_URL and KANBOARD_TOKEN environment variables") } client := kanboard.NewClient(baseURL). WithAPIToken(token). WithTimeout(30 * time.Second) ctx := context.Background() // Get the first project for project-specific search projects, err := client.GetAllProjects(ctx) if err != nil { log.Fatalf("Failed to get projects: %v", err) } if len(projects) == 0 { log.Fatal("No projects found") } projectID := int(projects[0].ID) fmt.Printf("Using project: %s (ID: %d)\n\n", projects[0].Name, projectID) // Project-specific search using Kanboard query syntax // See: https://docs.kanboard.org/v1/user/search/ fmt.Println("=== Project-Specific Search ===") // Search for open tasks tasks, err := client.SearchTasks(ctx, projectID, "status:open") if err != nil { log.Fatalf("Failed to search: %v", err) } fmt.Printf("Open tasks: %d\n", len(tasks)) for _, t := range tasks { fmt.Printf(" - [%d] %s\n", t.ID, t.Title) } // Search by title keyword tasks, err = client.Board(projectID).SearchTasks(ctx, "title:feature") if err != nil { log.Fatalf("Failed to search: %v", err) } fmt.Printf("\nTasks with 'feature' in title: %d\n", len(tasks)) for _, t := range tasks { fmt.Printf(" - [%d] %s\n", t.ID, t.Title) } // Search overdue tasks tasks, err = client.SearchTasks(ctx, projectID, "due:2024-01-01 - Tasks due after date") fmt.Println(" title:\"bug fix\" - Tasks with exact title match") fmt.Println(" color:red - Tasks with red color") fmt.Println(" category:\"Bug\" - Tasks in category") fmt.Println(" tag:urgent - Tasks with tag") fmt.Println(" priority:3 - Tasks with priority") fmt.Println() fmt.Println("Combine queries with spaces (AND) or | (OR):") fmt.Println(" status:open assignee:me - Open tasks assigned to me") fmt.Println(" status:open | status:closed - All tasks") }