作者 yangfu

添加重置手机号

... ... @@ -10,9 +10,9 @@ import (
type PhoneAuthResetPhoneCommand struct {
// 用户Id 用户唯一标识
UserId int64 `cname:"用户Id 用户唯一标识" json:"userId,string" valid:"Required"`
OldPhone int `cname:"" json:"oldPhone" valid:"Required"`
NewPhone int `cname:"" json:"newPhone" valid:"Required"`
UserId int64 `cname:"用户Id 用户唯一标识" json:"userId"`
OldPhone string `cname:"" json:"oldPhone" valid:"Required"`
NewPhone string `cname:"" json:"newPhone" valid:"Required"`
}
func (phoneAuthResetPhoneCommand *PhoneAuthResetPhoneCommand) Valid(validation *validation.Validation) {
... ...
... ... @@ -200,10 +200,20 @@ func (authService *AuthService) PhoneAuthResetPhone(phoneAuthResetPhoneCommand *
defer func() {
transactionContext.RollbackTransaction()
}()
resetPhoneService, err := factory.CreatePgAuthResetPhoneService(map[string]interface{}{
"transactionContext": transactionContext,
})
if err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
if err := resetPhoneService.ResetPhone(nil, phoneAuthResetPhoneCommand.OldPhone, phoneAuthResetPhoneCommand.NewPhone); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
if err := transactionContext.CommitTransaction(); err != nil {
return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error())
}
return nil, nil
return struct{}{}, nil
}
// 刷新IM信息
... ...
... ... @@ -13,3 +13,11 @@ func CreateSignUpCompanyService(options map[string]interface{}) (service.PgSignU
}
return domainService.NewPgSignUpCompanyServiceService(transactionContext)
}
func CreatePgAuthResetPhoneService(options map[string]interface{}) (service.PgAuthResetPhoneService, error) {
var transactionContext *pgTransaction.TransactionContext
if value, ok := options["transactionContext"]; ok {
transactionContext = value.(*pgTransaction.TransactionContext)
}
return domainService.NewPgAuthResetPhoneService(transactionContext)
}
... ...
package service
import "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain"
// PgAuthResetPhoneService 重置手机号服务
type PgAuthResetPhoneService interface {
ResetPhone(optUser *domain.User, oldPhone, newPhone string) error
}
... ...
package domain
import "time"
import (
"time"
)
const (
DefaultAdminUserCode = "ADMIN01"
... ... @@ -96,18 +98,18 @@ func (user *User) Update(data map[string]interface{}) error {
if departmentId, ok := data["departmentId"]; ok {
user.DepartmentId = departmentId.(int64)
}
if userName, ok := data["userName"]; ok {
user.UserInfo.UserName = userName.(string)
}
if phone, ok := data["phone"]; ok {
user.UserInfo.Phone = phone.(string)
}
if avatar, ok := data["avatar"]; ok {
user.UserInfo.Avatar = avatar.(string)
}
if email, ok := data["email"]; ok {
user.UserInfo.Email = email.(string)
}
//if userName, ok := data["userName"]; ok {
// user.UserInfo.UserName = userName.(string)
//}
//if phone, ok := data["phone"]; ok {
// user.UserInfo.Phone = phone.(string)
//}
//if avatar, ok := data["avatar"]; ok {
// user.UserInfo.Avatar = avatar.(string)
//}
//if email, ok := data["email"]; ok {
// user.UserInfo.Email = email.(string)
//}
if userOrg, ok := data["userOrg"]; ok {
user.UserOrg = userOrg.([]*Org)
}
... ... @@ -151,3 +153,5 @@ func (user *User) Update(data map[string]interface{}) error {
}
type UserStatus int
/***** 1.基础模块函数 *****/
... ...
... ... @@ -137,6 +137,9 @@ func (userBase *UserBase) ResetPassword(account, password string) error {
}
func (userBase *UserBase) ResetPhone(oldPhone, newPhone string) error {
if userBase.Status != int(UserStatusEnable) {
return fmt.Errorf("该用户不存在")
}
if !strings.EqualFold(oldPhone, userBase.Account) {
return fmt.Errorf("该用户不存在")
}
... ...
package domainService
import (
"fmt"
pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/domain"
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/infrastructure/repository"
)
// PgAuthResetPhoneService 重置手机号服务
type PgAuthResetPhoneService struct {
transactionContext *pgTransaction.TransactionContext
}
// ResetPhone 重置手机号
//
// oldPhone 旧手机号
// newPhone 新手机号
func (ptr *PgAuthResetPhoneService) ResetPhone(optUser *domain.User, oldPhone, newPhone string) error {
if len(oldPhone) == 0 {
return fmt.Errorf("旧手机号不能为空")
}
if len(newPhone) == 0 {
return fmt.Errorf("新手机号不能为空")
}
// 1.重置当前账号的手机号
var err error
var userBase *domain.UserBase
userBaseRepository, _ := repository.NewUserBaseRepository(ptr.transactionContext)
if userBase, err = userBaseRepository.FindOne(map[string]interface{}{"account": oldPhone}); err != nil {
return err
}
if err == domain.ErrorNotFound {
return fmt.Errorf("该用户不存在")
}
if err = userBase.ResetPhone(oldPhone, newPhone); err != nil {
return err
}
if _, err := userBaseRepository.Save(userBase); err != nil {
return err
}
// 2.重置跟账号相关的账号的手机号(冗余的扩展数据)
userRepository, _ := repository.NewUserRepository(ptr.transactionContext)
for i := 0; i < len(userBase.RelatedUsers); i++ {
userId := userBase.RelatedUsers[i]
if user, _ := userRepository.FindOne(map[string]interface{}{"userId": userId}); user != nil {
user.Update(map[string]interface{}{"phone": newPhone})
if _, err := userRepository.Save(user); err != nil {
return err
}
}
}
return err
}
func NewPgAuthResetPhoneService(transactionContext *pgTransaction.TransactionContext) (*PgAuthResetPhoneService, error) {
if transactionContext == nil {
return nil, fmt.Errorf("transactionContext参数不能为nil")
} else {
return &PgAuthResetPhoneService{
transactionContext: transactionContext,
}, nil
}
}
... ...
... ... @@ -66,7 +66,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error)
&user.DepartmentId,
&user.UserOrg,
&user.UserRole,
pg.Array(&user.FavoriteMenus),
&user.FavoriteMenus,
&user.CooperationInfo,
&user.EnableStatus,
&user.Ext,
... ... @@ -83,7 +83,7 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error)
user.DepartmentId,
user.UserOrg,
user.UserRole,
pg.Array(user.FavoriteMenus),
user.FavoriteMenus,
user.CooperationInfo,
user.EnableStatus,
user.Ext,
... ... @@ -102,9 +102,9 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error)
&user.UserCode,
&user.OrganizationId,
&user.DepartmentId,
pg.Array(&user.UserOrg),
pg.Array(&user.UserRole),
pg.Array(&user.FavoriteMenus),
&user.UserOrg,
&user.UserRole,
&user.FavoriteMenus,
&user.CooperationInfo,
&user.EnableStatus,
&user.Ext,
... ... @@ -118,9 +118,9 @@ func (repository *UserRepository) Save(user *domain.User) (*domain.User, error)
user.UserCode,
user.OrganizationId,
user.DepartmentId,
pg.Array(user.UserOrg),
pg.Array(user.UserRole),
pg.Array(user.FavoriteMenus),
user.UserOrg,
user.UserRole,
user.FavoriteMenus,
user.CooperationInfo,
user.EnableStatus,
user.Ext,
... ... @@ -146,7 +146,7 @@ func (repository *UserRepository) FindOne(queryOptions map[string]interface{}) (
tx := repository.transactionContext.PgTx
userModel := new(models.User)
query := sqlbuilder.BuildQuery(tx.Model(userModel), queryOptions)
query.SetWhereByQueryOption("user.user_id = ?", "userId")
query.SetWhereByQueryOption("user_id = ?", "userId")
if err := query.First(); err != nil {
if err.Error() == "pg: no rows in result set" {
return nil, fmt.Errorf("没有此资源")
... ...
... ... @@ -10,7 +10,6 @@ import (
)
var _ = Describe("企业注册", func() {
return
BeforeEach(func() {
//_, err := pG.DB.QueryOne(
// pg.Scan(&Id),
... ...
... ... @@ -11,23 +11,29 @@ import (
)
var _ = Describe("重置手机号", func() {
return
var Id int64
BeforeEach(func() {
_, err := pG.DB.QueryOne(
pg.Scan(&Id),
"INSERT INTO s () VALUES () RETURNING _id",
"INSERT INTO \"users\".\"user_base\"(\"user_base_id\", \"user_info\", \"account\", \"password\", \"im\", \"related_user\", \"status\", \"created_at\", \"updated_at\") VALUES (999, '{\"phone\": \"phone\", \"userName\": \"string\"}', 'phone', 'string', '{\"accid\": \"\", \"imToken\": \"\", \"csAccountId\": \"\"}', '{999}', 1, '2021-07-24 10:16:17.680805+08', '2021-07-24 10:16:17.680805+08') RETURNING user_base_id;",
)
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.QueryOne(
pg.Scan(&Id),
"INSERT INTO \"users\".\"user\"(\"user_id\", \"company_id\", \"user_base_id\", \"user_type\", \"user_code\", \"organization_id\", \"department_id\", \"user_org\", \"user_role\", \"favorite_menus\", \"cooperation_info\", \"enable_status\", \"ext\", \"created_at\", \"updated_at\") VALUES (999, 5, 999, 1025, 'ADMIN01', 5, 5, '[{\"orgId\": 5, \"orgName\": \"string1\", \"createdAt\": \"0001-01-01T00:00:00Z\", \"deletedAt\": \"0001-01-01T00:00:00Z\", \"updatedAt\": \"0001-01-01T00:00:00Z\"}]', '[{\"ext\": {\"orgName\": \"string1\"}, \"roleId\": 5, \"roleName\": \"企业管理员\", \"createdAt\": \"0001-01-01T00:00:00Z\", \"updatedAt\": \"0001-01-01T00:00:00Z\"}]', '[]', '{\"cooperationCompany\": \"\", \"cooperationDeadline\": \"0001-01-01T00:00:00Z\"}', 1, '{\"phone\": \"18860183031\", \"depName\": \"string1\", \"orgName\": \"string1\"}', '2021-07-24 10:16:17.680805+08', '2021-07-24 10:16:17.680805+08');\n",
)
Expect(err).NotTo(HaveOccurred())
})
Describe("重置手机号", func() {
Context("", func() {
It("", func() {
httpExpect := httpexpect.New(GinkgoT(), server.URL)
body := map[string]interface{}{
"userId": "int64",
"oldPhone": "int",
"newPhone": "int",
"oldPhone": "phone",
"newPhone": "phone1",
}
httpExpect.POST("/auth/reset-phone").
WithJSON(body).
... ... @@ -42,7 +48,9 @@ var _ = Describe("重置手机号", func() {
})
})
AfterEach(func() {
_, err := pG.DB.Exec("DELETE FROM s WHERE true")
_, err := pG.DB.Exec("DELETE FROM users.user_base WHERE user_base_id = 999")
Expect(err).NotTo(HaveOccurred())
_, err = pG.DB.Exec(`DELETE FROM users."user" WHERE user_id = 999`)
Expect(err).NotTo(HaveOccurred())
})
})
... ...