package main import ( "context" "fmt" "io/fs" "log/slog" "net/http" "os" "os/signal" "syscall" "time" "energy-frontend/internal/api" "energy-frontend/internal/config" ) func main() { cfg := config.Load() frontendFS, _ := fs.Sub(frontendDist, "dist") router := api.NewRouter(*cfg, frontendFS) addr := fmt.Sprintf(":%d", cfg.Server.Port) srv := &http.Server{ Addr: addr, Handler: router, ReadTimeout: 15 * time.Second, WriteTimeout: 30 * time.Second, IdleTimeout: 60 * time.Second, } go func() { slog.Info("starting server", "addr", addr) if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { slog.Error("server error", "error", err) os.Exit(1) } }() sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) <-sigChan slog.Info("shutting down") ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() srv.Shutdown(ctx) }