Files
qfixpt/src/cmd/service/service.go

64 lines
1.5 KiB
Go

// Package service contain the main service runner
package service
import (
"fmt"
"log/slog"
"quantex.com/qfixpt/src/app"
"quantex.com/qfixpt/src/client/api/rest"
"quantex.com/qfixpt/src/client/data"
"quantex.com/qfixpt/src/client/fix"
googlechat "quantex.com/qfixpt/src/client/notify/google"
"quantex.com/qfixpt/src/client/store"
"quantex.com/qfixpt/src/client/store/external"
"quantex.com/qfixpt/src/cmd"
)
func Runner(cfg app.Config) error {
slog.Info("Hello Try Service")
notify := googlechat.New(cfg.Notify.Google)
extConfig := external.Config{
QApixPort: cfg.APIBasePort,
QApixHost: cfg.QApixHost,
External: cfg.External,
QApixToken: cfg.QApixToken,
}
storeConfig := store.Config{
MultiDB: cfg.MultiDB,
External: extConfig,
}
appStore, err := store.New(storeConfig)
if err != nil {
return fmt.Errorf("error trying to create store %w", err)
}
userData := data.New()
// Initialize FIX Post-Trade Manager.
fixManager := fix.NewManager(cfg.FIX, appStore, notify)
if err = fixManager.Start(); err != nil {
return fmt.Errorf("error starting FIX initiator: %w", err)
}
defer fixManager.Stop()
apiConfig := rest.Config{
Port: cfg.APIBasePort,
AllowedOrigins: cfg.AllowedOrigins,
External: cfg.External,
AuthorizedServices: cfg.AuthorizedServices,
EnableJWTAuth: cfg.EnableJWTAuth,
}
api := rest.New(userData, appStore, fixManager, apiConfig, notify)
api.Run()
cmd.WaitForInterruptSignal(nil)
return nil
}