Public Access
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.
84 lines
1.8 KiB
Go
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)))
|
|
}
|