feat(blogo)!: add not found and template error as fallbacks

This commit is contained in:
Guz
2025-01-27 11:46:27 -03:00
parent e83dcad23f
commit b31fa5ca85

View File

@@ -16,6 +16,7 @@
package blogo
import (
"html/template"
"io"
"log/slog"
"net/http"
@@ -26,6 +27,15 @@ import (
"forge.capytal.company/loreddev/x/tinyssert"
)
var defaultNotFoundTemplate = template.Must(
template.New("not-found").Parse("404: Blog post {{.Path}} not found"),
)
var defaultInternalErrTemplate = template.Must(
template.New("internal-err").
Parse("500: Failed to get blog post {{.Path}} due to error {{.ErrorMsg}}\n{{.Error}}"),
)
func New(opts ...Opts) Blogo {
opt := Opts{}
if len(opts) > 0 {
@@ -65,10 +75,32 @@ func New(opts ...Opts) Blogo {
}
if opt.FallbackErrorHandler == nil {
opt.FallbackErrorHandler = plugins.NewLoggerErrorHandler(
opt.Logger.WithGroup("errors"),
slog.LevelError,
)
logger := opt.Logger.WithGroup("errors")
f := plugins.NewMultiErrorHandler(plugins.MultiErrorHandlerOpts{
Assertions: opt.Assertions,
Logger: logger,
})
f.Use(plugins.NewNotFoundErrorHandler(
*defaultNotFoundTemplate,
plugins.TemplateErrorHandlerOpts{
Assertions: opt.Assertions,
Logger: logger.WithGroup("not-found"),
},
))
f.Use(plugins.NewTemplateErrorHandler(
*defaultNotFoundTemplate,
plugins.TemplateErrorHandlerOpts{
Assertions: opt.Assertions,
Logger: logger.WithGroup("internal-err"),
},
))
f.Use(plugins.NewLoggerErrorHandler(logger.WithGroup("logger"), slog.LevelError))
opt.FallbackErrorHandler = f
}
if opt.MultiErrorHandler == nil {
opt.MultiErrorHandler = plugins.NewMultiErrorHandler(plugins.MultiErrorHandlerOpts{