diff --git a/app/Http/Controllers/Web/Konfigurasi/LogAktivitasController.php b/app/Http/Controllers/Web/Konfigurasi/LogAktivitasController.php index 781ca83..5e62397 100644 --- a/app/Http/Controllers/Web/Konfigurasi/LogAktivitasController.php +++ b/app/Http/Controllers/Web/Konfigurasi/LogAktivitasController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Web\Konfigurasi; use App\Http\Controllers\Controller; use App\Http\Requests\Konfigurasi\FilterLogAktivitasRequest; +use App\Models\Konfigurasi\KunjunganPengguna; use App\Models\Konfigurasi\LogAktivitas; use App\Models\Pertanian\Petani; use App\Models\User; @@ -64,6 +65,7 @@ class LogAktivitasController extends Controller 'jenis' => self::JENIS, 'perPage' => self::PER_PAGE, 'namaPetani' => $namaPetani, + 'kunjungan' => KunjunganPengguna::ringkasan(), ]); } diff --git a/app/Http/Middleware/CatatKunjungan.php b/app/Http/Middleware/CatatKunjungan.php new file mode 100644 index 0000000..b34d286 --- /dev/null +++ b/app/Http/Middleware/CatatKunjungan.php @@ -0,0 +1,41 @@ +user() ?? $request->user('sanctum'); + if (! $user) { + return $response; + } + + $tanda = today()->toDateString() . ':' . $user->id; + + // Web: tanda di session, tanpa query tambahan + if ($request->hasSession()) { + if ($request->session()->get('kunjungan_tercatat') !== $tanda) { + KunjunganPengguna::catat($user->id); + $request->session()->put('kunjungan_tercatat', $tanda); + } + + return $response; + } + + // API: tanda di cache sampai akhir hari + if (Cache::add("kunjungan:{$tanda}", true, now()->endOfDay())) { + KunjunganPengguna::catat($user->id); + } + + return $response; + } +} diff --git a/app/Models/Konfigurasi/KunjunganPengguna.php b/app/Models/Konfigurasi/KunjunganPengguna.php new file mode 100644 index 0000000..7d2c6ef --- /dev/null +++ b/app/Models/Konfigurasi/KunjunganPengguna.php @@ -0,0 +1,49 @@ + 'date']; + } + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + // Catat kunjungan (abaikan jika hari ini sudah tercatat) + public static function catat(int $userId): void + { + static::query()->insertOrIgnore([ + 'tanggal' => today()->toDateString(), + 'user_id' => $userId, + 'created_at' => now(), + ]); + } + + // Ringkasan pengunjung hari ini, bulan ini, dan total (satu query) + public static function ringkasan(): object + { + return static::query() + ->selectRaw('count(*) filter (where tanggal = ?) as hari_ini', [today()->toDateString()]) + ->selectRaw('count(distinct user_id) filter (where tanggal >= ?) as bulan_ini', [today()->startOfMonth()->toDateString()]) + ->selectRaw('count(*) filter (where tanggal >= ?) as kunjungan_bulan_ini', [today()->startOfMonth()->toDateString()]) + ->selectRaw('count(*) as total_kunjungan') + ->selectRaw('count(distinct user_id) as total_pengguna') + ->toBase() + ->first(); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index 28c9004..fee9715 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -16,6 +16,8 @@ return Application::configure(basePath: dirname(__DIR__)) ->withMiddleware(function (Middleware $middleware): void { $middleware->append(\App\Http\Middleware\ResolveProgram::class); $middleware->append(\App\Http\Middleware\SimpanLogAktivitas::class); + $middleware->web(append: [\App\Http\Middleware\CatatKunjungan::class]); + $middleware->api(append: [\App\Http\Middleware\CatatKunjungan::class]); $middleware->alias([ 'akses.petani' => \App\Http\Middleware\BatasiAksesPetani::class, diff --git a/database/migrations/2026_11_06_120000_create_kunjungan_pengguna_table.php b/database/migrations/2026_11_06_120000_create_kunjungan_pengguna_table.php new file mode 100644 index 0000000..38476ac --- /dev/null +++ b/database/migrations/2026_11_06_120000_create_kunjungan_pengguna_table.php @@ -0,0 +1,26 @@ +id(); + $table->date('tanggal'); + $table->foreignId('user_id')->constrained('users')->cascadeOnDelete(); + $table->timestamp('created_at')->nullable(); + + $table->unique(['tanggal', 'user_id']); + }); + } + + public function down(): void + { + Schema::dropIfExists('kunjungan_pengguna'); + } +}; diff --git a/resources/views/konfigurasi/log-aktivitas/index.blade.php b/resources/views/konfigurasi/log-aktivitas/index.blade.php index 3778a68..fb391f4 100644 --- a/resources/views/konfigurasi/log-aktivitas/index.blade.php +++ b/resources/views/konfigurasi/log-aktivitas/index.blade.php @@ -5,6 +5,22 @@ @section('content')
+ {{-- Ringkasan pengunjung --}} +
+
+ +
+
+ +
+
+ +
+
+
Log Aktivitas