mirror of
https://github.com/bitmagnet-io/bitmagnet.git
synced 2026-08-02 01:13:44 -04:00
77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
package postgres
|
|
|
|
import (
|
|
"github.com/bitmagnet-io/bitmagnet/internal/database"
|
|
"github.com/bitmagnet-io/bitmagnet/internal/database/healthcheck"
|
|
"github.com/bitmagnet-io/bitmagnet/internal/health"
|
|
"github.com/bitmagnet-io/bitmagnet/internal/plugin/builder"
|
|
"github.com/bitmagnet-io/bitmagnet/internal/ref"
|
|
"github.com/bitmagnet-io/bitmagnet/internal/workers/runner"
|
|
"github.com/bitmagnet-io/bitmagnet/internal/workers/worker"
|
|
"github.com/bitmagnet-io/bitmagnet/pkg/plugin"
|
|
"go.uber.org/fx"
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type deps struct {
|
|
fx.In
|
|
Provider database.RunnerProvider
|
|
}
|
|
|
|
var (
|
|
Ref = ref.Root.MustSub("postgres")
|
|
|
|
Plugin = builder.NewPlugin(
|
|
Ref,
|
|
builder.WithDescription[deps]("Initiates and manages the Postgres database connection"),
|
|
builder.WithActivation[deps](plugin.ActivationAlways),
|
|
builder.WithConfig[deps](Ref.MustSub("dsn"), ParamDSN),
|
|
builder.WithConfig[deps](Ref.MustSub("host"), ParamHost),
|
|
builder.WithConfig[deps](Ref.MustSub("port"), ParamPort),
|
|
builder.WithConfig[deps](Ref.MustSub("user"), ParamUser),
|
|
builder.WithConfig[deps](Ref.MustSub("password"), ParamPassword),
|
|
builder.WithConfig[deps](Ref.MustSub("database"), ParamDatabase),
|
|
builder.WithFxOption[deps](
|
|
fx.Provide(
|
|
fx.Annotate(
|
|
func(
|
|
plugins []gorm.Plugin,
|
|
) []gorm.Plugin {
|
|
return plugins
|
|
},
|
|
fx.ParamTags(`group:"gorm_plugins"`),
|
|
),
|
|
fx.Annotate(
|
|
func(
|
|
plugins []gorm.Plugin,
|
|
cfg Config,
|
|
logger *zap.Logger,
|
|
) database.RunnerProvider {
|
|
return database.New(
|
|
string(cfg.CreateDSN()),
|
|
plugins,
|
|
logger,
|
|
)
|
|
},
|
|
fx.As(new(database.PoolProvider)),
|
|
fx.As(new(database.SQLDBProvider)),
|
|
fx.As(new(database.GormDBProvider)),
|
|
fx.As(new(database.DaoProvider)),
|
|
fx.As(new(database.DaoTransactionProvider)),
|
|
fx.As(new(database.Provider)),
|
|
fx.As(fx.Self()),
|
|
),
|
|
),
|
|
),
|
|
builder.WithWorker(
|
|
func(deps deps) (runner.Provider, worker.Option) {
|
|
return deps.Provider, nil
|
|
},
|
|
),
|
|
builder.WithHealthCheckerOption(func(deps deps) health.CheckerOption {
|
|
return healthcheck.New(Ref.String(), deps.Provider)
|
|
}),
|
|
)
|
|
)
|