public async Task <IActionResult> UserLogin(TRequest <UserLoginRequest> request)
        {
            if (request == null)
            {
                return(NotFound());
            }
            var response = new Response <UserLoginResponse>();

            try
            {
                request.value.Password = request.value.Password.AsMd5();
                var data = await _userService.GetByUserName(request.value.UserName);

                if (data == null)
                {
                    response.Success = false;
                    response.Message = "Tên đăng nhập không tồn tại";
                    return(Ok(response));
                }
                if (data.Password != request.value.Password)
                {
                    response.Success = false;
                    response.Message = "Mật khẩu không đúng";
                    return(Ok(response));
                }
                if (data.Deleted.Value)
                {
                    response.Success = false;
                    response.Message = "Tài khoản đã bị xóa";
                    return(Ok(response));
                }
                if (data.Status != 1)
                {
                    response.Success = false;
                    response.Message = "Tài khoản đã bị khóa";
                    return(Ok(response));
                }
                HttpContext.Session.SetObjectAsJson("User", data);
                var deparmentId     = HttpContext.Session.GetObjectFromJson <User>("User");
                var currentDateTime = DateTime.Now;
                var input           = $"{data.Id};{data.UserName};{data.IsRoot};{currentDateTime};";
                var accessToken     = input.AsSha256();
                var permission      = await _functionService.GetActionByUserId(data.Id);

                response.Data = new UserLoginResponse
                {
                    User        = data,
                    AccessToken = accessToken,
                    rights      = permission.Select(c => c.Code).ToList()
                };
                response.Success = true;
            }
            catch (Exception ex)
            {
                response.Success = false;
                response.Message = ex.Message + "," + ex.InnerException;
            }
            return(Ok(response));
        }