enc = $enc; } /** POST /v2/invites/driver */ public function inviteDriver(Request $request): JsonResponse { $driverId = $request->input('driverId') ?? $request->attributes->get('_jwt_user_id'); $inviterPhone = $request->input('inviterDriverPhone'); if (!$driverId || !$inviterPhone) { \Log::warning('Invite driver parameters missing: ' . json_encode($request->all()) . ' JWT ID: ' . $request->attributes->get('_jwt_user_id')); return response()->json([ 'status' => 'failure', 'message' => 'Missing required parameters: driverId or inviterDriverPhone' ], 400); } $phoneEnc = $this->enc->encrypt($inviterPhone); // التحقق من وجود دعوة مسبقة $existing = DB::connection('primary')->table('invites') ->where('inviterDriverPhone', $phoneEnc) ->first(); if ($existing) { if ($existing->isInstall == 1) { return response()->json([ 'status' => 'failure', 'message' => $existing->inviteCode ]); } $expirationTime = now()->addHour(); DB::connection('primary')->table('invites') ->where('id', $existing->id) ->update([ 'driverId' => $driverId, 'expirationTime' => $expirationTime, 'createdAt' => now() ]); return response()->json([ 'status' => 'success', 'message' => [ 'inviteId' => $existing->id, 'inviteCode' => $existing->inviteCode, 'expirationTime' => $expirationTime->toDateTimeString() ] ]); } // إنشاء كود فريد $inviteCode = $this->generateUniqueCode(); $expirationTime = now()->addHour(); try { $id = DB::connection('primary')->table('invites')->insertGetId([ 'driverId' => $driverId, 'inviterDriverPhone' => $phoneEnc, 'inviteCode' => $inviteCode, 'expirationTime' => $expirationTime, 'createdAt' => now(), 'isInstall' => 0 ]); return response()->json([ 'status' => 'success', 'message' => [ 'inviteId' => $id, 'inviteCode' => $inviteCode, 'expirationTime' => $expirationTime->toDateTimeString() ] ]); } catch (\Exception $e) { return response()->json([ 'status' => 'failure', 'message' => 'An error occurred' ]); } } /** GET /v2/invites/driver */ public function index(Request $request): JsonResponse { $driverId = $request->attributes->get('_jwt_user_id') ?? $request->input('driverId'); $invites = DB::connection('primary')->table('invites') ->where('driverId', $driverId) ->get() ->map(function ($invite) { // V1 logic expects certain field names $invite->invitorName = "Driver " . substr($invite->inviterDriverPhone, -4); $invite->countOfInvitDriver = $invite->isInstall == 1 ? "100" : "0"; $invite->isGiftToken = $invite->isGiftToken ?? 0; return $invite; }); return response()->json([ 'status' => 'success', 'message' => $invites ]); } /** POST /v2/invites/passenger */ public function invitePassenger(Request $request): JsonResponse { if (!$request->has(['driverId', 'inviterPassengerPhone'])) { return response()->json([ 'status' => 'failure', 'message' => 'Missing required parameters' ]); } $driverId = $request->input('driverId'); $phone = $request->input('inviterPassengerPhone'); $phoneEnc = $this->enc->encrypt($phone); $existing = DB::connection('primary')->table('invitesToPassengers') ->where('inviterPassengerPhone', $phoneEnc) ->first(); if ($existing) { if ($existing->isInstall == 1) { return response()->json([ 'status' => 'failure', 'message' => $existing->inviteCode ]); } $expirationTime = now()->addHour(); DB::connection('primary')->table('invitesToPassengers') ->where('id', $existing->id) ->update([ 'driverId' => $driverId, 'expirationTime' => $expirationTime, 'createdAt' => now() ]); return response()->json([ 'status' => 'success', 'message' => [ 'inviteId' => $existing->id, 'inviteCode' => $existing->inviteCode, 'expirationTime' => $expirationTime->toDateTimeString() ] ]); } $inviteCode = $this->generateUniqueCodePassenger(); $expirationTime = now()->addHour(); try { $id = DB::connection('primary')->table('invitesToPassengers')->insertGetId([ 'driverId' => $driverId, 'inviterPassengerPhone' => $phoneEnc, 'inviteCode' => $inviteCode, 'expirationTime' => $expirationTime, 'createdAt' => now(), 'isInstall' => 0 ]); return response()->json([ 'status' => 'success', 'message' => [ 'inviteId' => $id, 'inviteCode' => $inviteCode, 'expirationTime' => $expirationTime->toDateTimeString() ] ]); } catch (\Exception $e) { return response()->json([ 'status' => 'failure', 'message' => 'An error occurred' ]); } } /** GET /v2/invites/gift */ public function checkGift(Request $request): JsonResponse { $userId = $request->attributes->get('_jwt_user_id'); return response()->json([ 'status' => 'success', 'message' => ['gift_available' => true] ]); } private function generateUniqueCode(): string { while (true) { $letters = strtoupper(Str::random(4)); $numbers = rand(100, 999); $code = $letters . $numbers; $exists = DB::connection('primary')->table('invites') ->where('inviteCode', $code) ->exists(); if (!$exists) { return $code; } } } private function generateUniqueCodePassenger(): string { while (true) { $letters = strtoupper(Str::random(4)); $numbers = rand(100, 999); $code = $letters . $numbers; $exists = DB::connection('primary')->table('invitesToPassengers') ->where('inviteCode', $code) ->exists(); if (!$exists) { return $code; } } } }