package main import ( "encoding/json" "fmt" "net/http" "time" ) func (c *KVSClient) handleUserList(args []string) { // Note: Backend doesn't have a list-all endpoint, this would need to be added fmt.Println(yellow("User listing not implemented in backend API")) } func (c *KVSClient) handleUserGet(args []string) { if len(args) < 1 { fmt.Println(red("Usage: user get ")) return } respBody, status, err := c.doRequest("GET", "/api/users/"+args[0], nil) if err != nil { fmt.Println(red("Error:"), err) return } if status == 404 { fmt.Println(yellow("User not found")) return } if status != 200 { fmt.Println(red("Error:"), string(respBody)) return } var user User if err := json.Unmarshal(respBody, &user); err != nil { fmt.Println(red("Error parsing response:"), err) return } fmt.Println(cyan("User Details:")) fmt.Printf(" UUID: %s\n", user.UUID) fmt.Printf(" Nickname Hash: %s\n", user.NicknameHash) fmt.Printf(" Groups: %v\n", user.Groups) fmt.Printf(" Created: %s\n", time.Unix(user.CreatedAt, 0).Format(time.RFC3339)) fmt.Printf(" Updated: %s\n", time.Unix(user.UpdatedAt, 0).Format(time.RFC3339)) } func (c *KVSClient) handleUserCreate(args []string) { if len(args) < 1 { fmt.Println(red("Usage: user create ")) return } // The request body requires a JSON object like {"nickname": "..."} requestPayload := map[string]string{ "nickname": args[0], } respBody, status, err := c.doRequest("POST", "/api/users", requestPayload) if err != nil { fmt.Println(red("Error:"), err) return } // The backend returns 200 OK on success if status != http.StatusOK { fmt.Printf(red("Error creating user (status %d):\n"), status) fmt.Println(string(respBody)) return } // Parse the successful response to get the new user's UUID var response struct { UUID string `json:"uuid"` } if err := json.Unmarshal(respBody, &response); err != nil { fmt.Println(red("Error parsing successful response:"), err) return } fmt.Println(green("User created successfully")) fmt.Println(cyan("UUID:"), response.UUID) }