From 15e3431a06c8691eb1252f434326de69e3669618 Mon Sep 17 00:00:00 2001 From: Geriano Date: Fri, 29 Jul 2022 20:45:43 +0700 Subject: [PATCH] create user login activity --- app/Http/Controllers/ActivityController.php | 44 +++++++++++++ app/Http/Requests/DataTableRequest.php | 33 ++++++++++ app/Models/Login.php | 8 +++ database/seeders/MenuSeeder.php | 18 ++++++ .../js/Pages/Superuser/Activity/Login.vue | 62 +++++++++++++++++++ routes/api.php | 1 + routes/web.php | 1 + 7 files changed, 167 insertions(+) create mode 100644 app/Http/Controllers/ActivityController.php create mode 100644 app/Http/Requests/DataTableRequest.php create mode 100644 resources/js/Pages/Superuser/Activity/Login.vue diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php new file mode 100644 index 0000000..8ac05d9 --- /dev/null +++ b/app/Http/Controllers/ActivityController.php @@ -0,0 +1,44 @@ +validated(); + + return Login::join('users', 'login_activities.user_id', '=', 'users.id') + ->where(function (Builder $query) use ($request) { + $search = '%' . $request->search . '%'; + + $query->where('users.name', 'like', $search) + ->orWhere('users.username', 'like', $search) + ->orWhere('login_activities.ip_address', 'like', $search) + ->orWhere('login_activities.browser', 'like', $search) + ->orWhere('login_activities.platform', 'like', $search) + ->orWhere('login_activities.created_at', 'like', $search); + }) + ->select(['users.*', 'login_activities.*']) + ->orderBy($request->input('order.key') ?: 'created_at', $request->input('order.dir') ?: 'asc') + ->paginate($request->per_page ?: 10); + } +} diff --git a/app/Http/Requests/DataTableRequest.php b/app/Http/Requests/DataTableRequest.php new file mode 100644 index 0000000..84cda50 --- /dev/null +++ b/app/Http/Requests/DataTableRequest.php @@ -0,0 +1,33 @@ + + */ + public function rules() + { + return [ + 'search' => 'nullable|string', + 'per_page' => 'nullable|integer|min:0|max:10', + 'order.key' => 'nullable|string', + 'order.dir' => 'nullable|in:asc,desc', + ]; + } +} diff --git a/app/Models/Login.php b/app/Models/Login.php index 1faa9b0..99278e4 100644 --- a/app/Models/Login.php +++ b/app/Models/Login.php @@ -23,4 +23,12 @@ class Login extends Model 'browser', 'platform', ]; + + /** + * @return \Illuminate\Database\Eloquent\Relations\HasOne + */ + public function user() + { + return $this->hasOne(User::class, 'id', 'user_id'); + } } diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php index 48f5ca1..15d2db5 100644 --- a/database/seeders/MenuSeeder.php +++ b/database/seeders/MenuSeeder.php @@ -98,5 +98,23 @@ class MenuSeeder extends Seeder 'create menu', 'read menu', 'update menu', 'delete menu', ])->get(['id']) ); + + $activities = Menu::create([ + 'name' => 'activities', + 'icon' => 'address-card', + 'position' => 3, + 'deleteable' => false, + ]); + + $activities->childs()->create([ + 'name' => 'login', + 'route_or_url' => 'superuser.activity.login', + 'icon' => 'user-clock', + 'position' => 1, + 'deleteable' => false, + 'actives' => [ + 'superuser.activity.login', + ], + ]); } } diff --git a/resources/js/Pages/Superuser/Activity/Login.vue b/resources/js/Pages/Superuser/Activity/Login.vue new file mode 100644 index 0000000..edd0180 --- /dev/null +++ b/resources/js/Pages/Superuser/Activity/Login.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index cce2c0a..c646b0a 100644 --- a/routes/api.php +++ b/routes/api.php @@ -22,6 +22,7 @@ Route::prefix('/v1')->name('api.v1.')->group(function () { Route::get('/superuser/role', [App\Http\Controllers\Superuser\RoleController::class, 'get'])->name('role'); Route::post('/superuser/role/paginate', [App\Http\Controllers\Superuser\RoleController::class, 'paginate'])->name('role.paginate'); Route::post('/superuser/user/paginate', [App\Http\Controllers\Superuser\UserController::class, 'paginate'])->name('user.paginate'); + Route::post('/superuser/activity/login', [App\Http\Controllers\ActivityController::class, 'logins'])->name('activity.login'); Route::get('/superuser/menu', [App\Http\Controllers\Superuser\MenuController::class, 'get'])->name('menu'); }); }); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 72e146c..a6e3e94 100644 --- a/routes/web.php +++ b/routes/web.php @@ -45,5 +45,6 @@ Route::middleware(['auth:sanctum', config('jetstream.auth_session'), 'verified'] 'index', 'store', 'update', 'destroy', ]); + Route::get('/activity/login', [App\Http\Controllers\ActivityController::class, 'login'])->name('activity.login'); }); }); \ No newline at end of file