diff --git a/action_create.go b/action_create.go index 27a17fc..616eae2 100644 --- a/action_create.go +++ b/action_create.go @@ -48,6 +48,7 @@ func (payload CreateOptions) newUser() (result User, err error) { return User{ ID: mongodb.NewObjectID(), Name: payload.Name, + SearchString: getSearchString(payload.Name, payload.Phone, payload.Email), Phone: payload.Phone, Email: payload.Email, HashedPassword: hashPassword(payload.Password), diff --git a/action_update.go b/action_update.go index 064f091..6612e13 100644 --- a/action_update.go +++ b/action_update.go @@ -44,12 +44,13 @@ func (s Service) UpdateByUserID(userID string, payload UpdateOptions) error { roleID, _ := mongodb.NewIDFromString(payload.RoleID) updateData := bson.M{ "$set": bson.M{ - "name": payload.Name, - "phone": payload.Phone, - "email": payload.Email, - "roleId": roleID, - "other": payload.Other, - "updatedAt": now(), + "name": payload.Name, + "searchString": getSearchString(payload.Name, payload.Phone, payload.Email), + "phone": payload.Phone, + "email": payload.Email, + "roleId": roleID, + "other": payload.Other, + "updatedAt": now(), }, } diff --git a/helper.go b/helper.go index ec1dbca..fbee0db 100644 --- a/helper.go +++ b/helper.go @@ -1,6 +1,9 @@ package usermngmt import ( + "fmt" + + "github.com/Selly-Modules/mongodb" "golang.org/x/crypto/bcrypt" ) @@ -13,3 +16,20 @@ func checkPasswordHash(password, hash string) bool { err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) return err == nil } + +func getSearchString(fieldList ...string) string { + var ( + searchList = make([]interface{}, 0) + format = "" + ) + + for i, value := range fieldList { + searchList = append(searchList, mongodb.NonAccentVietnamese(value)) + if i == 0 { + format += "%s" + continue + } + format += " %s" + } + return fmt.Sprintf(format, searchList...) +} diff --git a/model.go b/model.go index 5479aa4..a44ee3d 100644 --- a/model.go +++ b/model.go @@ -10,6 +10,7 @@ import ( type User struct { ID primitive.ObjectID `bson:"_id" json:"_id"` Name string `bson:"name" json:"name"` + SearchString string `bson:"searchString" json:"-"` Phone string `bson:"phone" json:"phone"` // unique Email string `bson:"email" json:"email"` // unique HashedPassword string `bson:"hashedPassword" json:"-"`