diff options
| author | Bobby <[email protected]> | 2026-03-03 16:32:30 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-03-03 16:32:30 +0530 |
| commit | 8631dd7420c35ce8c8b7da5f19eb4b516abcddc3 (patch) | |
| tree | 2f4527eda31d5275fb3e38255184de27eee38af4 | |
| parent | 471758d1eb63c550c644b9233d04473adde962e8 (diff) | |
| download | pagoda-8631dd7420c35ce8c8b7da5f19eb4b516abcddc3.tar.xz pagoda-8631dd7420c35ce8c8b7da5f19eb4b516abcddc3.zip | |
feat(config): add CORS origins configuration to server struct
refactor(database): remove unused database drivers
fix(middleware): use constant for request context key
refactor(router): clean up import statement for controllers
fix(main): use CORS origins from config
refactor(env): simplify environment variable handling for uint fields
refactor(meta): update request context key to use constant
| -rw-r--r-- | shrine/config/env.go | 9 | ||||
| -rw-r--r-- | shrine/enums/database.go | 6 | ||||
| -rw-r--r-- | shrine/middleware/request.go | 4 | ||||
| -rw-r--r-- | shrine/router/router.go | 2 | ||||
| -rw-r--r-- | shrine/shrine/main.go | 3 | ||||
| -rw-r--r-- | shrine/utils/env/functions.go | 32 | ||||
| -rw-r--r-- | shrine/utils/env/setter.go | 50 | ||||
| -rw-r--r-- | shrine/utils/meta/request.go | 4 |
8 files changed, 19 insertions, 91 deletions
diff --git a/shrine/config/env.go b/shrine/config/env.go index bb5567b..f48cd90 100644 --- a/shrine/config/env.go +++ b/shrine/config/env.go @@ -1,10 +1,11 @@ package config type server struct { - Host string `env:"HOST" default:"0.0.0.0"` - Port int `env:"PORT" default:"3000"` - Secret string `env:"SECRET" default:"pagoda-secret"` - Debug bool `env:"DEBUG" default:"false"` + Host string `env:"HOST" default:"0.0.0.0"` + Port int `env:"PORT" default:"3000"` + Secret string `env:"SECRET" default:"pagoda-secret"` + Debug bool `env:"DEBUG" default:"false"` + CorsOrigins string `env:"CORS_ORIGINS" default:"*"` } type database struct { diff --git a/shrine/enums/database.go b/shrine/enums/database.go index d8fff0b..d57ef13 100644 --- a/shrine/enums/database.go +++ b/shrine/enums/database.go @@ -3,8 +3,6 @@ package enums type DatabaseDriver string const ( - SQLite DatabaseDriver = "sqlite" - MySQL DatabaseDriver = "mysql" - Postgres DatabaseDriver = "postgres" - SQLServer DatabaseDriver = "sqlserver" + SQLite DatabaseDriver = "sqlite" + Postgres DatabaseDriver = "postgres" ) diff --git a/shrine/middleware/request.go b/shrine/middleware/request.go index a9a1cd8..2577f16 100644 --- a/shrine/middleware/request.go +++ b/shrine/middleware/request.go @@ -6,12 +6,10 @@ import ( "github.com/gofiber/fiber/v2" ) -const requestKey = "__request_ctx" - func request() fiber.Handler { return func(c *fiber.Ctx) error { req := meta.BuildRequest(c) - c.Locals(requestKey, req) + c.Locals(meta.RequestKey, req) return c.Next() } } diff --git a/shrine/router/router.go b/shrine/router/router.go index 4f1da5d..b92aecb 100644 --- a/shrine/router/router.go +++ b/shrine/router/router.go @@ -1,7 +1,7 @@ package router import ( - controllers "shrine/controllers" + "shrine/controllers" "shrine/utils/urls" "github.com/gofiber/fiber/v2" diff --git a/shrine/shrine/main.go b/shrine/shrine/main.go index 45ca105..f82d46e 100644 --- a/shrine/shrine/main.go +++ b/shrine/shrine/main.go @@ -19,9 +19,10 @@ import ( func main() { app := fiber.New(fiber.Config{ DisableStartupMessage: true, + ErrorHandler: router.ErrorHandler, }) app.Use(cors.New(cors.Config{ - AllowOrigins: "*", + AllowOrigins: config.Server.CorsOrigins, AllowMethods: "GET, HEAD, PUT, PATCH, POST, DELETE, OPTIONS", AllowHeaders: "Origin, Content-Type, Accept, Authorization, X-Requested-With, X-API-Key, X-CSRF-Token", ExposeHeaders: "Content-Length, Content-Type, Content-Disposition, X-Pagination, X-Total-Count", diff --git a/shrine/utils/env/functions.go b/shrine/utils/env/functions.go index de03793..12b57e2 100644 --- a/shrine/utils/env/functions.go +++ b/shrine/utils/env/functions.go @@ -2,7 +2,6 @@ package env import ( "os" - "reflect" "strconv" "strings" "time" @@ -66,32 +65,11 @@ func getEnvStringSlice(key string, defaultVal []string) []string { return defaultVal } -func Defaults[T any](config *T) *T { - v := reflect.ValueOf(config) - if v.Kind() != reflect.Ptr || v.Elem().Kind() != reflect.Struct { - return config - } - - elem := v.Elem() - t := elem.Type() - newStruct := reflect.New(t) - newElem := newStruct.Elem() - - for i := range elem.NumField() { - field := newElem.Field(i) - fieldType := t.Field(i) - - if !field.CanSet() { - continue - } - - defaultVal := fieldType.Tag.Get("default") - if defaultVal == "" { - continue +func getEnvUint(key string, defaultVal uint64) uint64 { + if value := os.Getenv(key); value != "" { + if parsed, err := strconv.ParseUint(value, 10, 64); err == nil { + return parsed } - - setFieldDefault(field, defaultVal) } - - return newStruct.Interface().(*T) + return defaultVal } diff --git a/shrine/utils/env/setter.go b/shrine/utils/env/setter.go index 8b53a1d..4aad059 100644 --- a/shrine/utils/env/setter.go +++ b/shrine/utils/env/setter.go @@ -1,7 +1,6 @@ package env import ( - "os" "reflect" "strconv" "strings" @@ -32,13 +31,7 @@ func setFieldFromEnv(field reflect.Value, envKey, defaultVal string) { } func setUintField(field reflect.Value, envKey string, defaultVal uint64) { - if value := os.Getenv(envKey); value != "" { - if parsed, err := strconv.ParseUint(value, 10, 64); err == nil { - field.SetUint(parsed) - return - } - } - field.SetUint(defaultVal) + field.SetUint(getEnvUint(envKey, defaultVal)) } func setDurationField(field reflect.Value, envKey, defaultVal string) { @@ -64,44 +57,3 @@ func setSliceField(field reflect.Value, envKey, defaultVal string) { field.Set(reflect.ValueOf(result)) } } - -func setFieldDefault(field reflect.Value, defaultVal string) { - switch field.Kind() { - case reflect.String: - field.SetString(defaultVal) - case reflect.Bool: - if defaultBool, err := strconv.ParseBool(defaultVal); err == nil { - field.SetBool(defaultBool) - } - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - if defaultInt, err := strconv.ParseInt(defaultVal, 10, 64); err == nil { - field.SetInt(defaultInt) - } - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: - if defaultUint, err := strconv.ParseUint(defaultVal, 10, 64); err == nil { - field.SetUint(defaultUint) - } - case reflect.Float32, reflect.Float64: - if defaultFloat, err := strconv.ParseFloat(defaultVal, 64); err == nil { - field.SetFloat(defaultFloat) - } - case reflect.Slice: - if field.Type().Elem().Kind() == reflect.String && defaultVal != "" { - parts := strings.Split(defaultVal, ",") - result := make([]string, 0, len(parts)) - for _, part := range parts { - trimmed := strings.TrimSpace(part) - if trimmed != "" { - result = append(result, trimmed) - } - } - field.Set(reflect.ValueOf(result)) - } - default: - if field.Type() == reflect.TypeFor[time.Duration]() { - if defaultDuration, err := time.ParseDuration(defaultVal); err == nil { - field.Set(reflect.ValueOf(defaultDuration)) - } - } - } -} diff --git a/shrine/utils/meta/request.go b/shrine/utils/meta/request.go index d2ae242..7e499e7 100644 --- a/shrine/utils/meta/request.go +++ b/shrine/utils/meta/request.go @@ -7,10 +7,10 @@ import ( "github.com/gofiber/fiber/v2" ) -const requestKey = "__request_ctx" +const RequestKey = "__request_ctx" func Request(c *fiber.Ctx) facade { - req, ok := c.Locals(requestKey).(types.Request) + req, ok := c.Locals(RequestKey).(types.Request) if !ok { logger.Errorf("META", "RequestContext missing in fiber locals") return facade{} |
