mirror of
https://github.com/emo2007/block-accounting.git
synced 2025-04-12 08:56:28 +00:00
76 lines
1.6 KiB
Go
76 lines
1.6 KiB
Go
//go:build wireinject
|
|
// +build wireinject
|
|
|
|
package factory
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
|
|
"github.com/emochka2007/block-accounting/internal/interface/rest"
|
|
"github.com/emochka2007/block-accounting/internal/interface/rest/controllers"
|
|
"github.com/emochka2007/block-accounting/internal/interface/rest/presenters"
|
|
"github.com/emochka2007/block-accounting/internal/pkg/config"
|
|
"github.com/emochka2007/block-accounting/internal/pkg/logger"
|
|
"github.com/emochka2007/block-accounting/internal/service"
|
|
"github.com/google/wire"
|
|
)
|
|
|
|
func ProvideService(c config.Config) (service.Service, func(), error) {
|
|
wire.Build(
|
|
provideLogger,
|
|
provideControllers,
|
|
provideRestServer,
|
|
service.NewService,
|
|
)
|
|
|
|
return &service.ServiceImpl{}, func() {}, nil
|
|
}
|
|
|
|
func provideLogger(c config.Config) *slog.Logger {
|
|
lb := new(logger.LoggerBuilder).WithLevel(logger.MapLevel(c.Common.LogLevel)).WithWriter(os.Stdout)
|
|
|
|
if c.Common.LogLocal {
|
|
lb.Local()
|
|
}
|
|
|
|
if c.Common.LogFile != "" {
|
|
logFile, err := os.Open(c.Common.LogFile)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
lb.WithWriter(logFile)
|
|
}
|
|
|
|
if c.Common.LogAddSource {
|
|
lb.WithSource()
|
|
}
|
|
|
|
return lb.Build()
|
|
}
|
|
|
|
func provideControllers(
|
|
log *slog.Logger,
|
|
) *controllers.RootController {
|
|
return &controllers.RootController{
|
|
Ping: controllers.NewPingController(log.WithGroup("ping-controller")),
|
|
Auth: controllers.NewAuthController(
|
|
log.WithGroup("auth-controller"),
|
|
presenters.NewAuthPresenter(),
|
|
),
|
|
}
|
|
}
|
|
|
|
func provideRestServer(
|
|
log *slog.Logger,
|
|
controllers *controllers.RootController,
|
|
c config.Config,
|
|
) *rest.Server {
|
|
return rest.NewServer(
|
|
log.WithGroup("rest"),
|
|
c.Rest,
|
|
controllers,
|
|
)
|
|
}
|