Files
2025-04-25 15:21:04 +03:00

68 lines
1.2 KiB
Go

package universe_badger
import (
"context"
"github.com/dgraph-io/badger/v4"
"go.uber.org/fx"
"go.uber.org/zap"
um "universe.mrlokop.dev/core/modules"
kv "universe.mrlokop.dev/key_value"
)
type moduleConfig struct {
Path string
}
const (
kind = "universe:badger"
)
var (
Module = um.SimpleModule(kind, func(ctx um.ModuleFactoryContext) error {
cfg := &moduleConfig{}
err := ctx.ExtractConfig(cfg)
if err != nil {
return err
}
ctx.Provide(fx.Annotate(func(
logger *zap.Logger,
lc fx.Lifecycle,
) (*badger.DB, error) {
var (
ll = ctx.ConfigureLogger(logger)
opts = badger.DefaultOptions(cfg.Path)
)
if cfg.Path == "" {
opts.WithInMemory(true)
}
opts.WithLogger(&zapRedirectingLogger{target: ll})
db, err := badger.Open(opts)
if err != nil {
return nil, err
}
lc.Append(fx.Hook{
OnStop: func(ctx context.Context) error {
ll.Debug("Closing Badger DB")
return db.Close()
},
})
return db, nil
}, fx.ResultTags(ctx.NameTag())))
ctx.Provide(fx.Annotate(func(
badger *badger.DB,
logger *zap.Logger,
) kv.KeyValueProvider {
return &keyValueProvider{}
}, fx.ParamTags(ctx.NameTag()), fx.ResultTags(ctx.NameTag())))
return nil
})
)