add RoleMethods
This commit is contained in:
		
							parent
							
								
									59d35dc111
								
							
						
					
					
						commit
						95ac63e287
					
				
							
								
								
									
										15
									
								
								action.go
								
								
								
								
							
							
						
						
									
										15
									
								
								action.go
								
								
								
								
							| 
						 | 
					@ -37,6 +37,11 @@ func (s Service) GetAllUser(query model.UserAllQuery) model.UserAll {
 | 
				
			||||||
	return user.All(query)
 | 
						return user.All(query)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ChangeAllUsersStatus ...
 | 
				
			||||||
 | 
					func (s Service) ChangeAllUsersStatus(roleID, status string) error {
 | 
				
			||||||
 | 
						return user.ChangeAllUsersStatus(roleID, status)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Role
 | 
					// Role
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
| 
						 | 
					@ -47,3 +52,13 @@ func (s Service) GetAllUser(query model.UserAllQuery) model.UserAll {
 | 
				
			||||||
func (s Service) CreateRole(payload model.RoleCreateOptions) error {
 | 
					func (s Service) CreateRole(payload model.RoleCreateOptions) error {
 | 
				
			||||||
	return role.Create(payload)
 | 
						return role.Create(payload)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// UpdateRole ...
 | 
				
			||||||
 | 
					func (s Service) UpdateRole(roleID string, payload model.RoleUpdateOptions) error {
 | 
				
			||||||
 | 
						return role.Update(roleID, payload)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GetAllRole ...
 | 
				
			||||||
 | 
					func (s Service) GetAllRole(query model.RoleAllQuery) model.RoleAll {
 | 
				
			||||||
 | 
						return role.All(query)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@ package internal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/Selly-Modules/mongodb"
 | 
						"github.com/Selly-Modules/mongodb"
 | 
				
			||||||
	"golang.org/x/crypto/bcrypt"
 | 
						"golang.org/x/crypto/bcrypt"
 | 
				
			||||||
| 
						 | 
					@ -36,3 +37,11 @@ func GetSearchString(fieldList ...string) string {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return fmt.Sprintf(format, searchList...)
 | 
						return fmt.Sprintf(format, searchList...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GetCode ...
 | 
				
			||||||
 | 
					func GetCode(s string) string {
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							underscore = "_"
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						return strings.ReplaceAll(mongodb.NonAccentVietnamese(s), " ", underscore)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								model/db.go
								
								
								
								
							
							
						
						
									
										12
									
								
								model/db.go
								
								
								
								
							| 
						 | 
					@ -8,12 +8,12 @@ import (
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DBRole ...
 | 
					// DBRole ...
 | 
				
			||||||
type DBRole struct {
 | 
					type DBRole struct {
 | 
				
			||||||
	ID        primitive.ObjectID `bson:"_id" json:"_id"`
 | 
						ID        primitive.ObjectID `bson:"_id"`
 | 
				
			||||||
	Name      string             `bson:"name" json:"name"`
 | 
						Name      string             `bson:"name"`
 | 
				
			||||||
	Code      string             `bson:"code" json:"code"`
 | 
						Code      string             `bson:"code"`
 | 
				
			||||||
	IsAdmin   bool               `bson:"isAdmin" json:"isAdmin"`
 | 
						IsAdmin   bool               `bson:"isAdmin"`
 | 
				
			||||||
	CreatedAt time.Time          `bson:"createdAt" json:"createdAt"`
 | 
						CreatedAt time.Time          `bson:"createdAt"`
 | 
				
			||||||
	UpdatedAt time.Time          `bson:"updatedAt" json:"updatedAt"`
 | 
						UpdatedAt time.Time          `bson:"updatedAt"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DBUser ...
 | 
					// DBUser ...
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,49 @@
 | 
				
			||||||
package model
 | 
					package model
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/Selly-Modules/logger"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RoleCreateOptions ...
 | 
					// RoleCreateOptions ...
 | 
				
			||||||
type RoleCreateOptions struct {
 | 
					type RoleCreateOptions struct {
 | 
				
			||||||
	Name string
 | 
						Name string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RoleUpdateOptions ...
 | 
				
			||||||
 | 
					type RoleUpdateOptions struct {
 | 
				
			||||||
 | 
						Name string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RoleAllQuery ...
 | 
				
			||||||
 | 
					type RoleAllQuery struct {
 | 
				
			||||||
 | 
						Page  int64
 | 
				
			||||||
 | 
						Limit int64
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Validate ...
 | 
				
			||||||
 | 
					func (co RoleCreateOptions) Validate() error {
 | 
				
			||||||
 | 
						// Name
 | 
				
			||||||
 | 
						if co.Name == "" {
 | 
				
			||||||
 | 
							logger.Error("usermngmt - Role - Create: no name data", logger.LogData{
 | 
				
			||||||
 | 
								"payload": co,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return errors.New("no name data")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Validate ...
 | 
				
			||||||
 | 
					func (co RoleUpdateOptions) Validate() error {
 | 
				
			||||||
 | 
						// Name
 | 
				
			||||||
 | 
						if co.Name == "" {
 | 
				
			||||||
 | 
							logger.Error("usermngmt - Role - Update: no name data", logger.LogData{
 | 
				
			||||||
 | 
								"payload": co,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return errors.New("no name data")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,30 @@
 | 
				
			||||||
package model
 | 
					package model
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RoleShort ...
 | 
					// RoleShort ...
 | 
				
			||||||
type RoleShort struct {
 | 
					type RoleShort struct {
 | 
				
			||||||
	ID      string `json:"_id"`
 | 
						ID      string `json:"_id"`
 | 
				
			||||||
	Name    string `json:"name"`
 | 
						Name    string `json:"name"`
 | 
				
			||||||
	IsAdmin bool   `json:"isAdmin"`
 | 
						IsAdmin bool   `json:"isAdmin"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Role ...
 | 
				
			||||||
 | 
					type Role struct {
 | 
				
			||||||
 | 
						ID        string    `json:"_id"`
 | 
				
			||||||
 | 
						Name      string    `json:"name"`
 | 
				
			||||||
 | 
						Code      string    `json:"code"`
 | 
				
			||||||
 | 
						IsAdmin   bool      `json:"isAdmin"`
 | 
				
			||||||
 | 
						CreatedAt time.Time `json:"createdAt"`
 | 
				
			||||||
 | 
						UpdatedAt time.Time `json:"updatedAt"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type (
 | 
				
			||||||
 | 
						// RoleAll ...
 | 
				
			||||||
 | 
						RoleAll struct {
 | 
				
			||||||
 | 
							List  []Role `json:"list"`
 | 
				
			||||||
 | 
							Total int64  `json:"total"`
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,7 @@ type UserAllQuery struct {
 | 
				
			||||||
func (co UserCreateOptions) Validate() error {
 | 
					func (co UserCreateOptions) Validate() error {
 | 
				
			||||||
	// Name
 | 
						// Name
 | 
				
			||||||
	if co.Name == "" {
 | 
						if co.Name == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Create: no Name data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Create: no name data", logger.LogData{
 | 
				
			||||||
			"payload": co,
 | 
								"payload": co,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no name data")
 | 
							return errors.New("no name data")
 | 
				
			||||||
| 
						 | 
					@ -53,7 +53,7 @@ func (co UserCreateOptions) Validate() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Phone
 | 
						// Phone
 | 
				
			||||||
	if co.Phone == "" {
 | 
						if co.Phone == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Create: no phone data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Create: no phone data", logger.LogData{
 | 
				
			||||||
			"payload": co,
 | 
								"payload": co,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no phone data")
 | 
							return errors.New("no phone data")
 | 
				
			||||||
| 
						 | 
					@ -61,7 +61,7 @@ func (co UserCreateOptions) Validate() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Email
 | 
						// Email
 | 
				
			||||||
	if co.Email == "" {
 | 
						if co.Email == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Create: no email data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Create: no email data", logger.LogData{
 | 
				
			||||||
			"payload": co,
 | 
								"payload": co,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no email data")
 | 
							return errors.New("no email data")
 | 
				
			||||||
| 
						 | 
					@ -69,7 +69,7 @@ func (co UserCreateOptions) Validate() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Password
 | 
						// Password
 | 
				
			||||||
	if co.Password == "" {
 | 
						if co.Password == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Create: no password data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Create: no password data", logger.LogData{
 | 
				
			||||||
			"payload": co,
 | 
								"payload": co,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no password data")
 | 
							return errors.New("no password data")
 | 
				
			||||||
| 
						 | 
					@ -77,7 +77,7 @@ func (co UserCreateOptions) Validate() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Status
 | 
						// Status
 | 
				
			||||||
	if co.Status == "" {
 | 
						if co.Status == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Create: no status data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Create: no status data", logger.LogData{
 | 
				
			||||||
			"payload": co,
 | 
								"payload": co,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no status data")
 | 
							return errors.New("no status data")
 | 
				
			||||||
| 
						 | 
					@ -85,7 +85,7 @@ func (co UserCreateOptions) Validate() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// RoleID
 | 
						// RoleID
 | 
				
			||||||
	if co.RoleID == "" {
 | 
						if co.RoleID == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Create: no roleID data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Create: no roleID data", logger.LogData{
 | 
				
			||||||
			"payload": co,
 | 
								"payload": co,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no role id data")
 | 
							return errors.New("no role id data")
 | 
				
			||||||
| 
						 | 
					@ -98,7 +98,7 @@ func (co UserCreateOptions) Validate() error {
 | 
				
			||||||
func (uo UserUpdateOptions) Validate() error {
 | 
					func (uo UserUpdateOptions) Validate() error {
 | 
				
			||||||
	// Name
 | 
						// Name
 | 
				
			||||||
	if uo.Name == "" {
 | 
						if uo.Name == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Update: no name data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Update: no name data", logger.LogData{
 | 
				
			||||||
			"payload": uo,
 | 
								"payload": uo,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no name data")
 | 
							return errors.New("no name data")
 | 
				
			||||||
| 
						 | 
					@ -106,7 +106,7 @@ func (uo UserUpdateOptions) Validate() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Phone
 | 
						// Phone
 | 
				
			||||||
	if uo.Phone == "" {
 | 
						if uo.Phone == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Update: no phone data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Update: no phone data", logger.LogData{
 | 
				
			||||||
			"payload": uo,
 | 
								"payload": uo,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no phone data")
 | 
							return errors.New("no phone data")
 | 
				
			||||||
| 
						 | 
					@ -114,7 +114,7 @@ func (uo UserUpdateOptions) Validate() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Email
 | 
						// Email
 | 
				
			||||||
	if uo.Email == "" {
 | 
						if uo.Email == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Update: no email data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Update: no email data", logger.LogData{
 | 
				
			||||||
			"payload": uo,
 | 
								"payload": uo,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no email data")
 | 
							return errors.New("no email data")
 | 
				
			||||||
| 
						 | 
					@ -122,7 +122,7 @@ func (uo UserUpdateOptions) Validate() error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// RoleID
 | 
						// RoleID
 | 
				
			||||||
	if uo.RoleID == "" {
 | 
						if uo.RoleID == "" {
 | 
				
			||||||
		logger.Error("usermngmt - Update: no roleID data", logger.LogData{
 | 
							logger.Error("usermngmt - User - Update: no roleID data", logger.LogData{
 | 
				
			||||||
			"payload": uo,
 | 
								"payload": uo,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("no role id data")
 | 
							return errors.New("no role id data")
 | 
				
			||||||
| 
						 | 
					@ -135,7 +135,7 @@ func (uo UserUpdateOptions) Validate() error {
 | 
				
			||||||
func (co ChangePasswordOptions) Validate() error {
 | 
					func (co ChangePasswordOptions) Validate() error {
 | 
				
			||||||
	// OldPassword, NewPassword
 | 
						// OldPassword, NewPassword
 | 
				
			||||||
	if co.OldPassword == "" || co.NewPassword == "" {
 | 
						if co.OldPassword == "" || co.NewPassword == "" {
 | 
				
			||||||
		logger.Error("usermngmt - ChangePassword: old or new password cannot be empty", logger.LogData{
 | 
							logger.Error("usermngmt - User - ChangePassword: old or new password cannot be empty", logger.LogData{
 | 
				
			||||||
			"payload": co,
 | 
								"payload": co,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
		return errors.New("old or new password cannot be empty")
 | 
							return errors.New("old or new password cannot be empty")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										78
									
								
								role/db.go
								
								
								
								
							
							
						
						
									
										78
									
								
								role/db.go
								
								
								
								
							| 
						 | 
					@ -2,11 +2,14 @@ package role
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/Selly-Modules/logger"
 | 
				
			||||||
	"github.com/Selly-Modules/usermngmt/database"
 | 
						"github.com/Selly-Modules/usermngmt/database"
 | 
				
			||||||
	"github.com/Selly-Modules/usermngmt/model"
 | 
						"github.com/Selly-Modules/usermngmt/model"
 | 
				
			||||||
	"go.mongodb.org/mongo-driver/bson"
 | 
						"go.mongodb.org/mongo-driver/bson"
 | 
				
			||||||
	"go.mongodb.org/mongo-driver/bson/primitive"
 | 
						"go.mongodb.org/mongo-driver/bson/primitive"
 | 
				
			||||||
 | 
						"go.mongodb.org/mongo-driver/mongo/options"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func findByID(ctx context.Context, id primitive.ObjectID) (model.DBRole, error) {
 | 
					func findByID(ctx context.Context, id primitive.ObjectID) (model.DBRole, error) {
 | 
				
			||||||
| 
						 | 
					@ -17,3 +20,78 @@ func findByID(ctx context.Context, id primitive.ObjectID) (model.DBRole, error)
 | 
				
			||||||
	err := col.FindOne(ctx, bson.M{"_id": id}).Decode(&doc)
 | 
						err := col.FindOne(ctx, bson.M{"_id": id}).Decode(&doc)
 | 
				
			||||||
	return doc, err
 | 
						return doc, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func create(ctx context.Context, doc model.DBRole) error {
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							col = database.GetRoleCol()
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						_, err := col.InsertOne(ctx, doc)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logger.Error("usermngmt - Role - InsertOne", logger.LogData{
 | 
				
			||||||
 | 
								"doc": doc,
 | 
				
			||||||
 | 
								"err": err.Error(),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return fmt.Errorf("error when create role: %s", err.Error())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func updateOneByCondition(ctx context.Context, cond interface{}, payload interface{}) error {
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							col = database.GetRoleCol()
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						_, err := col.UpdateOne(ctx, cond, payload)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logger.Error("usermngmt - Role - UpdateOne", logger.LogData{
 | 
				
			||||||
 | 
								"cond":    cond,
 | 
				
			||||||
 | 
								"payload": payload,
 | 
				
			||||||
 | 
								"err":     err.Error(),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return fmt.Errorf("error when update role: %s", err.Error())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func findByCondition(ctx context.Context, cond interface{}, opts ...*options.FindOptions) (docs []model.DBRole) {
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							col = database.GetRoleCol()
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						docs = make([]model.DBRole, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cursor, err := col.Find(ctx, cond, opts...)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logger.Error("usermngmt - Role - Find", logger.LogData{
 | 
				
			||||||
 | 
								"cond": cond,
 | 
				
			||||||
 | 
								"opts": opts,
 | 
				
			||||||
 | 
								"err":  err.Error(),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						defer cursor.Close(ctx)
 | 
				
			||||||
 | 
						if err = cursor.All(ctx, &docs); err != nil {
 | 
				
			||||||
 | 
							logger.Error("usermngmt - Role - Decode", logger.LogData{
 | 
				
			||||||
 | 
								"cond": cond,
 | 
				
			||||||
 | 
								"opts": opts,
 | 
				
			||||||
 | 
								"err":  err.Error(),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// countByCondition ...
 | 
				
			||||||
 | 
					func countByCondition(ctx context.Context, cond interface{}) int64 {
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							col = database.GetRoleCol()
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						total, err := col.CountDocuments(ctx, cond)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logger.Error("usermngmt - Role - CountDocuments", logger.LogData{
 | 
				
			||||||
 | 
								"err":  err.Error(),
 | 
				
			||||||
 | 
								"cond": cond,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return total
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										130
									
								
								role/handle.go
								
								
								
								
							
							
						
						
									
										130
									
								
								role/handle.go
								
								
								
								
							| 
						 | 
					@ -2,19 +2,133 @@ package role
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"errors"
 | 
				
			||||||
 | 
						"sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/Selly-Modules/mongodb"
 | 
				
			||||||
 | 
						"github.com/Selly-Modules/usermngmt/internal"
 | 
				
			||||||
	"github.com/Selly-Modules/usermngmt/model"
 | 
						"github.com/Selly-Modules/usermngmt/model"
 | 
				
			||||||
	"go.mongodb.org/mongo-driver/bson/primitive"
 | 
						"go.mongodb.org/mongo-driver/bson"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FindByID ...
 | 
					 | 
				
			||||||
func FindByID(ctx context.Context, id primitive.ObjectID) (model.DBRole, error) {
 | 
					 | 
				
			||||||
	role, err := findByID(ctx, id)
 | 
					 | 
				
			||||||
	return role, err
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Create ...
 | 
					// Create ...
 | 
				
			||||||
func Create(payload model.RoleCreateOptions) error {
 | 
					func Create(payload model.RoleCreateOptions) error {
 | 
				
			||||||
	// TODO later
 | 
						var (
 | 
				
			||||||
 | 
							ctx = context.Background()
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Validate payload
 | 
				
			||||||
 | 
						if err := payload.Validate(); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// New role data from payload
 | 
				
			||||||
 | 
						doc := newRole(payload)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Create role
 | 
				
			||||||
 | 
						if err := create(ctx, doc); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// newRole ...
 | 
				
			||||||
 | 
					func newRole(payload model.RoleCreateOptions) model.DBRole {
 | 
				
			||||||
 | 
						timeNow := internal.Now()
 | 
				
			||||||
 | 
						return model.DBRole{
 | 
				
			||||||
 | 
							ID:        mongodb.NewObjectID(),
 | 
				
			||||||
 | 
							Name:      payload.Name,
 | 
				
			||||||
 | 
							Code:      internal.GetCode(payload.Name),
 | 
				
			||||||
 | 
							CreatedAt: timeNow,
 | 
				
			||||||
 | 
							UpdatedAt: timeNow,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Update ...
 | 
				
			||||||
 | 
					func Update(roleID string, payload model.RoleUpdateOptions) error {
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							ctx = context.Background()
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Validate payload
 | 
				
			||||||
 | 
						if err := payload.Validate(); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Validate roleID
 | 
				
			||||||
 | 
						id, isValid := mongodb.NewIDFromString(roleID)
 | 
				
			||||||
 | 
						if !isValid {
 | 
				
			||||||
 | 
							return errors.New("invalid role id data")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Setup condition
 | 
				
			||||||
 | 
						cond := bson.M{
 | 
				
			||||||
 | 
							"_id": id,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Setup update data
 | 
				
			||||||
 | 
						updateData := bson.M{
 | 
				
			||||||
 | 
							"$set": bson.M{
 | 
				
			||||||
 | 
								"name":      payload.Name,
 | 
				
			||||||
 | 
								"code":      internal.GetCode(payload.Name),
 | 
				
			||||||
 | 
								"updatedAt": internal.Now(),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Update
 | 
				
			||||||
 | 
						if err := updateOneByCondition(ctx, cond, updateData); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// All ...
 | 
				
			||||||
 | 
					func All(queryParams model.RoleAllQuery) (r model.RoleAll) {
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							ctx  = context.Background()
 | 
				
			||||||
 | 
							wg   sync.WaitGroup
 | 
				
			||||||
 | 
							cond = bson.M{}
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						query := model.CommonQuery{
 | 
				
			||||||
 | 
							Page:  queryParams.Page,
 | 
				
			||||||
 | 
							Limit: queryParams.Limit,
 | 
				
			||||||
 | 
							Sort:  bson.M{"createdAt": -1},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Assign condition
 | 
				
			||||||
 | 
						query.SetDefaultLimit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wg.Add(1)
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							defer wg.Done()
 | 
				
			||||||
 | 
							docs := findByCondition(ctx, cond, query.GetFindOptionsUsingPage())
 | 
				
			||||||
 | 
							r.List = getResponseList(docs)
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wg.Add(1)
 | 
				
			||||||
 | 
						go func() {
 | 
				
			||||||
 | 
							defer wg.Done()
 | 
				
			||||||
 | 
							r.Total = countByCondition(ctx, cond)
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wg.Wait()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func getResponseList(roles []model.DBRole) []model.Role {
 | 
				
			||||||
 | 
						res := make([]model.Role, 0)
 | 
				
			||||||
 | 
						for _, role := range roles {
 | 
				
			||||||
 | 
							res = append(res, model.Role{
 | 
				
			||||||
 | 
								ID:        role.ID.Hex(),
 | 
				
			||||||
 | 
								Name:      role.Name,
 | 
				
			||||||
 | 
								Code:      role.Code,
 | 
				
			||||||
 | 
								CreatedAt: role.CreatedAt,
 | 
				
			||||||
 | 
								UpdatedAt: role.UpdatedAt,
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return res
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										29
									
								
								user/db.go
								
								
								
								
							
							
						
						
									
										29
									
								
								user/db.go
								
								
								
								
							| 
						 | 
					@ -29,7 +29,7 @@ func isPhoneNumberOrEmailExisted(ctx context.Context, phone, email string) bool
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	total, err := col.CountDocuments(ctx, cond)
 | 
						total, err := col.CountDocuments(ctx, cond)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error("usermngmt - countUserByCondition", logger.LogData{
 | 
							logger.Error("usermngmt - User - CountDocuments", logger.LogData{
 | 
				
			||||||
			"condition": cond,
 | 
								"condition": cond,
 | 
				
			||||||
			"err":       err.Error(),
 | 
								"err":       err.Error(),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
| 
						 | 
					@ -48,7 +48,7 @@ func isRoleIDExisted(ctx context.Context, roleID primitive.ObjectID) bool {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	total, err := col.CountDocuments(ctx, cond)
 | 
						total, err := col.CountDocuments(ctx, cond)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error("usermngmt - countRoleByCondition", logger.LogData{
 | 
							logger.Error("usermngmt - Role - CountDocuments", logger.LogData{
 | 
				
			||||||
			"condition": cond,
 | 
								"condition": cond,
 | 
				
			||||||
			"err":       err.Error(),
 | 
								"err":       err.Error(),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
| 
						 | 
					@ -72,7 +72,7 @@ func create(ctx context.Context, doc model.DBUser) error {
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	_, err := col.InsertOne(ctx, doc)
 | 
						_, err := col.InsertOne(ctx, doc)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error("usermngmt - Create", logger.LogData{
 | 
							logger.Error("usermngmt - User - InsertOne", logger.LogData{
 | 
				
			||||||
			"doc": doc,
 | 
								"doc": doc,
 | 
				
			||||||
			"err": err.Error(),
 | 
								"err": err.Error(),
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,24 @@ func updateOneByCondition(ctx context.Context, cond interface{}, payload interfa
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	_, err := col.UpdateOne(ctx, cond, payload)
 | 
						_, err := col.UpdateOne(ctx, cond, payload)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error("usermngmt - Update", logger.LogData{
 | 
							logger.Error("usermngmt - User - UpdateOne", logger.LogData{
 | 
				
			||||||
 | 
								"cond":    cond,
 | 
				
			||||||
 | 
								"payload": payload,
 | 
				
			||||||
 | 
								"err":     err.Error(),
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
							return fmt.Errorf("error when update user: %s", err.Error())
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return err
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func updateManyByCondition(ctx context.Context, cond interface{}, payload interface{}) error {
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							col = database.GetUserCol()
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
						_, err := col.UpdateMany(ctx, cond, payload)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logger.Error("usermngmt - User - UpdateMany", logger.LogData{
 | 
				
			||||||
			"cond":    cond,
 | 
								"cond":    cond,
 | 
				
			||||||
			"payload": payload,
 | 
								"payload": payload,
 | 
				
			||||||
			"err":     err.Error(),
 | 
								"err":     err.Error(),
 | 
				
			||||||
| 
						 | 
					@ -116,7 +133,7 @@ func findByCondition(ctx context.Context, cond interface{}, opts ...*options.Fin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cursor, err := col.Find(ctx, cond, opts...)
 | 
						cursor, err := col.Find(ctx, cond, opts...)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		logger.Error("usermngmt - All", logger.LogData{
 | 
							logger.Error("usermngmt - User - Find", logger.LogData{
 | 
				
			||||||
			"cond": cond,
 | 
								"cond": cond,
 | 
				
			||||||
			"opts": opts,
 | 
								"opts": opts,
 | 
				
			||||||
			"err":  err.Error(),
 | 
								"err":  err.Error(),
 | 
				
			||||||
| 
						 | 
					@ -125,7 +142,7 @@ func findByCondition(ctx context.Context, cond interface{}, opts ...*options.Fin
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer cursor.Close(ctx)
 | 
						defer cursor.Close(ctx)
 | 
				
			||||||
	if err = cursor.All(ctx, &docs); err != nil {
 | 
						if err = cursor.All(ctx, &docs); err != nil {
 | 
				
			||||||
		logger.Error("usermngmt - All - decode", logger.LogData{
 | 
							logger.Error("usermngmt - User - Decode", logger.LogData{
 | 
				
			||||||
			"cond": cond,
 | 
								"cond": cond,
 | 
				
			||||||
			"opts": opts,
 | 
								"opts": opts,
 | 
				
			||||||
			"err":  err.Error(),
 | 
								"err":  err.Error(),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -257,3 +257,36 @@ func ChangeUserStatus(userID, newStatus string) error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ChangeAllUsersStatus ...
 | 
				
			||||||
 | 
					func ChangeAllUsersStatus(roleID, status string) error {
 | 
				
			||||||
 | 
						var (
 | 
				
			||||||
 | 
							ctx = context.Background()
 | 
				
			||||||
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Validate roleID
 | 
				
			||||||
 | 
						id, isValid := mongodb.NewIDFromString(roleID)
 | 
				
			||||||
 | 
						if !isValid {
 | 
				
			||||||
 | 
							return errors.New("invalid role id data")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Setup condition
 | 
				
			||||||
 | 
						cond := bson.M{
 | 
				
			||||||
 | 
							"roleId": id,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Setup update data
 | 
				
			||||||
 | 
						updateData := bson.M{
 | 
				
			||||||
 | 
							"$set": bson.M{
 | 
				
			||||||
 | 
								"status":    status,
 | 
				
			||||||
 | 
								"updatedAt": internal.Now(),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Update
 | 
				
			||||||
 | 
						if err := updateManyByCondition(ctx, cond, updateData); err != nil {
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue