package model import ( "github.com/loveuer/nfflow/internal/database" "github.com/loveuer/nfflow/internal/opt" "github.com/loveuer/nfflow/internal/util" "github.com/sirupsen/logrus" "strings" ) func MustInit(db database.Store) { var err error if err = initModel(db); err != nil { logrus.Fatalf("model.MustInit: init models err=%v", err) } logrus.Info("MustInitModels: auto_migrate privilege model success") if err = initData(db); err != nil { logrus.Fatalf("model.MustInit: init datas err=%v", err) } } func initModel(client database.Store) error { if err := client.Session(util.Timeout(10)).AutoMigrate( &User{}, &OpLog{}, &Task{}, ); err != nil { return err } logrus.Info("MustInitModels: auto_migrate user model success") return nil } func initData(client database.Store) error { var ( err error ) { count := 0 if err = client.Session(util.Timeout()).Model(&User{}).Select("count(id)").Take(&count).Error; err != nil { return err } if count < len(initUsers) { logrus.Warn("mustInitDatas: user count = 0, start init...") for _, user := range initUsers { if err = client.Session(util.Timeout(5)).Model(&User{}).Create(user).Error; err != nil { if !strings.Contains(err.Error(), "SQLSTATE 23505") { return err } } } if opt.Cfg.Database.Type == "postgresql" { if err = client.Session(util.Timeout(5)).Exec(`SELECT setval('users_id_seq', (SELECT MAX(id) FROM users))`).Error; err != nil { return err } } logrus.Info("mustInitDatas: creat init users success") } } return nil }