75 lines
1.6 KiB
Go
75 lines
1.6 KiB
Go
package middleware
|
|
|
|
import (
|
|
"errors"
|
|
mcontext "github.com/abelith/gomax/v1/context"
|
|
"github.com/abelith/gomax/v1/core"
|
|
merrors "github.com/abelith/gomax/v1/errors"
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
func MwPanicHandler() core.Middleware {
|
|
return func(next core.HandlerFunc) core.HandlerFunc {
|
|
return func(c *mcontext.Context) error {
|
|
defer func() {
|
|
p := recover()
|
|
if p != nil {
|
|
log.Fatal().Any("panic", p)
|
|
}
|
|
}()
|
|
return next(c)
|
|
}
|
|
}
|
|
}
|
|
|
|
func MwErrorResponder(defaultMsg string) core.Middleware {
|
|
return func(next core.HandlerFunc) core.HandlerFunc {
|
|
return func(c *mcontext.Context) error {
|
|
err := next(c)
|
|
var maxErr *merrors.GoMaxError
|
|
|
|
if errors.As(err, &maxErr) {
|
|
return c.Respond(maxErr.Message)
|
|
}
|
|
|
|
if err != nil {
|
|
return c.Respond(defaultMsg)
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
}
|
|
|
|
func MwLoggerInjector(logger zerolog.Logger) core.Middleware {
|
|
return func(next core.HandlerFunc) core.HandlerFunc {
|
|
return func(c *mcontext.Context) error {
|
|
ctx := logger.With().Int64("user_id", c.Update().UserID).
|
|
Logger().WithContext(c.Context())
|
|
c.SetContext(ctx)
|
|
return next(c)
|
|
}
|
|
}
|
|
}
|
|
|
|
func MwDebugState() core.Middleware {
|
|
return func(next core.HandlerFunc) core.HandlerFunc {
|
|
return func(c *mcontext.Context) error {
|
|
log.Debug().Any("state", c.State()).Any("update", c.Update()).Send()
|
|
return next(c)
|
|
}
|
|
}
|
|
}
|
|
|
|
func MwErrorLogger() core.Middleware {
|
|
return func(next core.HandlerFunc) core.HandlerFunc {
|
|
return func(c *mcontext.Context) error {
|
|
if err := next(c); err != nil {
|
|
log.Ctx(c).Err(err).Send()
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
}
|