82 lines
2.7 KiB
PHP
82 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Passenger;
|
|
use App\Helpers\LegacyEncryption;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
/**
|
|
* متحكم إدارة الركاب للمسؤولين (Admin Passenger Management Controller)
|
|
*
|
|
* الغرض من الملف:
|
|
* السماح للمسؤولين بالبحث عن الركاب المسجلين في النظام وإدارة حساباتهم.
|
|
*
|
|
* كيفية العمل:
|
|
* 1. يوفر ميزة البحث عن الركاب حسب رقم الهاتف.
|
|
* 2. يعرض قائمة الركاب للمسؤول مع إمكانية التصفية (Pagination).
|
|
*/
|
|
class PassengerManagementController extends Controller
|
|
{
|
|
private LegacyEncryption $enc;
|
|
|
|
public function __construct(LegacyEncryption $enc)
|
|
{
|
|
$this->enc = $enc;
|
|
}
|
|
|
|
/** GET /v2/admin/passengers */
|
|
public function index(Request $request): JsonResponse
|
|
{
|
|
$status = $request->input('status', 'notDeleted');
|
|
$page = (int) $request->input('page', 1);
|
|
$limit = min((int) $request->input('limit', 20), 100);
|
|
|
|
$passengers = DB::connection('primary')->table('passengers')
|
|
->where('status', $status)
|
|
->orderBy('created_at', 'desc')
|
|
->skip(($page - 1) * $limit)
|
|
->take($limit)
|
|
->get();
|
|
|
|
$passengers = $passengers->map(function ($p) {
|
|
$arr = (array) $p;
|
|
return $this->enc->decryptFields($arr, Passenger::ENCRYPTED_FIELDS);
|
|
});
|
|
|
|
$total = DB::connection('primary')->table('passengers')->where('status', $status)->count();
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'data' => $passengers,
|
|
'pagination' => ['page' => $page, 'limit' => $limit, 'total' => $total],
|
|
]);
|
|
}
|
|
|
|
/** GET /v2/admin/passengers/search?phone=XXX */
|
|
public function search(Request $request): JsonResponse
|
|
{
|
|
$phone = $request->input('phone');
|
|
if (!$phone) {
|
|
return response()->json(['status' => 'failure', 'message' => 'Phone required'], 400);
|
|
}
|
|
|
|
$encPhone = $this->enc->encrypt($phone);
|
|
$passenger = DB::connection('primary')->table('passengers')
|
|
->where('phone', $encPhone)
|
|
->first();
|
|
|
|
if (!$passenger) {
|
|
return response()->json(['status' => 'failure', 'message' => 'Passenger not found'], 404);
|
|
}
|
|
|
|
$data = $this->enc->decryptFields((array) $passenger, Passenger::ENCRYPTED_FIELDS);
|
|
unset($data['password'], $data['api_secret']);
|
|
|
|
return response()->json(['status' => 'success', 'data' => $data]);
|
|
}
|
|
}
|