FloorVisualizer/cmd/import/main.go

55 lines
1.1 KiB
Go
Raw Permalink Normal View History

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)
}