*/ public function share(Request $request): array { return array_merge(parent::share($request), [ 'auth' => [ 'user' => function () use ($request) { $user = $request->user(); if (! $user) { return null; } return [ 'id' => $user->id, 'name' => $user->name, 'email' => $user->email, 'roles' => $user->roles()->select('id', 'name', 'slug')->get(), 'permissions' => $user->permissions()->pluck('slug')->values(), ]; }, ], 'flash' => [ 'success' => fn () => $request->session()->get('success'), 'error' => fn () => $request->session()->get('error'), 'warning' => fn () => $request->session()->get('warning'), 'info' => fn () => $request->session()->get('info'), ], 'notifications' => function () use ($request) { try { $user = $request->user(); if (! $user) { return null; } $today = now()->toDateString(); // Base fetch to avoid serialization issues; eager load relations afterwards $activities = \App\Models\Activity::query() ->select(['id', 'due_date', 'amount', 'contract_id', 'client_case_id', 'created_at']) ->whereDate('due_date', $today) ->whereNotExists(function ($q) use ($request) { $q->from('activity_notification_reads as anr') ->whereColumn('anr.activity_id', 'activities.id') ->where('anr.user_id', optional($request->user())->id) ->whereColumn('anr.due_date', 'activities.due_date'); }) ->orderBy('created_at') ->limit(20) ->get(); // Eager load needed relations (contracts and client cases) with qualified selects $activities->load([ 'contract' => function ($q) { $q->select(['contracts.id', 'contracts.uuid', 'contracts.reference', 'contracts.client_case_id']) ->with([ 'clientCase' => function ($qq) { $qq->select(['client_cases.id', 'client_cases.uuid']); }, 'account' => function ($qq) { $qq->select(['accounts.id', 'accounts.contract_id', 'accounts.balance_amount', 'accounts.initial_amount']); }, ]); }, 'clientCase' => function ($q) { $q->select(['client_cases.id', 'client_cases.uuid', 'client_cases.person_id']) ->with([ 'person' => function ($qq) { $qq->select(['person.id', 'person.full_name']); }, ]); }, ]); return [ 'dueToday' => [ 'count' => $activities->count(), 'items' => $activities, 'date' => $today, ], ]; } catch (\Throwable $e) { return null; } }, ]); } }