public LoginResponseDTO GoogleLogin(UserLoginViewModel user)
        {
            LoginResponseDTO result = null;

            #region Check Input
            if (user == null)
            {
                result = new LoginResponseDTO
                {
                    Status  = 1,
                    Message = "User Login information must not be null",
                    Result  = null
                };
                return(result);
            }

            if (user.RoleName != "mentor" && user.RoleName != "mentee")
            {
                result = new LoginResponseDTO
                {
                    Status  = 2,
                    Message = "User missing required role",
                    Result  = null
                };
                return(result);
            }
            #endregion

            #region Check User
            User loggedUser = _uow
                              .GetRepository <User>()
                              .GetAll()
                              .SingleOrDefault(u => u.Email == user.Email);

            if (loggedUser == null)
            {
                result = new LoginResponseDTO
                {
                    Status  = 3,
                    Result  = null,
                    Message = "Email does not exist ! Please Register !"
                };
                return(result);
            }
            #endregion

            #region Check Role

            if (user.RoleName == "mentor")
            {
                Mentor mentor = _uow
                                .GetRepository <Mentor>()
                                .GetAll()
                                .SingleOrDefault(m => m.UserId == loggedUser.UserId);
                if (mentor == null)
                {
                    result = new LoginResponseDTO
                    {
                        Status  = 4,
                        Result  = null,
                        Message = "This user is not a Mentor."
                    };
                    return(result);
                }
            }
            else if (user.RoleName == "mentee")
            {
                Mentee mentee = _uow
                                .GetRepository <Mentee>()
                                .GetAll()
                                .SingleOrDefault(m => m.UserId == loggedUser.UserId);
                if (mentee == null)
                {
                    result = new LoginResponseDTO
                    {
                        Status  = 4,
                        Result  = null,
                        Message = "This user is not a Mentee."
                    };
                    return(result);
                }
            }

            #endregion

            string jwtToken = tokenManager.CreateUserAccessToken(new UserAuthModel
            {
                Id       = loggedUser.UserId,
                Email    = loggedUser.Email,
                RoleName = user.RoleName
            });

            result = new LoginResponseDTO
            {
                Status  = 0,
                Message = "Login Successfully.",
                Result  = jwtToken
            };

            return(result);
        }
        public BaseResponseDto Insert(MentorInsertModel mentorInsertModel)
        {
            BaseResponseDto responseDto = null;

            #region Check input
            if (mentorInsertModel == null)
            {
                responseDto = new BaseResponseDto
                {
                    Status  = 1,
                    Message = "Faulthy mentor info"
                };
                return(responseDto);
            }
            #endregion

            #region Insert mentor into database
            Guid userId   = Guid.NewGuid();
            Guid mentorId = Guid.NewGuid();
            try
            {
                Mentor newMentor = new Mentor
                {
                    MentorId = mentorId,
                    UserId   = userId,
                    User     = new User
                    {
                        UserId      = userId,
                        Email       = mentorInsertModel.User.Email,
                        Fullname    = mentorInsertModel.User.Fullname,
                        YearOfBirth = mentorInsertModel.User.YearOfBirth,
                        AvatarUrl   = mentorInsertModel.User.AvatarUrl,
                        Balance     = 0,
                        Phone       = mentorInsertModel.User.Phone,
                        Description = ""
                    },
                    Rating = new Rating
                    {
                        MentorId    = mentorId,
                        RatingCount = 0,
                        RatingScore = 0
                    },
                    IsDisable = false
                };

                _uow.GetRepository <Mentor>().Insert(newMentor);
                _uow.Commit();
            }
            catch (Exception e)
            {
                throw e;
            }
            #endregion


            string jwtToken = tokenManager.CreateUserAccessToken(new UserAuthModel
            {
                Id       = mentorId,
                Email    = mentorInsertModel.User.Email,
                RoleName = "mentor"
            });


            responseDto = new BaseResponseDto
            {
                Status  = 0,
                Message = jwtToken
            };

            return(responseDto);
        }