Skip to content

Commit 3cc740b

Browse files
committed
handle errors with fmt.Errorf + code qol changes
1 parent 0e1bd9d commit 3cc740b

5 files changed

Lines changed: 23 additions & 11 deletions

File tree

cmd/generate.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ Copyright © 2026 NAME HERE <EMAIL ADDRESS>
44
package cmd
55

66
import (
7+
"strings"
8+
79
"github.com/andrearcaina/goforge/internal/goforge"
810
"github.com/andrearcaina/goforge/internal/spec"
911
"github.com/spf13/cobra"
@@ -31,10 +33,18 @@ goforge generate --some-flag "Developer"`,
3133
func init() {
3234
rootCmd.AddCommand(generateCmd)
3335

36+
// general flags
3437
generateCmd.Flags().StringVarP(&cfg.OutputPath, "path", "p", ".", "The directory to write the generated file to")
3538
generateCmd.Flags().BoolVarP(&cfg.Default, "default", "d", false, "Use default configuration values")
3639

40+
// flags for form fields
3741
generateCmd.Flags().StringVarP(&cfg.Form.Name, "name", "n", "", "The name for the go.mod module")
3842
generateCmd.Flags().StringVarP((*string)(&cfg.Form.ServerTypeFlag), "server", "s", "", "Type of server to generate (rest/grpc/graphql)")
39-
generateCmd.Flags().BoolVar(&cfg.Form.DatabaseFlag, "database", false, "Generate database files")
43+
generateCmd.Flags().BoolVar(&cfg.Form.DatabaseFlag, "database", false, "Generate database files (if flag is set, set to true)")
44+
45+
// normalize server type flag to lowercase
46+
generateCmd.PreRun = func(cmd *cobra.Command, args []string) {
47+
// first convert to string, then lowercase the string, then convert back to ServerTypeFlag
48+
cfg.Form.ServerTypeFlag = spec.ServerTypeFlag(strings.ToLower(string(cfg.Form.ServerTypeFlag)))
49+
}
4050
}

internal/goforge/forge.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package goforge
22

33
import (
4-
"errors"
54
"fmt"
65

76
"github.com/andrearcaina/goforge/internal/spec"
@@ -18,7 +17,7 @@ func Forge(cfg *spec.Config) error {
1817
}
1918
} else {
2019
if err := ui.Run(cfg); err != nil {
21-
return errors.New("failed to run ui form")
20+
return fmt.Errorf("failed to run UI: %w", err)
2221
}
2322
}
2423

internal/goforge/generator.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package goforge
22

33
import (
4-
"errors"
54
"fmt"
65
"os"
76
"path/filepath"
@@ -13,11 +12,13 @@ import (
1312
)
1413

1514
func Generate(cfg *spec.Config) error {
16-
if cfg.Form.ServerTypeFlag == "rest" {
15+
if cfg.Form.ServerTypeFlag == spec.REST {
1716
return generateRESTServer(cfg)
1817
}
1918

20-
return errors.New("unknown server type")
19+
// TODO: add support for grpc and graphql
20+
21+
return fmt.Errorf("unsupported server type: %s", cfg.Form.ServerTypeFlag)
2122
}
2223

2324
func generateRESTServer(cfg *spec.Config) error {

internal/ui/form.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package ui
22

33
import (
4-
"errors"
4+
"fmt"
55

66
"github.com/andrearcaina/goforge/internal/spec"
77
"github.com/charmbracelet/huh"
@@ -37,7 +37,7 @@ func createForm(cfg *spec.Config) *huh.Form {
3737
Value(&cfg.Form.Name).
3838
Validate(func(s string) error {
3939
if s == "" {
40-
return errors.New("this field cannot be empty")
40+
return fmt.Errorf("project name cannot be empty")
4141
}
4242
return nil
4343
}),

internal/ui/success.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,21 @@ func OutputSuccess(cfg *spec.Config) {
1111
successStyle := lipgloss.NewStyle().
1212
Foreground(lipgloss.Color("205")).
1313
Bold(true).
14-
Padding(1, 0).
15-
Render("🔥 Generated successfully!")
14+
Padding(1, 0)
1615

1716
cmdStyle := lipgloss.NewStyle().
1817
Foreground(lipgloss.Color("63")).
1918
PaddingLeft(2)
2019

21-
fmt.Println(successStyle)
20+
fmt.Println(successStyle.Render("🔥 Generated successfully!"))
21+
22+
// next step
2223
fmt.Println("Make sure to run the following commands:")
2324
fmt.Println(cmdStyle.Render(fmt.Sprintf("cd %s", cfg.OutputPath)))
2425
fmt.Println(cmdStyle.Render("go mod tidy"))
2526
fmt.Println(cmdStyle.Render("swag init -g ./cmd/server/main.go (need to install swag first)"))
2627

28+
// additional commands if database is included
2729
if cfg.Form.DatabaseFlag {
2830
fmt.Println(cmdStyle.Render("sqlc generate ./... (you need to install sqlc first)"))
2931
fmt.Println(cmdStyle.Render("go run ./cmd/server/main.go (you need to run a database first and set up the .env file)"))

0 commit comments

Comments
 (0)