2024-01-12 00:11:53 +00:00
|
|
|
package api
|
|
|
|
|
2024-01-12 04:13:10 +00:00
|
|
|
import (
|
2024-01-28 07:20:59 +00:00
|
|
|
"context"
|
2024-02-16 13:39:55 +00:00
|
|
|
"slices"
|
|
|
|
|
|
|
|
"git.lumeweb.com/LumeWeb/portal/api/middleware"
|
|
|
|
|
2024-02-14 00:07:24 +00:00
|
|
|
"git.lumeweb.com/LumeWeb/portal/api/account"
|
2024-01-28 07:20:59 +00:00
|
|
|
"git.lumeweb.com/LumeWeb/portal/api/registry"
|
2024-01-29 20:11:57 +00:00
|
|
|
"git.lumeweb.com/LumeWeb/portal/api/s5"
|
2024-01-28 07:20:59 +00:00
|
|
|
"github.com/spf13/viper"
|
|
|
|
"go.uber.org/fx"
|
2024-01-12 04:13:10 +00:00
|
|
|
)
|
2024-01-12 00:11:53 +00:00
|
|
|
|
2024-01-28 07:20:59 +00:00
|
|
|
func RegisterApis() {
|
|
|
|
registry.Register(registry.APIEntry{
|
2024-02-16 13:39:55 +00:00
|
|
|
Key: "s5",
|
|
|
|
Module: s5.Module,
|
2024-01-28 07:20:59 +00:00
|
|
|
})
|
2024-02-14 00:07:24 +00:00
|
|
|
registry.Register(registry.APIEntry{
|
2024-02-16 13:39:55 +00:00
|
|
|
Key: "account",
|
|
|
|
Module: account.Module,
|
2024-02-14 00:07:24 +00:00
|
|
|
})
|
2024-01-12 00:11:53 +00:00
|
|
|
}
|
2024-01-12 04:13:10 +00:00
|
|
|
|
2024-01-28 07:20:59 +00:00
|
|
|
func BuildApis(config *viper.Viper) fx.Option {
|
|
|
|
var options []fx.Option
|
2024-01-28 07:58:33 +00:00
|
|
|
enabledProtocols := config.GetStringSlice("core.protocols")
|
2024-01-28 07:20:59 +00:00
|
|
|
for _, entry := range registry.GetRegistry() {
|
2024-02-16 13:39:55 +00:00
|
|
|
if slices.Contains(enabledProtocols, entry.Key) {
|
2024-01-28 07:20:59 +00:00
|
|
|
options = append(options, entry.Module)
|
|
|
|
}
|
|
|
|
}
|
2024-01-12 04:13:10 +00:00
|
|
|
|
2024-02-16 13:39:55 +00:00
|
|
|
options = append(options, fx.Invoke(func(protocols []registry.API) error {
|
|
|
|
for _, protocol := range protocols {
|
|
|
|
err := protocol.Init()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}))
|
|
|
|
|
2024-02-17 08:04:15 +00:00
|
|
|
options = append(options, fx.Invoke(func(protocols []registry.API) error {
|
2024-02-16 13:39:55 +00:00
|
|
|
for _, protocol := range protocols {
|
2024-02-17 08:04:15 +00:00
|
|
|
routes, err := protocol.Routes()
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
middleware.RegisterProtocolSubdomain(config, routes, protocol.Name())
|
2024-02-16 13:39:55 +00:00
|
|
|
}
|
2024-02-17 08:04:15 +00:00
|
|
|
|
|
|
|
return nil
|
2024-02-16 13:39:55 +00:00
|
|
|
}))
|
|
|
|
|
2024-01-28 10:22:11 +00:00
|
|
|
return fx.Module("api", fx.Options(options...))
|
2024-01-28 07:20:59 +00:00
|
|
|
}
|
2024-01-12 04:13:10 +00:00
|
|
|
|
2024-01-28 09:45:34 +00:00
|
|
|
type LifecyclesParams struct {
|
|
|
|
fx.In
|
|
|
|
|
|
|
|
Protocols []registry.API `group:"protocol"`
|
|
|
|
}
|
|
|
|
|
2024-01-30 19:53:50 +00:00
|
|
|
func SetupLifecycles(lifecycle fx.Lifecycle, params LifecyclesParams) error {
|
2024-01-28 07:20:59 +00:00
|
|
|
for _, entry := range registry.GetRegistry() {
|
2024-01-28 09:45:34 +00:00
|
|
|
for _, protocol := range params.Protocols {
|
2024-01-28 07:20:59 +00:00
|
|
|
if protocol.Name() == entry.Key {
|
|
|
|
lifecycle.Append(fx.Hook{
|
|
|
|
OnStart: func(ctx context.Context) error {
|
|
|
|
return protocol.Start(ctx)
|
|
|
|
},
|
|
|
|
OnStop: func(ctx context.Context) error {
|
|
|
|
return protocol.Stop(ctx)
|
|
|
|
},
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-01-30 19:53:50 +00:00
|
|
|
|
|
|
|
return nil
|
2024-01-12 04:13:10 +00:00
|
|
|
}
|