Files
intaleq_v2/app/Http/Controllers/InviteController.php
2026-04-24 15:12:12 +03:00

132 lines
3.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
use App\Helpers\LegacyEncryption;
use Illuminate\Support\Str;
class InviteController extends Controller
{
private LegacyEncryption $enc;
public function __construct(LegacyEncryption $enc)
{
$this->enc = $enc;
}
/** POST /v2/invites/driver */
public function inviteDriver(Request $request): JsonResponse
{
if (!$request->has(['driverId', 'inviterDriverPhone'])) {
return response()->json([
'status' => 'failure',
'message' => 'Missing required parameters'
]);
}
$driverId = $request->input('driverId');
$phone = $request->input('inviterDriverPhone');
$phoneEnc = $this->enc->encrypt($phone);
// التحقق من وجود دعوة مسبقة
$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' => 'Database error: ' . $e->getMessage()
]);
}
}
/** POST /v2/invites/passenger */
public function invitePassenger(Request $request): JsonResponse
{
return response()->json([
'status' => 'success',
'message' => 'Not implemented yet'
]);
}
/** 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;
}
}
}
}