package main import ( "context" "log/slog" "os" "os/signal" "syscall" "github.com/fish/language/backend/internal/app" "github.com/fish/language/backend/internal/config" "github.com/fish/language/backend/internal/repository" ) func main() { ctx := context.Background() cfg, err := config.Load() if err != nil { slog.Error("failed to load config", "error", err) os.Exit(1) } pool, err := repository.NewPool(ctx, cfg.DatabaseURL) if err != nil { slog.Error("failed to connect to database", "error", err) os.Exit(1) } defer pool.Close() application := app.New(cfg, pool) go func() { if err := application.Run(); err != nil { slog.Error("server error", "error", err) os.Exit(1) } }() slog.Info("server started", "addr", cfg.HTTPAddr) quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit slog.Info("shutting down server") }