68 lines
1.2 KiB
Go
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
|