package main import ( "context" "net/http" "os" "os/signal" "syscall" "time" "cockpit/internal/config" "cockpit/internal/db" "cockpit/internal/router" "cockpit/internal/seed" ) func main() { cfg := config.MustLoad() database := db.MustOpen(cfg) seed.MustSeed(database) engine := router.New(cfg, database) srv := &http.Server{ Addr: cfg.Server.Addr, Handler: engine, } go func() { if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { panic(err) } }() quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() _ = srv.Shutdown(ctx) }