96 lines
2.6 KiB
Go
Raw Normal View History

2025-04-30 15:46:14 +08:00
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
}