// Right now this will be a very simple, scuffed interface. package main import ( "fmt" bolt "go.etcd.io/bbolt" "github.com/eiannone/keyboard" ) func badUI(db *bolt.DB) error { keysEvents, err := keyboard.GetKeys(10) if err != nil { return fmt.Errorf("unable to create the keysEvent channel, %w", err) } defer func() { _ = keyboard.Close() }() // infinite loop fmt.Println(uiUsage()) app: for { event := <-keysEvents if event.Err != nil { return fmt.Errorf("keys event error: %w", event.Err) } switch event.Rune { case 'q': break app case 'r': if err := uiRefreshScuffedBoard(db); err != nil { fmt.Printf("Error: Unable to refresh board, %s\n", err) } case 'a': if err := uiCreateCard(db); err != nil { fmt.Printf("Error: Unable to add a card, %s\n", err) } case 'v': if err := uiViewCard(db, 1); err != nil { fmt.Printf("Error: Unable to view card, %s\n", err) } default: fmt.Println("Error: Unknown key event.") } } // wait for a keyboard press // take action // a to add a card // u to update a card return nil } func uiRefreshScuffedBoard(db *bolt.DB) error { statusList, err := readStatuses(db) if err != nil { return err } fmt.Printf("--------------------\n") for _, s := range statusList{ fmt.Printf("Status ID: %d\nStatus Name: \"%s\"\nCard IDs: %v\n\n", s.ID, s.Name, s.CardIds) } fmt.Printf("--------------------\n\n\n") return nil } func uiCreateCard(db *bolt.DB) error { title := "A card title" content := "As a user, this is a ticket for me.\nAs a user, I want to close it." if err := createCard(db, title, content); err != nil { return err } fmt.Println("Sample card created successfully.") return nil } func uiViewCard(db *bolt.DB, id int) error { card, err := readCard(db, id) if err != nil { return err } fmt.Printf("====================\n") fmt.Printf("[%d] %s\n", card.ID, card.Title) fmt.Printf("--------------------\n") fmt.Println(card.Content) fmt.Printf("====================\n") return nil } func uiUsage() string { usage := ` Press 'q' to quit Press 'r' to refresh the board Press 'a' to add a sample card Press 'v' to view the first sample card ` return usage }