/**
  * @param UserModelBase $user
  * @param $key
  * @param int $hours
  * @return static
  */
 public static function createUserResetToken(UserModelBase $user, $key, $hours = 24)
 {
     \DB::beginTransaction();
     $expires_at = Carbon::now()->addHour($hours)->format('Y-m-d H:i:s');
     $random = Random::getRandStr('32', 'a-z0-9');
     $token = static::create(array('token' => $random, 'key' => $key, 'user_id' => $user->getKey(), 'expires_at' => $expires_at));
     \DB::commit();
     return $token;
 }
 /**
  * @param null|string $filename
  * @return void
  */
 public function save($filename = null)
 {
     if (is_null($filename)) {
         $filename = time() . Random::getRandStr(32);
     }
     $this->filename = $filename;
     $this->epub->finalize();
     $this->epub->saveBook($filename, storage_path($this->getPath()));
 }