package main import ( "context" "database/sql" "encoding/csv" "io" "log" "os" "path/filepath" "strconv" "bj_power_mes/ent" "entgo.io/ent/dialect" entsql "entgo.io/ent/dialect/sql" _ "github.com/jackc/pgx/v5/stdlib" ) var ( client *ent.Client ctx = context.Background() ) func setUp() { db, err := sql.Open("pgx", "postgresql://postgres:postgres@127.0.0.1:5432/back_cover") if err != nil { log.Fatal(err) } _, err = db.Query("select 1") if err != nil { log.Fatal(err) } drv := entsql.OpenDB(dialect.Postgres, db) client = ent.NewClient(ent.Driver(drv)).Debug() } func tearDown() { err := client.Close() if err != nil { return } } var commands = map[string]func(){ "signals": initSignals, } func main() { if len(os.Args) < 2 { log.Fatal("please specify the command") } if len(os.Args) > 1 { setUp() defer tearDown() args := os.Args[1:] for _, cmd := range args { if v, ok := commands[cmd]; ok { log.Println("initialize", cmd) v() } } } } func initSignals() { signalFilePath, _ := filepath.Abs("../doc/signal.csv") file, err := os.Open(signalFilePath) if err != nil { if os.IsNotExist(err) { log.Fatalf("%s is not found", signalFilePath) } log.Fatal("signals initialized failed!", err) } r := csv.NewReader(file) client.Signal.Delete().ExecX(ctx) line := 0 for { records, err := r.Read() if err == io.EOF { break } else if err != nil { log.Fatal(err) } if line == 0 { line++ continue } name := records[1] desc := records[2] isStatus, _ := strconv.Atoi(records[3]) sender, _ := strconv.Atoi(records[4]) address := records[5] offset, _ := strconv.Atoi(records[6]) client.Signal.Create(). SetID(line). SetIsStatus(isStatus). SetName(name). SetDescription(desc). SetSender(sender). SetAddress(address). SetReplyOffset(offset). SaveX(ctx) line++ } log.Println("signals initialized successfully!") }