feat: Implement read cursor activity tracking and recent activity dashboard with context

This commit is contained in:
Daan Meijer
2026-06-15 23:37:44 +02:00
parent e32fbc10e0
commit f12639fb59
13 changed files with 721 additions and 28 deletions
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers;
use App\Services\ActivityService;
use Illuminate\Http\Request;
use Inertia\Inertia;
class DashboardController extends Controller
{
public function index(Request $request, ActivityService $activityService)
{
$user = $request->user();
$unreadEntities = $activityService->getUnreadEntitiesGrouped($user);
return Inertia::render('Dashboard', [
'unreadEntities' => $unreadEntities,
]);
}
}
+5 -1
View File
@@ -8,6 +8,8 @@ use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Http\Request;
use Inertia\Inertia;
use App\Services\ActivityService;
class DynamicController extends Controller
{
use AuthorizesRequests;
@@ -44,10 +46,12 @@ class DynamicController extends Controller
/**
* Display the specified resource.
*/
public function show(Dynamic $dynamic)
public function show(Dynamic $dynamic, ActivityService $activityService)
{
$this->authorize('view', $dynamic);
$activityService->updateCursor(auth()->user(), $dynamic);
$dynamic->load([
'ledgers.media',
'participants',
+4 -1
View File
@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use App\Http\Requests\StoreLedgerRequest;
use App\Models\Dynamic;
use App\Models\Ledger;
use App\Services\ActivityService;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Inertia\Inertia;
@@ -53,10 +54,12 @@ class LedgerController extends Controller
/**
* Display the specified resource.
*/
public function show(Request $request, Dynamic $dynamic, Ledger $ledger)
public function show(Request $request, Dynamic $dynamic, Ledger $ledger, ActivityService $activityService)
{
$this->authorize('view', $ledger);
$activityService->updateCursor($request->user(), $ledger);
$dynamic->load('chat', 'participants');
$ledger->load([
@@ -42,6 +42,14 @@ class HandleInertiaRequests extends Middleware
'user' => $request->user(),
],
'sidebarOpen' => ! $request->hasCookie('sidebar_state') || $request->cookie('sidebar_state') === 'true',
'unreadNotificationsCount' => function () use ($request) {
if (! $request->user()) {
return 0;
}
$service = app(\App\Services\ActivityService::class);
return count($service->getUnreadEntitiesGrouped($request->user()));
},
];
}
}