95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
kfx "git.kocoder.xyz/kocoded/vt/fx"
|
|
"git.kocoder.xyz/kocoded/vt/fx/interfaces"
|
|
"git.kocoder.xyz/kocoded/vt/fx/interfaces/stores"
|
|
"git.kocoder.xyz/kocoded/vt/integration"
|
|
"git.kocoder.xyz/kocoded/vt/integration/mailing"
|
|
"git.kocoder.xyz/kocoded/vt/interceptors"
|
|
"git.kocoder.xyz/kocoded/vt/repositories"
|
|
mandantv1 "git.kocoder.xyz/kocoded/vt/routers/mandant/v1"
|
|
messagebusv1 "git.kocoder.xyz/kocoded/vt/routers/messagebus/v1"
|
|
projectv1 "git.kocoder.xyz/kocoded/vt/routers/project/v1"
|
|
todov1 "git.kocoder.xyz/kocoded/vt/routers/todo/v1"
|
|
"git.kocoder.xyz/kocoded/vt/utils"
|
|
"github.com/joho/godotenv"
|
|
"go.uber.org/fx"
|
|
)
|
|
|
|
func AsIntegration(f any) any {
|
|
return fx.Annotate(
|
|
f,
|
|
fx.As(new(interfaces.BasicIntegration)),
|
|
fx.ResultTags(`group:"integration"`),
|
|
)
|
|
}
|
|
|
|
func AsRoute(f any) any {
|
|
return fx.Annotate(
|
|
f,
|
|
fx.As(new(kfx.Handler)),
|
|
fx.ResultTags(`group:"connectRoute"`),
|
|
)
|
|
}
|
|
|
|
func main() {
|
|
err := godotenv.Load()
|
|
|
|
if err != nil {
|
|
fmt.Println("Error loading env vars... %v", err)
|
|
}
|
|
|
|
fx.New(
|
|
fx.Provide(
|
|
kfx.NewHTTPServer,
|
|
utils.NewReflector,
|
|
utils.NewHealthchecker,
|
|
|
|
utils.NewDB,
|
|
utils.NewCache,
|
|
|
|
utils.NewOIDCProvider,
|
|
utils.NewOIDCVerifier,
|
|
|
|
fx.Annotate(repositories.NewSessionRepository, fx.As(new(stores.SessionStore))),
|
|
fx.Annotate(repositories.NewInMemeoryMessageRepository, fx.As(new(stores.MessageStore))),
|
|
interceptors.NewOIDCInterceptor,
|
|
|
|
AsIntegration(mailing.NewImapIntegration),
|
|
fx.Annotate(
|
|
integration.NewIntegrationHandler,
|
|
fx.ParamTags(`group:"integration"`),
|
|
),
|
|
|
|
kfx.NewOtelLoggerProvider,
|
|
kfx.NewOtelMeterProvider,
|
|
kfx.NewOtelTracerProvider,
|
|
kfx.NewLogger,
|
|
|
|
AsRoute(utils.NewHealthCheckV1),
|
|
|
|
AsRoute(utils.NewReflectorV1),
|
|
AsRoute(utils.NewReflectorV1Alpha1),
|
|
|
|
AsRoute(kfx.NewEchoHandler),
|
|
|
|
AsRoute(messagebusv1.NewMessagebusRoute),
|
|
|
|
AsRoute(projectv1.NewProjectRoute),
|
|
AsRoute(todov1.NewTodoRoute),
|
|
AsRoute(mandantv1.NewMandantRoute),
|
|
|
|
fx.Annotate(
|
|
kfx.NewServeMux,
|
|
fx.ParamTags(`group:"connectRoute"`),
|
|
),
|
|
),
|
|
|
|
fx.Invoke(func(*integration.IntegrationHandler) {}, kfx.SetupOTelSDK, func(*http.Server) {}),
|
|
).Run()
|
|
}
|