Merge pull request #2 from Selly-Modules/feature/UpdateMethod
add updateMethod
This commit is contained in:
commit
0dca0d2011
|
@ -0,0 +1,57 @@
|
|||
package usermngmt
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/Selly-Modules/mongodb"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
|
||||
// UpdateOptions ...
|
||||
type UpdateOptions struct {
|
||||
Name string
|
||||
Phone string
|
||||
Email string
|
||||
RoleID string
|
||||
Other string
|
||||
}
|
||||
|
||||
// UpdateByUserID ...
|
||||
func (s Service) UpdateByUserID(userID string, payload UpdateOptions) error {
|
||||
var (
|
||||
ctx = context.Background()
|
||||
)
|
||||
|
||||
// Validate payload
|
||||
err := payload.validate(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Setup condition
|
||||
id, _ := mongodb.NewIDFromString(userID)
|
||||
cond := bson.M{
|
||||
"_id": id,
|
||||
}
|
||||
|
||||
// Setup update data
|
||||
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(),
|
||||
},
|
||||
}
|
||||
|
||||
// Update
|
||||
err = s.userUpdateOneByCondition(ctx, cond, updateData)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
18
db.go
18
db.go
|
@ -83,3 +83,21 @@ func (s Service) userCreate(ctx context.Context, doc User) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s Service) userUpdateOneByCondition(ctx context.Context, cond interface{}, payload interface{}) error {
|
||||
var (
|
||||
col = s.getUserCollection()
|
||||
)
|
||||
|
||||
_, err := col.UpdateOne(ctx, cond, payload)
|
||||
if err != nil {
|
||||
logger.Error("usermngmt - Update", logger.LogData{
|
||||
"cond": cond,
|
||||
"payload": payload,
|
||||
"err": err.Error(),
|
||||
})
|
||||
return fmt.Errorf("error when update user: %s", err.Error())
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
50
validate.go
50
validate.go
|
@ -73,3 +73,53 @@ func (co CreateOptions) validate(ctx context.Context) error {
|
|||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (co UpdateOptions) validate(ctx context.Context) error {
|
||||
// Name
|
||||
if co.Name == "" {
|
||||
logger.Error("usermngmt - Update: no name data", logger.LogData{
|
||||
"payload": co,
|
||||
})
|
||||
return errors.New("no name data")
|
||||
}
|
||||
|
||||
// Phone
|
||||
if co.Phone == "" {
|
||||
logger.Error("usermngmt - Update: no phone data", logger.LogData{
|
||||
"payload": co,
|
||||
})
|
||||
return errors.New("no phone data")
|
||||
}
|
||||
|
||||
// Email
|
||||
if co.Email == "" {
|
||||
logger.Error("usermngmt - Update: no email data", logger.LogData{
|
||||
"payload": co,
|
||||
})
|
||||
return errors.New("no email data")
|
||||
}
|
||||
|
||||
// RoleID
|
||||
if co.RoleID == "" {
|
||||
logger.Error("usermngmt - Update: no roleID data", logger.LogData{
|
||||
"payload": co,
|
||||
})
|
||||
return errors.New("no role id data")
|
||||
}
|
||||
|
||||
// Find roleID exists or not
|
||||
roleID, isValid := mongodb.NewIDFromString(co.RoleID)
|
||||
if !isValid {
|
||||
return errors.New("invalid role id data")
|
||||
}
|
||||
if !s.isRoleIDExisted(ctx, roleID) {
|
||||
return errors.New("role id does not exist")
|
||||
}
|
||||
|
||||
// Find phone number,email exists or not
|
||||
if s.isPhoneNumberOrEmailExisted(ctx, co.Phone, co.Email) {
|
||||
return errors.New("phone number or email already existed")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue