package main import ( "encoding/json" "fmt" "os" "path/filepath" "strings" "floorvisualizer/internal/model" "floorvisualizer/internal/repository" ) func main() { dsn := repository.DefaultDSN if v := os.Getenv("DATABASE_URL"); v != "" { dsn = v } dataDir := "data/products" if v := os.Getenv("PRODUCT_DATA_DIR"); v != "" { dataDir = v } db, err := repository.Connect(dsn) if err != nil { panic(err) } defer db.Close() db.Exec("DELETE FROM products") files, err := os.ReadDir(dataDir) if err != nil { panic(err) } total := 0 for _, f := range files { if f.IsDir() || !strings.EqualFold(filepath.Ext(f.Name()), ".json") { continue } data, err := os.ReadFile(filepath.Join(dataDir, f.Name())) if err != nil { panic(err) } var prods []model.Product if err := json.Unmarshal(data, &prods); err != nil { panic(fmt.Errorf("parse %s: %w", f.Name(), err)) } if err := repository.InsertProducts(db, prods); err != nil { panic(err) } total += len(prods) fmt.Printf(" %s: %d\n", f.Name(), len(prods)) } fmt.Printf("\nDone! %d products\n", total) }