aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-03-07 16:15:34 +0530
committerBobby <[email protected]>2026-03-07 16:15:34 +0530
commit6dd57549df7b6679a1aa9888f4d59edaaec5b3f9 (patch)
tree05b37b22e659cfb5f8b97b12abf857f22df4f2be /utils
parent1f3a99dcc410f31ac247b55ae9880f6045ab46b4 (diff)
downloaddove-6dd57549df7b6679a1aa9888f4d59edaaec5b3f9.tar.xz
dove-6dd57549df7b6679a1aa9888f4d59edaaec5b3f9.zip
feat: implement request handling and dashboard features with new tags and utilities
Diffstat (limited to 'utils')
-rw-r--r--utils/meta/builder.go20
-rw-r--r--utils/meta/constants.go6
-rw-r--r--utils/meta/functions.go53
-rw-r--r--utils/meta/request.go43
-rw-r--r--utils/meta/types.go17
-rw-r--r--utils/meta/value.go30
6 files changed, 169 insertions, 0 deletions
diff --git a/utils/meta/builder.go b/utils/meta/builder.go
new file mode 100644
index 0000000..4ae2648
--- /dev/null
+++ b/utils/meta/builder.go
@@ -0,0 +1,20 @@
+package meta
+
+import (
+ "dove/types"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+func BuildRequest(context *fiber.Ctx) types.Request {
+ return types.Request{
+ Path: context.Path(),
+ Method: context.Method(),
+ Query: buildQueryParams(context),
+ Params: buildRouteParams(context),
+ Headers: buildHeaders(context),
+ QueryString: string(context.Request().URI().QueryString()),
+ IP: context.IP(),
+ URL: context.OriginalURL(),
+ }
+}
diff --git a/utils/meta/constants.go b/utils/meta/constants.go
new file mode 100644
index 0000000..3f2ce68
--- /dev/null
+++ b/utils/meta/constants.go
@@ -0,0 +1,6 @@
+package meta
+
+const (
+ LOG_PREFIX = "Meta"
+ REQUEST_KEY = "__request"
+)
diff --git a/utils/meta/functions.go b/utils/meta/functions.go
new file mode 100644
index 0000000..0b8f309
--- /dev/null
+++ b/utils/meta/functions.go
@@ -0,0 +1,53 @@
+package meta
+
+import (
+ "dove/types"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+func findParam(params []types.Param, key string) (string, bool) {
+ for _, param := range params {
+ if param.Key == key {
+ return param.Value, true
+ }
+ }
+
+ return "", false
+}
+
+func buildQueryParams(context *fiber.Ctx) []types.Param {
+ params := make([]types.Param, 0)
+ context.Request().URI().QueryArgs().VisitAll(func(name []byte, paramValue []byte) {
+ params = append(params, types.Param{
+ Key: string(name),
+ Value: string(paramValue),
+ })
+ })
+
+ return params
+}
+
+func buildRouteParams(context *fiber.Ctx) []types.Param {
+ params := make([]types.Param, 0)
+ for name, routeValue := range context.AllParams() {
+ params = append(params, types.Param{
+ Key: name,
+ Value: routeValue,
+ })
+ }
+
+ return params
+}
+
+func buildHeaders(context *fiber.Ctx) []types.Param {
+ params := make([]types.Param, 0)
+ context.Request().Header.VisitAll(func(name []byte, headerValue []byte) {
+ params = append(params, types.Param{
+ Key: string(name),
+ Value: string(headerValue),
+ })
+ })
+
+ return params
+}
diff --git a/utils/meta/request.go b/utils/meta/request.go
new file mode 100644
index 0000000..3098970
--- /dev/null
+++ b/utils/meta/request.go
@@ -0,0 +1,43 @@
+package meta
+
+import (
+ "dove/messages"
+ "dove/types"
+ "dove/utils/logger"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+func Request(context *fiber.Ctx) request {
+ data, ok := context.Locals(REQUEST_KEY).(types.Request)
+ if !ok {
+ logger.Errorf(LOG_PREFIX, messages.MetaRequestContextMissing)
+ return request{}
+ }
+
+ return request{
+ Request: data,
+ context: context,
+ }
+}
+
+func (self request) Param(key string) value {
+ if self.context != nil {
+ result := self.context.Params(key)
+ if result != "" {
+ return value{data: result, found: true}
+ }
+ }
+
+ return value{}
+}
+
+func (self request) Query(key string) value {
+ result, found := findParam(self.Request.Query, key)
+ return value{data: result, found: found}
+}
+
+func (self request) Header(key string) value {
+ result, found := findParam(self.Request.Headers, key)
+ return value{data: result, found: found}
+}
diff --git a/utils/meta/types.go b/utils/meta/types.go
new file mode 100644
index 0000000..8aa710f
--- /dev/null
+++ b/utils/meta/types.go
@@ -0,0 +1,17 @@
+package meta
+
+import (
+ "dove/types"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+type request struct {
+ types.Request
+ context *fiber.Ctx
+}
+
+type value struct {
+ data string
+ found bool
+}
diff --git a/utils/meta/value.go b/utils/meta/value.go
new file mode 100644
index 0000000..fb90500
--- /dev/null
+++ b/utils/meta/value.go
@@ -0,0 +1,30 @@
+package meta
+
+import (
+ "dove/messages"
+ "dove/utils/logger"
+)
+
+func (self value) String() string {
+ return self.data
+}
+
+func (self value) Exists() bool {
+ return self.found
+}
+
+func (self value) Or(fallback string) string {
+ if self.found {
+ return self.data
+ }
+
+ return fallback
+}
+
+func (self value) Required() string {
+ if !self.found {
+ logger.Errorf(LOG_PREFIX, messages.MetaRequiredValueMissing)
+ }
+
+ return self.data
+}