60 lines
1.7 KiB
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")
|
|
}
|