JM-WechatMini/source/system/user.go
2023-11-02 04:34:46 +08:00

100 lines
2.8 KiB
Go

package system
import (
"context"
"github.com/gofrs/uuid/v5"
"github.com/pkg/errors"
"gorm.io/gorm"
sysModel "miniapp/model/system"
"miniapp/service/system"
"miniapp/utils"
)
const initOrderUser = initOrderAuthority + 1
type initUser struct{}
// auto run
func init() {
system.RegisterInit(initOrderUser, &initUser{})
}
func (i *initUser) MigrateTable(ctx context.Context) (context.Context, error) {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return ctx, system.ErrMissingDBContext
}
return ctx, db.AutoMigrate(&sysModel.SysUser{}, &sysModel.SysChatGptOption{})
}
func (i *initUser) TableCreated(ctx context.Context) bool {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return false
}
return db.Migrator().HasTable(&sysModel.SysUser{})
}
func (i initUser) InitializerName() string {
return sysModel.SysUser{}.TableName()
}
func (i *initUser) InitializeData(ctx context.Context) (next context.Context, err error) {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return ctx, system.ErrMissingDBContext
}
password := utils.BcryptHash("6447985")
adminPassword := utils.BcryptHash("123456")
entities := []sysModel.SysUser{
{
UUID: uuid.Must(uuid.NewV4()),
Username: "admin",
Password: adminPassword,
NickName: "Mr.奇淼",
HeaderImg: "https://qmplusimg.henrongyi.top/gva_header.jpg",
AuthorityId: 888,
Phone: "17611111111",
Email: "333333333@qq.com",
},
{
UUID: uuid.Must(uuid.NewV4()),
Username: "a303176530",
Password: password,
NickName: "用户1",
HeaderImg: "https:///qmplusimg.henrongyi.top/1572075907logo.png",
AuthorityId: 9528,
Phone: "17611111111",
Email: "333333333@qq.com"},
}
if err = db.Create(&entities).Error; err != nil {
return ctx, errors.Wrap(err, sysModel.SysUser{}.TableName()+"表数据初始化失败!")
}
next = context.WithValue(ctx, i.InitializerName(), entities)
authorityEntities, ok := ctx.Value(initAuthority{}.InitializerName()).([]sysModel.SysAuthority)
if !ok {
return next, errors.Wrap(system.ErrMissingDependentContext, "创建 [用户-权限] 关联失败, 未找到权限表初始化数据")
}
if err = db.Model(&entities[0]).Association("Authorities").Replace(authorityEntities); err != nil {
return next, err
}
if err = db.Model(&entities[1]).Association("Authorities").Replace(authorityEntities[:1]); err != nil {
return next, err
}
return next, err
}
func (i *initUser) DataInserted(ctx context.Context) bool {
db, ok := ctx.Value("db").(*gorm.DB)
if !ok {
return false
}
var record sysModel.SysUser
if errors.Is(db.Where("username = ?", "a303176530").
Preload("Authorities").First(&record).Error, gorm.ErrRecordNotFound) { // 判断是否存在数据
return false
}
return len(record.Authorities) > 0 && record.Authorities[0].AuthorityId == 888
}