Skip to content

Commit d3cdcd1

Browse files
authored
Merge pull request #21 from RobyFerro/cmd-show-routes
Cmd show routes
2 parents 62a8671 + 9caa5ef commit d3cdcd1

File tree

9 files changed

+144
-60
lines changed

9 files changed

+144
-60
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ All notable changes to the "Go-Web Framework" will be documented in this file.
44

55
## [Unreleased]
66

7+
## [v0.8.1-beta] - 2021-09-03
8+
### Added
9+
- New show routes command
10+
11+
### Changed
12+
- Middleware architecture
13+
714
## [v0.8.0-beta] - 2021-09-02
815
### Changed
916
- Abstract CLI command structure

cli/raw/middleware.raw

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,21 @@ func (@@TMP@@Middleware) Handle(next http.Handler) http.Handler {
1515
// Do stuff here
1616
})
1717
}
18+
19+
// GetName returns the middleware name
20+
func (m *@@TMP@@Middleware) GetName() string {
21+
return m.Name
22+
}
23+
24+
// GetDescription returns the middleware description
25+
func (m *@@TMP@@Middleware) GetDescription() string {
26+
return m.Description
27+
}
28+
29+
func New@@TMP@@Middleware() @@TMP@@Middleware{
30+
return @@TMP@@Middleware{
31+
Name: "REPLACE WITH YOUR MIDDLEWARE NAME",
32+
Description: "REPLACE WITH YOUR MIDDLEWARE DESCRIPTION",
33+
}
34+
}
35+

cli/router_show.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package cli
2+
3+
import (
4+
"fmt"
5+
"github.com/RobyFerro/go-web-framework/register"
6+
"github.com/olekukonko/tablewriter"
7+
"os"
8+
"strings"
9+
)
10+
11+
type RouterShow struct {
12+
register.Command
13+
}
14+
15+
func (c *RouterShow) Register() {
16+
c.Signature = "router:show"
17+
c.Description = "Show all available routes"
18+
}
19+
20+
func (c *RouterShow) Run(routes []register.HTTPRouter) {
21+
table := tablewriter.NewWriter(os.Stdout)
22+
table.SetHeader([]string{"PATH", "METHOD", "DESCRIPTION", "MIDDLEWARES"})
23+
for _, router := range routes {
24+
parseRoutes(router.Route, table, nil)
25+
parseGroups(router.Groups, table)
26+
}
27+
28+
table.Render()
29+
}
30+
31+
func parseGroups(groups []register.Group, table *tablewriter.Table) {
32+
for _, group := range groups {
33+
parseRoutes(group.Routes, table, &group.Prefix)
34+
}
35+
}
36+
37+
func parseRoutes(routes []register.Route, table *tablewriter.Table, prefix *string) {
38+
for _, r := range routes {
39+
middlewares := getMiddlewareString(&r.Middleware)
40+
if prefix != nil {
41+
r.Path = fmt.Sprintf("%s%s", *prefix, r.Path)
42+
}
43+
44+
table.Append([]string{r.Path, r.Method, r.Description, middlewares})
45+
}
46+
}
47+
48+
func getMiddlewareString(middlewares *[]register.Middleware) string {
49+
var list []string
50+
for _, m := range *middlewares {
51+
list = append(list, fmt.Sprintf("%s", m.GetName()))
52+
}
53+
54+
return strings.Join(list, ",")
55+
}

kernel/register.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var (
2121
"migration:rollback": &cli.MigrateRollback{},
2222
"migration:up": &cli.MigrationUp{},
2323
"model:create": &cli.ModelCreate{},
24+
"router:show": &cli.RouterShow{},
2425
// Here is where you've to register your custom controller
2526
}
2627
SingletonServices = register.ServiceRegister{

register/cli.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package register
2+
3+
// CommandRegister defines all registered commands
4+
type CommandRegister map[string]interface{}
5+
6+
// Command is used to define a CLI command
7+
type Command struct {
8+
Signature string
9+
Description string
10+
Args string
11+
}

register/generic.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package register
2+
3+
// ServiceRegister defines a controller register type.
4+
// This will be used to resolve this register in service container
5+
type ServiceRegister []interface{}
6+
7+
// ModelRegister defines a controller register type.
8+
// This will be used to resolve this register in service container
9+
type ModelRegister []interface{}
10+
11+
// ControllerRegister defines a controller register type.
12+
// This will be used to resolve this register in service container
13+
type ControllerRegister []interface{}

register/middleware.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package register
2+
3+
import "net/http"
4+
5+
// Middleware define an interface used to handle all application middleware
6+
type Middleware interface {
7+
Handle(next http.Handler) http.Handler
8+
GetName() string
9+
GetDescription() string
10+
}
11+
12+
// MiddlewareRegister defines all middleware present in your web application
13+
type MiddlewareRegister []interface{}

register/router.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package register
2+
3+
// Route defines an HTTP Router endpoint
4+
type Route struct {
5+
Name string
6+
Path string
7+
Action string
8+
Method string
9+
Description string
10+
Validation interface{}
11+
Middleware []Middleware
12+
}
13+
14+
// Group defines a group of HTTP Route
15+
type Group struct {
16+
Name string
17+
Prefix string
18+
Routes []Route
19+
Middleware []Middleware
20+
}
21+
22+
// HTTPRouter contains Route and Group that defines a complete HTTP Router
23+
type HTTPRouter struct {
24+
Route []Route
25+
Groups []Group
26+
}

register/types.go

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)