Skip to content

Commit

Permalink
Edited code comments
Browse files Browse the repository at this point in the history
  • Loading branch information
JanGalek committed Dec 19, 2024
1 parent 7500fd5 commit 077f856
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 89 deletions.
4 changes: 1 addition & 3 deletions errorMiddleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,10 @@ import (

func ErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
c.Next() // Pokračuj v zpracování požadavku
c.Next()

// Získání statusu odpovědi
statusCode := c.Writer.Status()

// Pokud je status chybový (4xx nebo 5xx), přepíšeme odpověď
if statusCode >= 400 {
switch statusCode {
case http.StatusNotFound:
Expand Down
66 changes: 66 additions & 0 deletions mode.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package router

import "github.com/gin-gonic/gin"

func (r *Router) IsDebug() bool {
return IsDebug()
}

func (r *Router) EnableDebug() {
EnableDebug()
}
func (r *Router) IsTest() bool {
return IsTest()
}

func (r *Router) EnableTest() {
EnableTest()
}
func (r *Router) IsRelease() bool {
return IsRelease()
}

func (r *Router) EnableRelease() {
EnableRelease()
}

func (r *Router) SetMode(mode string) *Router {
gin.SetMode(mode)
return r
}

func SetMode(mode string) {
gin.SetMode(mode)
}

func GetMode() string {
return gin.Mode()
}

func (r *Router) GetMode() string {
return GetMode()
}

func IsDebug() bool {
return gin.IsDebugging()
}

func EnableDebug() {
SetMode(DebugMode)
}

func IsTest() bool {
return gin.Mode() == TestMode
}

func EnableTest() {
SetMode(TestMode)
}

func IsRelease() bool {
return gin.Mode() == ReleaseMode
}

func EnableRelease() {
SetMode(ReleaseMode)
}
4 changes: 1 addition & 3 deletions paramBinder.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,15 @@ func BindStruct[T any](c *gin.Context) (T, error) {
var dto T
val := reflect.ValueOf(&dto).Elem()

// Pro každý field ve struktuře provedeme bind
for i := 0; i < val.NumField(); i++ {
field := val.Type().Field(i)
paramName := field.Tag.Get("param") // Získá hodnotu z tagu `param`
paramName := field.Tag.Get("param")

if paramName != "" {
paramValue := c.Param(paramName)
fieldValue := val.Field(i)

if fieldValue.CanSet() {
// Podle typu hodnoty provedeme správné nastavení
switch fieldValue.Kind() {
case reflect.String:
fieldValue.SetString(paramValue)
Expand Down
74 changes: 3 additions & 71 deletions router.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ func (r *Router) AddRouteList(l *RouteList) *Router {
group = r.router.Group(l.pattern)
}

// Přidej všechny routy do skupiny nebo root routeru
for _, route := range l.routes {
if group != nil {
createNativeRoute(*group, route)
Expand All @@ -124,8 +123,7 @@ func (r *Router) AddRouteList(l *RouteList) *Router {
}
}

// Rekurzivně přidej děti
if l.children != nil { // Ověříme, že ukazatel na děti není nil
if l.children != nil {
for _, child := range l.children {
r.AddRouteList(child)
}
Expand All @@ -142,7 +140,6 @@ func createNativeRoute(g gin.RouterGroup, route *Route) gin.IRoutes {
// createHandlerFunc internal, create gin.HandlerFunc
func createHandlerFunc(handler interface{}) gin.HandlerFunc {
return func(c *gin.Context) {
// Získáme typ parametru druhého argumentu handleru
handlerType := reflect.TypeOf(handler)
if handlerType.Kind() != reflect.Func || handlerType.NumIn() != 2 {

Expand All @@ -152,22 +149,20 @@ func createHandlerFunc(handler interface{}) gin.HandlerFunc {
return
}

// Vytvoříme nový prázdný objekt pro data
paramType := handlerType.In(1) // Druhý parametr handleru (T)
paramType := handlerType.In(1) // Second param of handler (T)
if paramType.Kind() != reflect.Ptr {
panic(fmt.Sprintf("Handler parameter must be a pointer to a struct, got %v", paramType.Kind()))
}
paramElemType := paramType.Elem()
paramValue := reflect.New(paramElemType).Interface()

// Bindujeme data z požadavku do struktury
err := c.ShouldBindUri(paramValue)
if err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}

// Zavoláme handler s bindenou strukturou
// Call handler with binded struct
reflect.ValueOf(handler).Call([]reflect.Value{
reflect.ValueOf(c),
reflect.ValueOf(paramValue),
Expand Down Expand Up @@ -424,66 +419,3 @@ func (r *Router) Run(addr string) {
return
}
}

func SetMode(mode string) {
gin.SetMode(mode)
}

func (r *Router) SetMode(mode string) *Router {
gin.SetMode(mode)
return r
}

func GetMode() string {
return gin.Mode()
}

func (r *Router) GetMode() string {
return GetMode()
}

func IsDebug() bool {
return gin.IsDebugging()
}

func EnableDebug() {
SetMode(DebugMode)
}

func IsTest() bool {
return gin.Mode() == TestMode
}

func EnableTest() {
SetMode(TestMode)
}

func IsRelease() bool {
return gin.Mode() == ReleaseMode
}

func EnableRelease() {
SetMode(ReleaseMode)
}

func (r *Router) IsDebug() bool {
return IsDebug()
}

func (r *Router) EnableDebug() {
EnableDebug()
}
func (r *Router) IsTest() bool {
return IsTest()
}

func (r *Router) EnableTest() {
EnableTest()
}
func (r *Router) IsRelease() bool {
return IsRelease()
}

func (r *Router) EnableRelease() {
EnableRelease()
}
6 changes: 1 addition & 5 deletions tests/router_errorHandlers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,10 @@ import (
)

func TestRouterErrorHandlers(t *testing.T) {
// Nastavíme Gin do testovacího režimu
gin.SetMode(gin.TestMode)

// Vytvoření nového routeru
router := router2.NewRouter()

// Nastavení vlastních handlerů pro testování
router.SetErrorHandler(http.StatusNotFound, func(c *gin.Context) {
c.JSON(http.StatusNotFound, gin.H{
"error": "Custom 404",
Expand All @@ -29,7 +26,6 @@ func TestRouterErrorHandlers(t *testing.T) {
})
})

// Definice rout pro testování
router.AddRouteGet("ok", "/ok", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "This is OK"})
})
Expand Down Expand Up @@ -79,7 +75,7 @@ func TestRouterErrorHandlers(t *testing.T) {
assert.JSONEq(t, `{"error":"Custom 500"}`, w.Body.String())
})

// Test: Neznámá cesta (status 404)
// Test: unknown route (status 404)
t.Run("Test Unknown Route", func(t *testing.T) {
req := httptest.NewRequest(http.MethodGet, "/unknown", nil)
w := httptest.NewRecorder()
Expand Down
10 changes: 3 additions & 7 deletions url.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,25 @@ import (
)

func GenerateUrlByPattern(pattern string, params map[string]interface{}) (string, error) {
// Předpokládáme, že pattern může obsahovat parametry jako :id
var urlBuilder strings.Builder
isFirst := true

// Rozdělíme pattern podle / pro iteraci
parts := strings.Split(pattern, "/")
for _, part := range parts {
if strings.HasPrefix(part, ":") {
// Pokud je část patternu parametr (např. :id), hledáme jeho hodnotu v params
paramName := part[1:] // Odstraníme ':'

paramName := part[1:] // Remove ':'
if value, exists := params[paramName]; exists {
if !isFirst {
urlBuilder.WriteString("/")
}
// Přidáme hodnotu parametru do URL

urlBuilder.WriteString(fmt.Sprintf("%v", value))
isFirst = false
} else {
// Pokud parametr v params neexistuje, vrátíme chybu
return "", fmt.Errorf("missing value for parameter: %s", paramName)
}
} else {
// Pokud část patternu není parametr, přidáme ji přímo do URL
if !isFirst {
urlBuilder.WriteString("/")
}
Expand Down

0 comments on commit 077f856

Please sign in to comment.