Teren-app/app/Http/Middleware/HandleInertiaRequests.php
2025-10-13 21:14:10 +02:00

121 lines
4.6 KiB
PHP

<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Inertia\Middleware;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that's loaded on the first page visit.
*
* @see https://inertiajs.com/server-side-setup#root-template
*
* @var string
*/
protected $rootView = 'app';
/**
* Determines the current asset version.
*
* @see https://inertiajs.com/asset-versioning
*/
public function version(Request $request): ?string
{
return parent::version($request);
}
/**
* Define the props that are shared by default.
*
* @see https://inertiajs.com/shared-data
*
* @return array<string, mixed>
*/
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;
}
},
]);
}
}