96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
package repo
|
|
|
|
import (
|
|
"admin/apps/user/domain/entity"
|
|
"admin/apps/user/model"
|
|
"admin/internal/errcode"
|
|
"admin/lib/passlib"
|
|
"errors"
|
|
"gorm.io/gorm"
|
|
"strings"
|
|
)
|
|
|
|
type IUserRepo interface {
|
|
GetById(userId int) (*entity.User, bool, error)
|
|
GetByUser(user string) (*entity.User, bool, error)
|
|
CreateAdminUsers() error
|
|
}
|
|
|
|
func NewUserRepo(db *gorm.DB) IUserRepo {
|
|
return &userRepoImpl{db: db}
|
|
}
|
|
|
|
type userRepoImpl struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func (impl *userRepoImpl) CreateAdminUsers() error {
|
|
adminCharacter := &model.Character{
|
|
Name: "admin",
|
|
}
|
|
adminList := []*model.User{
|
|
&model.User{
|
|
UserName: "admin",
|
|
NickName: "admin",
|
|
UserPass: passlib.EncryptPassword("admin@123"),
|
|
CharacterName: adminCharacter.Name,
|
|
},
|
|
}
|
|
|
|
if err := impl.db.Create(adminCharacter).Error; err != nil {
|
|
if !strings.Contains(err.Error(), "Duplicate entry") {
|
|
return errcode.New(errcode.DBError, "create admin character fail:%v", err)
|
|
}
|
|
}
|
|
|
|
if err := impl.db.Create(adminList).Error; err != nil {
|
|
if !strings.Contains(err.Error(), "Duplicate entry") {
|
|
return errcode.New(errcode.DBError, "create admin fail:%v", err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (impl *userRepoImpl) GetById(userId int) (*entity.User, bool, error) {
|
|
po := new(model.User)
|
|
chPo := new(model.Character)
|
|
err := impl.db.Where("id = ?", userId).First(po).Error
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return entity.FromUserPo(po, chPo), false, nil
|
|
}
|
|
return nil, false, errcode.New(errcode.DBError, "get user by id:%v error:%v", userId, err)
|
|
}
|
|
err = impl.db.Where("name = ?", po.CharacterName).First(chPo).Error
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return entity.FromUserPo(po, chPo), false, nil
|
|
}
|
|
return nil, false, errcode.New(errcode.DBError, "get character by id:%v error:%v", po.CharacterName, err)
|
|
}
|
|
|
|
return entity.FromUserPo(po, chPo), true, nil
|
|
}
|
|
|
|
func (impl *userRepoImpl) GetByUser(user string) (*entity.User, bool, error) {
|
|
po := new(model.User)
|
|
chPo := new(model.Character)
|
|
err := impl.db.Where("user_name = ?", user).First(po).Error
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return entity.FromUserPo(po, chPo), false, nil
|
|
}
|
|
return nil, false, errcode.New(errcode.DBError, "get user by id:%v error:%v", user, err)
|
|
}
|
|
err = impl.db.Where("name = ?", po.CharacterName).First(chPo).Error
|
|
if err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return entity.FromUserPo(po, chPo), false, nil
|
|
}
|
|
return nil, false, errcode.New(errcode.DBError, "get character by id:%v error:%v", po.CharacterName, err)
|
|
}
|
|
|
|
return entity.FromUserPo(po, chPo), true, nil
|
|
}
|