Files
vt/cmd/api/main.go
2026-01-22 17:39:04 +01:00

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()
}