Initial V2 commit 4\9
This commit is contained in:
131
app/Http/Controllers/InviteController.php
Normal file
131
app/Http/Controllers/InviteController.php
Normal file
@@ -0,0 +1,131 @@
|
||||
<?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->input('_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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user