package main import ( "context" "log" "os" "time" "github.com/jackc/pgx/v5" "geoip-rest/internal/importer" ) const ( defaultCSVPath = "./initial_data/user_program_info_init_20251208.csv" defaultUpdateDir = "./update_data" defaultTimeout = 10 * time.Minute defaultSchema = "public" defaultLogDir = "./log" targetTableName = "user_program_info_replica" ) func main() { dbURL := os.Getenv("DATABASE_URL") if dbURL == "" { log.Fatal("DATABASE_URL is required") } csvPath := env("USER_PROGRAM_INFO_CSV", defaultCSVPath) updateDir := env("USER_PROGRAM_UPDATE_DIR", defaultUpdateDir) schema := env("USER_PROGRAM_INFO_SCHEMA", defaultSchema) logDir := env("USER_PROGRAM_IMPORT_LOG_DIR", defaultLogDir) ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) defer cancel() conn, err := pgx.Connect(ctx, dbURL) if err != nil { log.Fatalf("failed to connect to database: %v", err) } defer conn.Close(context.Background()) if err := importer.EnsureUserProgramReplica(ctx, conn, csvPath, schema, logDir); err != nil { log.Fatalf("failed to ensure %s table: %v", targetTableName, err) } if err := importer.ImportUserProgramUpdates(ctx, conn, updateDir, schema, logDir); err != nil { log.Fatalf("failed to import updates from %s: %v", updateDir, err) } log.Printf("%s is ready in schema %s using data from %s (updates: %s)", targetTableName, schema, csvPath, updateDir) } func env(key, fallback string) string { if val := os.Getenv(key); val != "" { return val } return fallback }