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 }