Files
technical-services-exchange/app/Http/Controllers/AdminController.php
T

57 lines
2.0 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Attachment;
use App\Models\AuditLog;
use App\Models\Dispute;
use App\Models\ExternalProfileImport;
use App\Models\JobPost;
use App\Models\ModerationReport;
use App\Models\Review;
use App\Models\User;
use App\Models\WorkOrder;
use Illuminate\Http\Request;
use Illuminate\View\View;
class AdminController extends Controller
{
public function index(Request $request): View
{
abort_unless($request->user()->hasRole('admin'), 403);
return view('admin.index', [
'counts' => [
'users' => User::count(),
'jobs' => JobPost::count(),
'work_orders' => WorkOrder::count(),
'disputes' => Dispute::count(),
'attachments' => Attachment::count(),
],
'users' => User::with('roles')->latest()->limit(10)->get(),
'jobs' => JobPost::with('buyer')->latest()->limit(10)->get(),
'workOrders' => WorkOrder::with('jobPost', 'buyer', 'provider')->latest()->limit(10)->get(),
'disputes' => Dispute::with('workOrder.jobPost', 'openedBy')->latest()->limit(10)->get(),
'reportedReviews' => Review::with('workOrder.jobPost', 'reviewer', 'reviewee', 'reportedBy')
->where('moderation_status', 'reported')
->latest('reported_at')
->limit(10)
->get(),
'importedHistories' => ExternalProfileImport::with('providerProfile.user', 'attachments')
->whereIn('verification_status', ['provider_attested', 'needs_more_proof'])
->latest()
->limit(10)
->get(),
'moderationReports' => ModerationReport::with('reporter', 'reportable')
->whereIn('status', ['open', 'reviewing'])
->latest()
->limit(15)
->get(),
'auditLogs' => AuditLog::with('actor', 'auditable')
->latest()
->limit(20)
->get(),
]);
}
}