mirror of
https://github.com/HDInnovations/UNIT3D-Community-Edition.git
synced 2026-04-24 03:59:08 -05:00
update: add indexes to audits to speed up staff activity counts
Speeds up the queries from 1.1 s to 75 ms.
This commit is contained in:
@@ -18,6 +18,7 @@ namespace App\Http\Controllers\Staff;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Audit;
|
||||
use App\Models\User;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
@@ -30,15 +31,17 @@ class AuditController extends Controller
|
||||
*/
|
||||
public function index(): \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
{
|
||||
return view('Staff.audit.index', ['staffActivities' => Audit::with(['user', 'user.group'])
|
||||
->whereRelation('user.group', 'is_modo', '=', true)
|
||||
->where('action', '!=', 'create') // Exclude audits with action 'create'
|
||||
->select('user_id')
|
||||
->selectRaw('COUNT(*) as total_actions')
|
||||
->selectRaw('SUM(CASE WHEN created_at > NOW() - INTERVAL 60 DAY THEN 1 ELSE 0 END) as last_60_days')
|
||||
->selectRaw('SUM(CASE WHEN created_at > NOW() - INTERVAL 30 DAY THEN 1 ELSE 0 END) as last_30_days')
|
||||
->groupBy('user_id')
|
||||
->get()]);
|
||||
return view('Staff.audit.index', [
|
||||
'staffUsers' => User::query()
|
||||
->with(['group'])
|
||||
->whereRelation('group', 'is_modo', '=', true)
|
||||
->withCount([
|
||||
'audits as total_actions' => fn ($query) => $query->where('action', '!=', 'create'),
|
||||
'audits as last_60_days' => fn ($query) => $query->where('action', '!=', 'create')->whereBetween('created_at', [now()->subDays(60), now()]),
|
||||
'audits as last_30_days' => fn ($query) => $query->where('action', '!=', 'create')->whereBetween('created_at', [now()->subDays(30), now()]),
|
||||
])
|
||||
->get()
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -947,6 +947,16 @@ class User extends Authenticatable implements MustVerifyEmail
|
||||
return $this->hasMany(TorrentTrump::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Has Many Audits.
|
||||
*
|
||||
* @return \Illuminate\Database\Eloquent\Relations\HasMany<Audit, $this>
|
||||
*/
|
||||
public function audits(): \Illuminate\Database\Eloquent\Relations\HasMany
|
||||
{
|
||||
return $this->hasMany(Audit::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Has many donations.
|
||||
*
|
||||
|
||||
@@ -35,14 +35,14 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($staffActivities as $activity)
|
||||
@foreach ($staffUsers as $staffUser)
|
||||
<tr>
|
||||
<td>
|
||||
<x-user_tag :anon="false" :user="$activity->user" />
|
||||
<x-user_tag :anon="false" :user="$staffUser" />
|
||||
</td>
|
||||
<td>{{ $activity->last_30_days }}</td>
|
||||
<td>{{ $activity->last_60_days }}</td>
|
||||
<td>{{ $activity->total_actions }}</td>
|
||||
<td>{{ $staffUser->last_30_days }}</td>
|
||||
<td>{{ $staffUser->last_60_days }}</td>
|
||||
<td>{{ $staffUser->total_actions }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
|
||||
Reference in New Issue
Block a user