add updateMethod #2
|
@ -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
|
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
|
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