123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- package service
- import (
- "fmt"
- "github.com/pkg/errors"
- "golang.org/x/net/context"
- "gorm.io/gorm"
- "sghgogs.com/micro/common"
- "sghgogs.com/micro/common/errorcode"
- req "sghgogs.com/micro/shopping-service/domain/model/request"
- pb "sghgogs.com/micro/shopping-service/proto"
- "sghgogs.com/micro/shopping-service/utils"
- "sghgogs.com/micro/shopping-service/utils/authutil"
- "time"
- )
- func (svc *Service) GetRoleList(query *pb.GetRoleListRequest) ([]*pb.Role, int64, error) {
- list, i, err := svc.Repository.GetRoleList(query)
- roles := make([]*pb.Role, 0)
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return roles, 0, nil
- }
- return roles, 0, errorcode.New(svc.Namespace, err.Error(), 500)
- }
- for _, item := range list {
- roles = append(roles, svc.getRoleRes(item))
- }
- return roles, i, nil
- }
- func (svc *Service) GetAllRoles() ([]*pb.Base, error) {
- roles, err := svc.Repository.GetAllRoles()
- baseList := make([]*pb.Base, 0)
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return baseList, nil
- }
- return baseList, errorcode.New(svc.Namespace, err.Error(), 500)
- }
- return svc.getRolesToBase(roles), nil
- }
- func (svc *Service) GetRole(query *pb.GetRoleRequest) (*pb.Role, error) {
- role, err := svc.Repository.GetRole(query.RoleId)
- if err != nil {
- return &pb.Role{}, errorcode.New(svc.Namespace, err.Error(), 500)
- }
- res := svc.getRoleRes(role)
- res.Permissions = svc.getBasePermissionRes(role.Permissions)
- res.Users = svc.getBaseUserRes(role.Users)
- return res, nil
- }
- func (svc *Service) CreateRole(ctx context.Context, add *pb.CreateRoleRequest) error {
- _, by, _, _ := utils.ParseMetadata(ctx)
- add.CreatedAt = by
- if err := svc.Repository.CreateRole(add); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), 500)
- }
- roles, err := svc.Repository.AllRoles()
- if err == nil {
- items := svc.UpdateRulesItems(roles)
- authutil.JWTAuthService.SetRuleItems(items)
- }
- return nil
- }
- func (svc *Service) UpdateRole(ctx context.Context, query *pb.UpdateRoleRequest) error {
- if exists, err := svc.Repository.IsRoleExists(query.RoleId); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), 500)
- } else {
- if !exists {
- return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
- }
- }
- _, by, _, _ := utils.ParseMetadata(ctx)
- query.UpdatedBy = by
- if err := svc.Repository.UpdateRole(query); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), 500)
- }
- return nil
- }
- func (svc *Service) ToggleRole(ctx context.Context, query *pb.ToggleRoleRequest) error {
- if exists, err := svc.Repository.IsRoleExists(query.RoleId); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), 500)
- } else {
- if !exists {
- return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
- }
- }
- _, by, _, _ := utils.ParseMetadata(ctx)
- query.UpdatedBy = by
- if err := svc.Repository.ToggleRole(query); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), 500)
- }
- return nil
- }
- func (svc *Service) DeleteRole(query *pb.DeleteRoleRequest) error {
- if exists, err := svc.Repository.IsRoleExists(query.RoleId); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), 500)
- } else {
- if !exists {
- return errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400)
- }
- }
- if err := svc.Repository.DeleteRole(query.RoleId); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), 500)
- }
- return nil
- }
- func (svc *Service) getBasePermissionRes(permissions []req.Permission) []*pb.Base {
- bases := make([]*pb.Base, 0)
- for _, item := range permissions {
- bases = append(bases, &pb.Base{
- Key: item.Name,
- Value: fmt.Sprintf("%d", item.ID),
- })
- }
- return bases
- }
- func (svc *Service) getBaseUserRes(users []req.User) []*pb.Base {
- bases := make([]*pb.Base, 0)
- for _, item := range users {
- bases = append(bases, &pb.Base{
- Key: item.Username,
- Value: fmt.Sprintf("%d", item.ID),
- })
- }
- return bases
- }
- func (svc *Service) getRoleRes(role *req.Role) *pb.Role {
- var updatedAt int64
- if role.UpdatedAt != nil {
- if role.CreatedAt.Truncate(time.Second) == role.UpdatedAt.Truncate(time.Second) {
- role.UpdatedAt = nil
- } else {
- updatedAt = utils.ConvertTimeToInt64(*role.UpdatedAt)
- }
- }
- return &pb.Role{
- Id: role.ID,
- Name: role.Name,
- Description: role.Description,
- CreatedBy: role.CreatedBy,
- CreatedAt: utils.ConvertTimeToInt64(role.CreatedAt),
- UpdatedAt: updatedAt,
- UpdatedBy: role.UpdatedBy,
- Status: role.Status,
- IsReserved: role.IsReserved,
- }
- }
|