package service import ( "github.com/pkg/errors" "gorm.io/gorm" "sghgogs.com/micro/common" "sghgogs.com/micro/common/errorcode" pb "sghgogs.com/micro/shopping-service/proto" "sghgogs.com/micro/shopping-service/utils" ) func (svc *Service) Login(auth *pb.LoginRequest) (*pb.User, int64, error) { var user *pb.User group, err := svc.Repository.GetUserGroup(&pb.GetUserGroupRequest{Code: auth.Code}) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return user, 0, errorcode.New(svc.Namespace, common.ErrorMessage[common.InvalidCodeError], 500) } return user, 0, errorcode.New(svc.Namespace, err.Error(), 500) } if !utils.IsUserGroup(group.ID) { return user, 0, errorcode.New(svc.Namespace, common.ErrorMessage[common.NotAssignedError], 500) } if utils.UserUserGroupID == group.ID { if exists, err := svc.Repository.IsUserExists(auth.Username); err != nil { return user, 0, errorcode.New(svc.Namespace, err.Error(), 500) } else { if !exists { return user, 0, errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400) } } } if utils.AdminUserGroupID == group.ID { if exists, err := svc.Repository.IsAdminUserExists(auth.Username); err != nil { return user, 0, errorcode.New(svc.Namespace, err.Error(), 500) } else { if !exists { return user, 0, errorcode.New(svc.Namespace, common.ErrorMessage[common.AccountDoesNotExist], 400) } } } login, err := svc.Repository.Login(auth.Username) if err != nil { return user, 0, errorcode.New(svc.Namespace, err.Error(), 500) } if !utils.CheckPasswordHash(auth.Password, login.Password) { return user, 0, errorcode.BadRequest(svc.Namespace, common.ErrorMessage[common.IncorrectPasswordErrorCode]) } res := svc.getUserRes(&login) if utils.AdminUserGroupID == group.ID { res.Roles = svc.getBaseRoleRes(login.Roles) } return res, group.ID, nil } func (svc *Service) Profile(groupID int64, userID int64) (*pb.User, error) { // Profile profile, err := svc.Repository.Profile(userID) if err != nil { return &pb.User{}, errorcode.New(svc.Namespace, err.Error(), 500) } res := svc.getUserRes(&profile) if utils.AdminUserGroupID == groupID { res.Roles = svc.getBaseRoleRes(profile.Roles) } return res, nil }