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 }