diff --git a/app/Http/Middleware/UserLastSeen.php b/app/Http/Middleware/UserLastSeen.php new file mode 100644 index 0000000..d47f7a7 --- /dev/null +++ b/app/Http/Middleware/UserLastSeen.php @@ -0,0 +1,20 @@ +isAdmin() || $this->can($perm); } + + public function lastSeen(): Carbon + { + return UserService::getLastSeen($this->id) ?? $this->created_at; + } + + public function getLastSeenAttribute(): Carbon + { + return $this->lastSeen(); + } } diff --git a/app/Providers/MenuServiceProvider.php b/app/Providers/MenuServiceProvider.php new file mode 100644 index 0000000..ca447d0 --- /dev/null +++ b/app/Providers/MenuServiceProvider.php @@ -0,0 +1,30 @@ +app->make('view')->share('menuData', [$verticalMenuData, $horizontalMenuData]); + } +} diff --git a/app/Services/UserService.php b/app/Services/UserService.php new file mode 100644 index 0000000..45c4802 --- /dev/null +++ b/app/Services/UserService.php @@ -0,0 +1,26 @@ +set(self::lastSeenKey($userId), ($seenAt ?? Carbon::now())->toISOString()); + } + + public static function getLastSeen(int $userId): ?Carbon + { + $lastSeen = Redis::connection()->get(self::lastSeenKey($userId)); + + return $lastSeen ? Carbon::parse($lastSeen) : null; + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index d654276..820152a 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,5 +1,6 @@ withMiddleware(function (Middleware $middleware) { - // + $middleware->append(UserLastSeen::class); }) ->withExceptions(function (Exceptions $exceptions) { //