From fffb8fd441762b820b7203f539b9ae8684893fb6 Mon Sep 17 00:00:00 2001 From: printempw Date: Tue, 30 Aug 2016 08:55:02 +0800 Subject: [PATCH] add file cache for non-existent players --- app/Events/CheckPlayerExists.php | 34 ++++++++++++++++ app/Events/PlayerWasAdded.php | 35 ++++++++++++++++ app/Http/Controllers/PlayerController.php | 12 +++--- .../Middleware/CheckPlayerExistMiddleware.php | 4 ++ app/Listeners/CachePlayerExists.php | 40 +++++++++++++++++++ app/Listeners/FreshNotFoundCache.php | 35 ++++++++++++++++ app/Models/Player.php | 14 ++++++- app/Providers/EventServiceProvider.php | 6 +++ storage/cache/notfound/.gitignore | 3 ++ 9 files changed, 177 insertions(+), 6 deletions(-) create mode 100644 app/Events/CheckPlayerExists.php create mode 100644 app/Events/PlayerWasAdded.php create mode 100644 app/Listeners/CachePlayerExists.php create mode 100644 app/Listeners/FreshNotFoundCache.php create mode 100644 storage/cache/notfound/.gitignore diff --git a/app/Events/CheckPlayerExists.php b/app/Events/CheckPlayerExists.php new file mode 100644 index 00000000..f330d83a --- /dev/null +++ b/app/Events/CheckPlayerExists.php @@ -0,0 +1,34 @@ +player_name = $player_name; + } + + /** + * Get the channels the event should be broadcast on. + * + * @return array + */ + public function broadcastOn() + { + return []; + } +} diff --git a/app/Events/PlayerWasAdded.php b/app/Events/PlayerWasAdded.php new file mode 100644 index 00000000..6b7e494c --- /dev/null +++ b/app/Events/PlayerWasAdded.php @@ -0,0 +1,35 @@ +player = $player; + } + + /** + * Get the channels the event should be broadcast on. + * + * @return array + */ + public function broadcastOn() + { + return []; + } +} diff --git a/app/Http/Controllers/PlayerController.php b/app/Http/Controllers/PlayerController.php index 64c3f579..9708198c 100644 --- a/app/Http/Controllers/PlayerController.php +++ b/app/Http/Controllers/PlayerController.php @@ -3,12 +3,14 @@ namespace App\Http\Controllers; use Illuminate\Routing\Controller as BaseController; +use App\Events\PlayerWasAdded; use App\Models\User; use App\Models\Player; use App\Models\PlayerModel; use App\Models\Texture; use App\Exceptions\PrettyPageException; use Validate; +use Event; use Utils; use Option; use View; @@ -61,6 +63,8 @@ class PlayerController extends BaseController $player->last_modified = Utils::getTimeFormatted(); $player->save(); + Event::fire(new PlayerWasAdded($player)); + $this->user->setScore(Option::get('score_per_player'), 'minus'); View::json('成功添加了角色 '.$player_name.'', 0); @@ -98,12 +102,10 @@ class PlayerController extends BaseController if (!PlayerModel::where('player_name', $new_player_name)->get()->isEmpty()) View::json('此角色名已被他人使用,换一个吧~', 6); - $old_player_name = $this->player->model->player_name; - $this->player->model->player_name = $new_player_name; - $this->player->model->last_modified = Utils::getTimeFormatted(); - $this->player->model->save(); + $old_player_name = $this->player_name; + $this->player->rename($new_player_name); - View::json('角色 '.$old_player_name.' 已更名为 '.$_POST['new_player_name'], 0); + View::json("角色 $old_player_name 已更名为 $new_player_name", 0); } /** diff --git a/app/Http/Middleware/CheckPlayerExistMiddleware.php b/app/Http/Middleware/CheckPlayerExistMiddleware.php index 16f4f80e..83a58dce 100644 --- a/app/Http/Middleware/CheckPlayerExistMiddleware.php +++ b/app/Http/Middleware/CheckPlayerExistMiddleware.php @@ -3,6 +3,8 @@ namespace App\Http\Middleware; use App\Models\PlayerModel; +use App\Events\CheckPlayerExists; +use Event; class CheckPlayerExistMiddleware { @@ -16,6 +18,8 @@ class CheckPlayerExistMiddleware $player_name = urldecode($matches[1]); + Event::fire(new CheckPlayerExists($player_name)); + if (PlayerModel::where('player_name', $player_name)->get()->isEmpty()) { abort(404, '角色不存在'); } diff --git a/app/Listeners/CachePlayerExists.php b/app/Listeners/CachePlayerExists.php new file mode 100644 index 00000000..c875d040 --- /dev/null +++ b/app/Listeners/CachePlayerExists.php @@ -0,0 +1,40 @@ +player_name; + + if (!\Storage::disk('cache')->has("notfound/$player_name")) { + if (PlayerModel::where('player_name', $player_name)->get()->isEmpty()) { + \Storage::disk('cache')->put("notfound/$player_name", ''); + } + } else { + abort(404, '角色不存在'); + } + } +} diff --git a/app/Listeners/FreshNotFoundCache.php b/app/Listeners/FreshNotFoundCache.php new file mode 100644 index 00000000..bccdc1f3 --- /dev/null +++ b/app/Listeners/FreshNotFoundCache.php @@ -0,0 +1,35 @@ +player->player_name; + + if (\Storage::disk('cache')->has("notfound/$player_name")) { + \Storage::disk('cache')->delete("notfound/$player_name", ''); + } + } +} diff --git a/app/Models/Player.php b/app/Models/Player.php index d40d4ca4..32e7e33d 100644 --- a/app/Models/Player.php +++ b/app/Models/Player.php @@ -126,6 +126,18 @@ class Player return $this->model['preference']; } + public function rename($new_name) + { + $this->model->update([ + 'player_name' => $new_name, + 'last_modified' => Utils::getTimeFormatted() + ]); + + $this->player_name = $new_name; + + return Event::fire(new PlayerProfileUpdated($this)); + } + public function setOwner($uid) { $this->model->update(['uid' => $uid]); @@ -193,7 +205,7 @@ class PlayerModel extends \Illuminate\Database\Eloquent\Model protected $table = 'players'; public $timestamps = false; - protected $fillable = ['preference', 'last_modified']; + protected $fillable = ['player_name', 'preference', 'last_modified']; public function scopeLike($query, $field, $value) { diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 07ea4ea6..2e8a625c 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -25,6 +25,12 @@ class EventServiceProvider extends ServiceProvider 'App\Events\PlayerProfileUpdated' => [ 'App\Listeners\FreshPlayerJson', ], + 'App\Events\CheckPlayerExists' => [ + 'App\Listeners\CachePlayerExists', + ], + 'App\Events\PlayerWasAdded' => [ + 'App\Listeners\FreshNotFoundCache', + ], ]; /** diff --git a/storage/cache/notfound/.gitignore b/storage/cache/notfound/.gitignore new file mode 100644 index 00000000..8f4803c0 --- /dev/null +++ b/storage/cache/notfound/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore