monorepo/cloud/maplefile-backend/cmd/daemon.go

60 lines
1.7 KiB
Go

package cmd
import (
"fmt"
"log"
"time"
"github.com/spf13/cobra"
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/app"
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
)
// formatBuildTime converts ISO 8601 timestamp to human-readable 12-hour format
func formatBuildTime(isoTime string) string {
t, err := time.Parse(time.RFC3339, isoTime)
if err != nil {
return isoTime // Return original if parsing fails
}
return t.Format("Jan 2, 2006 3:04:05 PM MST")
}
var daemonCmd = &cobra.Command{
Use: "daemon",
Short: "Start the MapleFile backend server",
Long: `Start the MapleFile backend HTTP server and listen for requests.`,
Run: runDaemon,
}
func runDaemon(cmd *cobra.Command, args []string) {
// Validate configuration on startup
cfg, err := config.Load()
if err != nil {
log.Fatalf("Failed to load configuration: %v", err)
}
if err := cfg.Validate(); err != nil {
log.Fatalf("Invalid configuration: %v", err)
}
fmt.Printf("🚀 Starting MapleFile Backend v%s\n", version)
fmt.Printf("📝 Git Commit: %s\n", gitCommit)
fmt.Printf("🕐 Build Time: %s\n", formatBuildTime(buildTime))
fmt.Printf("📝 Environment: %s\n", cfg.App.Environment)
fmt.Printf("🌐 Server will listen on %s:%d\n", cfg.Server.Host, cfg.Server.Port)
// Create and run the Wire-based application
application, err := app.InitializeApplication(cfg)
if err != nil {
log.Fatalf("Failed to initialize application: %v", err)
}
// Start the application
// Wire application handles lifecycle and graceful shutdown
if err := application.Start(); err != nil {
log.Fatalf("Application terminated with error: %v", err)
}
fmt.Println("👋 Server stopped gracefully")
}