Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add generate controller cli #39

Merged
merged 3 commits into from
Feb 9, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 16 additions & 7 deletions cmd/fuego/commands/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,21 @@ import (

"github.com/go-fuego/fuego/cmd/fuego/templates"
"github.com/urfave/cli/v2"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)

func ControllerCommand() *cli.Command {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On l'appelle de l'extérieur commands.Controller donc on comprend que c'est la commande pour créer des controllers

func Controller() *cli.Command {
return &cli.Command{
Name: "controller",
Usage: "add a new template",
Usage: "creates a new controller file",
Aliases: []string{"c"},
Action: func(cCtx *cli.Context) error {
controllerName := "newController"
if cCtx.NArg() > 0 {
controllerName = cCtx.Args().First()
} else {
fmt.Println("Note: You can add a controller name as an argument. Example: fuego controller yourControllerName")
fmt.Println("Note: You can add a controller name as an argument. Example: `fuego controller books`")
}

err := createController(controllerName)
Expand All @@ -33,22 +35,29 @@ func ControllerCommand() *cli.Command {
}
}

// createController creates a new controller file
func createController(controllerName string) error {
controllerDir := "./controllers/"
if _, err := os.Stat(controllerDir); os.IsNotExist(err) {
err = os.Mkdir(controllerDir, 0755)
err = os.Mkdir(controllerDir, 0o755)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je mets explicitement que c'est de l'octal

if err != nil {
return err
}
}

templateContent, err := templates.FS.ReadFile("controller.template")
templateContent, err := templates.FS.ReadFile("controller/controller.go")
if err != nil {
return err
}

t := language.English
titler := cases.Title(t)

newContent := strings.ReplaceAll(string(templateContent), "newController", controllerName)
newContent = strings.ReplaceAll(newContent, "NewController", strings.Title(controllerName))
newContent = strings.ReplaceAll(newContent, "NewController", titler.String(controllerName))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

askip mon IDE me dit qu'il faut préférer utiliser cases


controllerPath := fmt.Sprintf("%s%s.go", controllerDir, controllerName)
err = os.WriteFile(controllerPath, []byte(newContent), 0644)
err = os.WriteFile(controllerPath, []byte(newContent), 0o644)
if err != nil {
return err
}
Expand Down
12 changes: 12 additions & 0 deletions cmd/fuego/commands/controller_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package commands

import (
"testing"

"github.com/stretchr/testify/require"
)

func TestCreateController(t *testing.T) {
err := createController("books")
require.NoError(t, err)
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ca fait toujours plez pour vérifier que rien ne crash :)

6 changes: 3 additions & 3 deletions cmd/fuego/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@ import (
func main() {
app := &cli.App{
Name: "fuego",
Usage: "Fire like fuego!",
Action: func(*cli.Context) error {
Usage: "The framework for busy Go developers",
Action: func(c *cli.Context) error {
fmt.Println("The 🔥 CLI!")
return nil
},
Commands: []*cli.Command{
commands.ControllerCommand(),
commands.Controller(),
},
}

Expand Down
45 changes: 0 additions & 45 deletions cmd/fuego/templates/controller.template

This file was deleted.

82 changes: 82 additions & 0 deletions cmd/fuego/templates/controller/controller.go
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Renommé parce que comme ça on est sûrs de pas faire de bêtises, on a le formattting, les imports etc...

Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package controller

import (
"github.com/go-fuego/fuego"
)

type NewControllerRessources struct {
// TODO add ressources
NewControllerService NewControllerService
}

type NewController struct {
ID string `json:"id"`
Name string `json:"name"`
}

type NewControllerCreate struct {
Name string `json:"name"`
}

type NewControllerUpdate struct {
Name string `json:"name"`
}

func (rs NewControllerRessources) Routes(s *fuego.Server) {
newControllerGroup := fuego.Group(s, "/newController")

fuego.Get(newControllerGroup, "/", rs.getAllNewController)
fuego.Post(newControllerGroup, "/", rs.postNewController)

fuego.Get(newControllerGroup, "/{id}", rs.getNewController)
fuego.Put(newControllerGroup, "/{id}", rs.putNewController)
fuego.Delete(newControllerGroup, "/{id}", rs.deleteNewController)
}

func (rs NewControllerRessources) getAllNewController(c fuego.ContextNoBody) ([]NewController, error) {
return rs.NewControllerService.GetAllNewController()
}

func (rs NewControllerRessources) postNewController(c *fuego.ContextWithBody[NewControllerCreate]) (NewController, error) {
body, err := c.Body()
if err != nil {
return NewController{}, err
}

new, err := rs.NewControllerService.CreateNewController(body)
if err != nil {
return NewController{}, err
}

return new, nil
}

func (rs NewControllerRessources) getNewController(c fuego.ContextNoBody) (NewController, error) {
return rs.NewControllerService.GetNewController(c.PathParam("id"))
}

func (rs NewControllerRessources) putNewController(c *fuego.ContextWithBody[NewControllerUpdate]) (NewController, error) {
body, err := c.Body()
if err != nil {
return NewController{}, err
}

new, err := rs.NewControllerService.UpdateNewController(c.PathParam("id"), body)
if err != nil {
return NewController{}, err
}

return new, nil
}

func (rs NewControllerRessources) deleteNewController(c *fuego.ContextNoBody) (any, error) {
return rs.NewControllerService.DeleteNewController(c.PathParam("id"))
}

type NewControllerService interface {
GetNewController(id string) (NewController, error)
CreateNewController(NewControllerCreate) (NewController, error)
GetAllNewController() ([]NewController, error)
UpdateNewController(id string, input NewControllerUpdate) (NewController, error)
DeleteNewController(id string) (any, error)
Comment on lines +77 to +81
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'ai rajouté un corps aux fonctions et les signatures d'interface :

Comme ça, plus qu'à implémenter les interfaces (faire la partie BDD) et on a notre CRUD fini !

}
2 changes: 1 addition & 1 deletion cmd/fuego/templates/embed.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ import (
"embed"
)

//go:embed *.template
//go:embed */*.go
var FS embed.FS
Loading