vibeStonk/server/routes/route.go
2025-06-12 16:57:42 -04:00

68 lines
1.2 KiB
Go

package routes
import (
"errors"
"github.com/labstack/echo/v4"
models "vibeStonk/server/models/v1"
)
type Provider interface {
Provide(middlewares *SystemMiddleware) []*Route
}
type Route struct {
Endpoint Endpoint
Method string
HandlerFn echo.HandlerFunc
Middleware []echo.MiddlewareFunc
}
// region Endpoint
type Endpoint string
func (e Endpoint) String() string {
return string(e)
}
func endpoint(endpoint string) Endpoint {
return Endpoint("/api/v1" + endpoint)
}
// endregion
// region request context
const requestContextKey = "request_context"
var (
ErrNoRequestContext = errors.New("no request context found")
ErrBadRequestContext = errors.New("context found, but wrong type")
)
type RequestContext struct {
User *models.User
}
func newRequestContext(c echo.Context, user *models.User) {
ctx := &RequestContext{
User: user,
}
c.Set(requestContextKey, ctx)
}
func GetRequestContext(c echo.Context) (*RequestContext, error) {
ctxInterface := c.Get(requestContextKey)
if ctxInterface == nil {
return nil, ErrNoRequestContext
}
ctx, ok := ctxInterface.(*RequestContext)
if !ok {
return nil, ErrBadRequestContext
}
return ctx, nil
}
// endregion