/**
  * Persists a new access token to permanent storage.
  *
  * @param \League\OAuth2\Server\Entities\AccessTokenEntityInterface|AccessTokenEntity $accessTokenEntity
  */
 public function persistNewAccessToken(AccessTokenEntityInterface $accessTokenEntity)
 {
     $accessTokenModel = $this->modelResolver->getModel('AccessTokenModel');
     $newAccessToken = ['token' => $accessTokenEntity->getIdentifier(), 'client_id' => $accessTokenEntity->getClient()->getIdentifier(), 'expire_time' => $accessTokenEntity->getExpiryDateTime()];
     if (!is_null($accessTokenEntity->getUserIdentifier())) {
         $newAccessToken['user_id'] = $accessTokenEntity->getUserIdentifier();
     }
     if (!is_null($accessTokenEntity->getName())) {
         $newAccessToken['name'] = $accessTokenEntity->getName();
     }
     if ($accessTokenEntity->getScopes() !== []) {
         $scopes = array_map(function ($Scope) {
             /* @var ScopeEntity $Scope */
             return $Scope->getIdentifier();
         }, $accessTokenEntity->getScopes());
         if ($accessTokenModel::$canHandleArray) {
             $newAccessToken['scopes'] = $scopes;
         } else {
             $newAccessToken['scopes'] = json_encode($scopes);
         }
     }
     $accessTokenModel::create($newAccessToken);
 }