🎉: init project
This commit is contained in:
87
internal/model/init.go
Normal file
87
internal/model/init.go
Normal file
@ -0,0 +1,87 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/loveuer/nf/nft/log"
|
||||
"gorm.io/gorm"
|
||||
"strings"
|
||||
"ultone/internal/opt"
|
||||
"ultone/internal/sqlType"
|
||||
)
|
||||
|
||||
func Init(db *gorm.DB) error {
|
||||
var err error
|
||||
|
||||
if err = initModel(db); err != nil {
|
||||
return fmt.Errorf("model.MustInit: init models err=%v", err)
|
||||
}
|
||||
|
||||
log.Info("MustInitModels: auto_migrate privilege model success")
|
||||
|
||||
if err = initData(db); err != nil {
|
||||
return fmt.Errorf("model.MustInit: init datas err=%v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func initModel(client *gorm.DB) error {
|
||||
if err := client.AutoMigrate(
|
||||
&User{},
|
||||
&OpLog{},
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Info("InitModels: auto_migrate user model success")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func initData(client *gorm.DB) error {
|
||||
var (
|
||||
err error
|
||||
)
|
||||
|
||||
{
|
||||
count := 0
|
||||
|
||||
if err = client.Model(&User{}).Select("count(id)").Take(&count).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if count < len(initUsers) {
|
||||
log.Warn("mustInitDatas: user count = 0, start init...")
|
||||
for _, user := range initUsers {
|
||||
if err = client.Model(&User{}).Create(user).Error; err != nil {
|
||||
if !strings.Contains(err.Error(), "SQLSTATE 23505") {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if opt.Cfg.DB.Type == "postgresql" {
|
||||
if err = client.Exec(`SELECT setval('users_id_seq', (SELECT MAX(id) FROM users))`).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
log.Info("InitDatas: creat init users success")
|
||||
} else {
|
||||
ps := make(sqlType.NumSlice[Privilege], 0)
|
||||
for _, item := range Privilege(0).All() {
|
||||
ps = append(ps, item.(Privilege))
|
||||
}
|
||||
if err = client.Model(&User{}).Where("id = ?", initUsers[0].Id).
|
||||
Updates(map[string]any{
|
||||
"privileges": ps,
|
||||
}).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Info("initDatas: update init users success")
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user