Files
geoip-rest/cmd/user_program_import/main.go
2025-12-09 19:29:34 +09:00

60 lines
1.5 KiB
Go

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
}