github.com/oinume/lekcije@v0.0.0-20231017100347-5b4c5eb6ab24/backend/cmd/country_code/main.go (about)

     1  package main
     2  
     3  import (
     4  	"encoding/csv"
     5  	"flag"
     6  	"io"
     7  	"log"
     8  	"os"
     9  	"strconv"
    10  
    11  	"github.com/oinume/lekcije/backend/domain/config"
    12  	"github.com/oinume/lekcije/backend/model"
    13  )
    14  
    15  var (
    16  	file = flag.String("file", "", "CSV file of country data")
    17  )
    18  
    19  func main() {
    20  	flag.Parse()
    21  	if *file == "" {
    22  		log.Fatalf("Must specify -file")
    23  	}
    24  
    25  	f, err := os.Open(*file)
    26  	if err != nil {
    27  		log.Fatalf("File open error: path=%v, err=%v", *file, err)
    28  	}
    29  
    30  	config.MustProcessDefault()
    31  	db, err := model.OpenDB(config.DefaultVars.DBURL(), 1, config.DefaultVars.DebugSQL)
    32  	if err != nil {
    33  		log.Fatal(err)
    34  	}
    35  	reader := csv.NewReader(f)
    36  	for {
    37  		columns, err := reader.Read()
    38  		if err == io.EOF {
    39  			break
    40  		}
    41  		if err != nil {
    42  			log.Fatalf("%v", err)
    43  		}
    44  		if columns[0] == "国・地域名" {
    45  			continue
    46  		}
    47  		// "アイスランド","Iceland","352","ISL","IS","北ヨーロッパ","ISO 3166-2:IS"
    48  		country := &model.MCountry{
    49  			NameJA: columns[0],
    50  			Name:   columns[1],
    51  			ID:     parseCountryID(columns[2]),
    52  		}
    53  		if err := db.FirstOrCreate(country).Error; err != nil {
    54  			log.Fatalf("%v", err)
    55  		}
    56  	}
    57  }
    58  
    59  func parseCountryID(s string) uint16 {
    60  	if v, err := strconv.ParseUint(s, 10, 32); err == nil {
    61  		return uint16(v)
    62  	} else {
    63  		panic(err)
    64  	}
    65  }