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