Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 29 additions & 6 deletions bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ func Bootstrap(scanPath ...string) {
os.Exit(0)
}

autoCreateDbPoolManager()

// 2️⃣ Detect mode and store in config for runtime access
Mode = detectRunMode()
lokstra_registry.SetConfig("runtime.mode", string(Mode))
Expand All @@ -81,12 +83,6 @@ func Bootstrap(scanPath ...string) {
return
}

// auto create dbpool-manager service if not exists
if svc := lokstra_registry.GetService[serviceapi.DbPoolManager]("dbpool-manager"); svc == nil {
svc = dbpool_manager.NewPgxPoolManager()
lokstra_registry.RegisterService("dbpool-manager", svc)
}

// 4️⃣ If prod, just continue
if Mode == RunModeProd {
// fmt.Println("[Lokstra] Production mode — skipping autogen.")
Expand Down Expand Up @@ -285,3 +281,30 @@ func relaunchWithDlv() {
// Exit cleanly so debugger can be restarted
os.Exit(0)
}

// auto create dbpool-manager service if not exists
func autoCreateDbPoolManager() {
if svc := lokstra_registry.GetService[serviceapi.DbPoolManager]("dbpool-manager"); svc == nil {
svc = dbpool_manager.NewPgxPoolManager()
lokstra_registry.RegisterService("dbpool-manager", svc)
}
}

// LoadConfigFromFolder loads configuration from the specified folder path.
// It also ensures that the dbpool-manager service is registered before loading config.
func LoadConfigFromFolder(folderPath string) error {
autoCreateDbPoolManager()
return lokstra_registry.LoadConfigFromFolder(folderPath)
}

// LoadConfig loads configuration from the specified file path.
// It also ensures that the dbpool-manager service is registered before loading config.
func LoadConfig(filePath string) error {
autoCreateDbPoolManager()
return lokstra_registry.LoadConfig(filePath)
}

// InitAndRunServer initializes and runs the server based on loaded configuration.
func InitAndRunServer() error {
return lokstra_registry.InitAndRunServer()
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func main() {

deploy.SetLogLevelFromEnv()

lokstra_registry.LoadConfigFromFolder("config")
lokstra.LoadConfigFromFolder("config")

dsn := lokstra_registry.GetConfig("global-db.dsn", "")
schema := lokstra_registry.GetConfig("global-db.schema", "public")
Expand All @@ -44,7 +44,7 @@ func main() {
registerMiddlewareTypes()

// 3. Run server from config folder
if err := lokstra_registry.InitAndRunServer(); err != nil {
if err := lokstra.InitAndRunServer(); err != nil {
panic(err)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ func main() {
lokstra.Bootstrap()

// STEP 2: Load Config - loads YAML configuration
lokstra_registry.LoadConfig("config.yaml")
lokstra.LoadConfig("config.yaml")

// STEP 3: Register Service Types - map factory names to functions
registerServiceTypes()
Expand All @@ -98,7 +98,7 @@ func main() {
registerMiddlewareTypes()

// STEP 5: Initialize and Run Server
lokstra_registry.InitAndRunServer()
lokstra.InitAndRunServer()
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ func main() {
lokstra.Bootstrap()

// STEP 1: Load Config
if err := lokstra_registry.LoadConfig("config.yaml"); err != nil {
if err := lokstra.LoadConfig("config.yaml"); err != nil {
log.Fatal("Failed to load config:", err)
}

Expand All @@ -24,7 +24,7 @@ func main() {
registerMiddlewareTypes()

// STEP 4: Initialize and Run Server
if err := lokstra_registry.InitAndRunServer(); err != nil {
if err := lokstra.InitAndRunServer(); err != nil {
log.Fatal("Failed to run server:", err)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ func main() {
lokstra.Bootstrap()

// STEP 1: Load Config
if err := lokstra_registry.LoadConfig("config.yaml"); err != nil {
if err := lokstra.LoadConfig("config.yaml"); err != nil {
log.Fatal("Failed to load config:", err)
}

Expand All @@ -23,7 +23,7 @@ func main() {
registerMiddlewareTypes()

// STEP 4: Initialize and Run Server
if err := lokstra_registry.InitAndRunServer(); err != nil {
if err := lokstra.InitAndRunServer(); err != nil {
log.Fatal("Failed to run server:", err)
}
}
Expand Down
32 changes: 14 additions & 18 deletions docs/BOOTSTRAP-FLOWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,15 +102,14 @@ import (
"log"
"github.com/primadi/lokstra"
"github.com/primadi/lokstra/core/deploy"
"github.com/primadi/lokstra/lokstra_registry"
)

func main() {
lokstra.Bootstrap()
deploy.SetLogLevelFromEnv()

// 1. Load config FIRST
if err := lokstra_registry.LoadConfigFromFolder("config"); err != nil {
if err := lokstra.LoadConfigFromFolder("config"); err != nil {
log.Fatal("Failed to load config:", err)
}

Expand All @@ -121,7 +120,7 @@ func main() {
registerMiddlewareTypes()

// 4. Initialize and run server
if err := lokstra_registry.InitAndRunServer(); err != nil {
if err := lokstra.InitAndRunServer(); err != nil {
log.Fatal("Failed to run server:", err)
}
}
Expand Down Expand Up @@ -173,7 +172,7 @@ func main() {
deploy.SetLogLevelFromEnv()

// Load config first
if err := lokstra_registry.LoadConfigFromFolder("config"); err != nil {
if err := lokstra.LoadConfigFromFolder("config"); err != nil {
log.Fatal("Failed to load config:", err)
}

Expand All @@ -182,7 +181,7 @@ func main() {
registerMiddlewareTypes()

// Start server
if err := lokstra_registry.InitAndRunServer(); err != nil {
if err := lokstra.InitAndRunServer(); err != nil {
log.Fatal("Failed to run server:", err)
}
}
Expand Down Expand Up @@ -241,20 +240,19 @@ package main
import (
"log"
"github.com/primadi/lokstra"
"github.com/primadi/lokstra/lokstra_registry"
)

func main() {
lokstra.Bootstrap()

// Load single config file
if err := lokstra_registry.LoadConfig("config.yaml"); err != nil {
if err := lokstra.LoadConfig("config.yaml"); err != nil {
log.Fatal(err)
}

registerServiceTypes()

if err := lokstra_registry.InitAndRunServer(); err != nil {
if err := lokstra.InitAndRunServer(); err != nil {
log.Fatal(err)
}
}
Expand All @@ -268,14 +266,13 @@ package main
import (
"log"
"github.com/primadi/lokstra"
"github.com/primadi/lokstra/lokstra_registry"
)

func main() {
lokstra.Bootstrap()

// Load multiple config files
if err := lokstra_registry.LoadConfig(
if err := lokstra.LoadConfig(
"config/base.yaml",
"config/services.yaml",
"config/deployments.yaml",
Expand All @@ -286,7 +283,7 @@ func main() {
registerServiceTypes()
registerMiddlewareTypes()

if err := lokstra_registry.InitAndRunServer(); err != nil {
if err := lokstra.InitAndRunServer(); err != nil {
log.Fatal(err)
}
}
Expand All @@ -300,21 +297,20 @@ package main
import (
"log"
"github.com/primadi/lokstra"
"github.com/primadi/lokstra/lokstra_registry"
)

func main() {
lokstra.Bootstrap()

// Load all YAML files from folder
if err := lokstra_registry.LoadConfigFromFolder("config"); err != nil {
if err := lokstra.LoadConfigFromFolder("config"); err != nil {
log.Fatal(err)
}

registerServiceTypes()
registerMiddlewareTypes()

if err := lokstra_registry.InitAndRunServer(); err != nil {
if err := lokstra.InitAndRunServer(); err != nil {
log.Fatal(err)
}
}
Expand Down Expand Up @@ -359,10 +355,10 @@ Loads YAML configuration file(s) and registers lazy load services.

```go
// Single file
err := lokstra_registry.LoadConfig("config.yaml")
err := lokstra.LoadConfig("config.yaml")

// Multiple files
err := lokstra_registry.LoadConfig(
err := lokstra.LoadConfig(
"config/base.yaml",
"config/services.yaml",
)
Expand All @@ -373,7 +369,7 @@ err := lokstra_registry.LoadConfig(
Loads all YAML files from the specified folder.

```go
err := lokstra_registry.LoadConfigFromFolder("config")
err := lokstra.LoadConfigFromFolder("config")
```

#### `InitAndRunServer() error`
Expand All @@ -385,7 +381,7 @@ Initializes and runs the server based on loaded config.
// - server: Server selection (optional, uses first if not specified)
// - shutdown_timeout: Graceful shutdown timeout (optional, default: 30s)

err := lokstra_registry.InitAndRunServer()
err := lokstra.InitAndRunServer()
```

#### `GetConfig[T any](key string, defaultValue T) T`
Expand Down
Loading