Files
draft/cmd/handler.go
T
FernandoJVideira d7e4c554d8 chore: rename keystone to draft
Rename the module, CLI command name, and all references from
keystone/basalt to draft, and fix the stale build/README content
found along the way.
2026-08-25 13:55:24 +01:00

84 lines
1.8 KiB
Go

package cmd
import (
"fmt"
"path/filepath"
"strings"
"github.com/manifoldco/promptui"
"github.com/spf13/cobra"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
var handlerTypes = map[string]string{
"HTTP (REST)": "http",
"gRPC": "grpc",
}
func init() {
newCmd.AddCommand(handlerCmd)
}
var handlerCmd = &cobra.Command{
Use: "handler",
Short: "Create a new handler",
Long: `Create a new handler for your Draft project.`,
Run: genHandler,
}
type HandlerTemplateData struct {
ModuleName string
Name string
}
func genHandler(cmd *cobra.Command, args []string) {
namePrompt := promptui.Prompt{
Label: "Handler Name",
}
handlerNameInput, err := namePrompt.Run()
if err != nil {
fmt.Printf("Prompt failed %v\n", err)
return
}
handlerTypeInput := promptui.Select{
Label: "Select API Type",
Items: []string{"HTTP (REST)", "gRPC"},
}
_, result, err := handlerTypeInput.Run()
if err != nil {
fmt.Printf("Prompt failed %v\n", err)
return
}
moduleName, err := getModuleName()
if err != nil {
fmt.Printf("❌ Error retrieving module name: %v\n", err)
return
}
mappedHandlerType := handlerTypes[result]
handlerName := strings.ToLower(handlerNameInput)
cases := cases.Title(language.English)
fmt.Printf("🚀 Creating handler '%s' as %s...\n", handlerNameInput, result)
if err := genFile(
fmt.Sprintf("templates/handler_%s.go.tpl", mappedHandlerType),
handlerName,
filepath.Join("internal/handlers", mappedHandlerType, fmt.Sprintf("%s.go", handlerName)),
HandlerTemplateData{
ModuleName: moduleName,
Name: cases.String(handlerNameInput),
},
); err != nil {
fmt.Printf("❌ Error creating handler: %v\n", err)
return
}
fmt.Printf("✅ Handler '%s' created successfully at %s\n", handlerNameInput, filepath.Join("internal/handlers", mappedHandlerType, fmt.Sprintf("%s.go", handlerName)))
}