290 lines
8.7 KiB
PHP
290 lines
8.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Helpers\LegacyEncryption;
|
|
|
|
/**
|
|
* MiscController (Miscellaneous Controller) - متحكم المتفرقات
|
|
*
|
|
* تم التحديث لضمان التوافق التام مع V1 من حيث:
|
|
* 1. إرجاع HTTP 200 دائماً مع تحديد الحالة داخل الـ JSON (success/failure).
|
|
* 2. استخدام مفتاح 'message' للبيانات.
|
|
* 3. إضافة شروط التحقق (if) لكل العمليات.
|
|
*/
|
|
class MiscController extends Controller
|
|
{
|
|
private LegacyEncryption $enc;
|
|
|
|
public function __construct(LegacyEncryption $enc)
|
|
{
|
|
$this->enc = $enc;
|
|
}
|
|
|
|
/** GET /v2/misc/test */
|
|
public function test(): JsonResponse
|
|
{
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => 'V2 Connection Stable'
|
|
]);
|
|
}
|
|
|
|
/** GET /v2/misc/package-info */
|
|
public function packageInfo(Request $request): JsonResponse
|
|
{
|
|
$platform = $request->input('platform', 'android');
|
|
$appName = $request->input('appName');
|
|
|
|
$query = DB::connection('primary')->table('packageInfo')
|
|
->where('platform', $platform);
|
|
|
|
if ($appName) {
|
|
$query->where('appName', $appName);
|
|
}
|
|
|
|
$info = $query->orderBy('id', 'desc')->first();
|
|
|
|
if (!$info) {
|
|
return response()->json([
|
|
'status' => 'failure',
|
|
'message' => 'No package info found for platform: ' . $platform
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => $info
|
|
]);
|
|
}
|
|
|
|
/** GET /v2/misc/kazan-percent */
|
|
public function getKazanPercent(Request $request): JsonResponse
|
|
{
|
|
$country = $request->input('country');
|
|
|
|
if (!$country) {
|
|
return response()->json([
|
|
'status' => 'failure',
|
|
'message' => 'Country parameter is missing'
|
|
]);
|
|
}
|
|
|
|
$data = DB::connection('primary')->table('kazan')
|
|
->where('country', $country)
|
|
->get();
|
|
|
|
if ($data->isEmpty()) {
|
|
return response()->json([
|
|
'status' => 'failure',
|
|
'message' => 'No Kazan record found'
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => $data
|
|
]);
|
|
}
|
|
|
|
/** GET /v2/misc/help-center */
|
|
public function getHelpCenter(Request $request): JsonResponse
|
|
{
|
|
$driverId = $request->attributes->get('_jwt_user_id');
|
|
|
|
$data = DB::connection('primary')->table('helpCenter')
|
|
->where('driverID', $driverId)
|
|
->orderBy('datecreated', 'desc')
|
|
->get();
|
|
|
|
if ($data->isEmpty()) {
|
|
return response()->json([
|
|
'status' => 'failure',
|
|
'message' => 'Help question not found'
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => $data
|
|
]);
|
|
}
|
|
|
|
/** GET /v2/misc/tips */
|
|
public function getTips(Request $request): JsonResponse
|
|
{
|
|
$userId = $request->attributes->get('_jwt_user_id');
|
|
$userType = $request->attributes->get('_jwt_user_type');
|
|
|
|
$query = DB::connection('primary')->table('tips');
|
|
|
|
if ($userType === 'driver') {
|
|
$query->where('driverID', $userId);
|
|
} else {
|
|
$query->where('passengerID', $userId);
|
|
}
|
|
|
|
$data = $query->get();
|
|
|
|
if ($data->isEmpty()) {
|
|
return response()->json([
|
|
'status' => 'failure',
|
|
'message' => 'No tips records found'
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => $data
|
|
]);
|
|
}
|
|
|
|
/** GET /v2/misc/license */
|
|
public function getLicense(): JsonResponse
|
|
{
|
|
$data = DB::connection('primary')->table('license')->get();
|
|
|
|
if ($data->isEmpty()) {
|
|
return response()->json([
|
|
'status' => 'failure',
|
|
'message' => 'License info not found'
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => $data
|
|
]);
|
|
}
|
|
|
|
/** POST /v2/misc/help-center */
|
|
public function storeHelpCenter(Request $request): JsonResponse
|
|
{
|
|
$userId = $request->attributes->get('_jwt_user_id');
|
|
$helpQuestion = $request->input('helpQuestion');
|
|
|
|
if (!$helpQuestion) {
|
|
return response()->json(['status' => 'failure', 'message' => 'Missing help question']);
|
|
}
|
|
|
|
try {
|
|
DB::connection('primary')->table('helpCenter')->insert([
|
|
'driverID' => $userId,
|
|
'helpQuestion' => $helpQuestion,
|
|
'datecreated' => now()
|
|
]);
|
|
|
|
return response()->json(['status' => 'success', 'message' => 'Help question saved successfully']);
|
|
} catch (\Exception $e) {
|
|
\Log::error('MiscController HelpCenter Error: ' . $e->getMessage());
|
|
return response()->json(['status' => 'failure', 'message' => 'An error occurred']);
|
|
}
|
|
}
|
|
|
|
/** POST /v2/misc/tips */
|
|
public function storeTips(Request $request): JsonResponse
|
|
{
|
|
$passengerId = $request->attributes->get('_jwt_user_id'); // From JWT
|
|
$driverId = $request->input('driverID');
|
|
$rideId = $request->input('rideID');
|
|
$tipAmount = $request->input('tipAmount');
|
|
|
|
if (!$driverId || !$rideId || !$tipAmount) {
|
|
return response()->json(['status' => 'failure', 'message' => 'Missing parameters']);
|
|
}
|
|
|
|
try {
|
|
DB::connection('primary')->table('tips')->insert([
|
|
'passengerID' => $passengerId,
|
|
'driverID' => $driverId,
|
|
'rideID' => $rideId,
|
|
'tipAmount' => $tipAmount,
|
|
'created_at' => now()
|
|
]);
|
|
|
|
return response()->json(['status' => 'success', 'message' => 'Tip inserted successfully']);
|
|
} catch (\Exception $e) {
|
|
\Log::error('MiscController Tips Error: ' . $e->getMessage());
|
|
return response()->json(['status' => 'failure', 'message' => 'An error occurred']);
|
|
}
|
|
}
|
|
|
|
/** GET /v2/misc/api-key */
|
|
public function getApiKey(): JsonResponse
|
|
{
|
|
$data = DB::connection('primary')->table('apiKey')->first();
|
|
|
|
if (!$data) {
|
|
return response()->json([
|
|
'status' => 'failure',
|
|
'message' => 'API Key not found'
|
|
]);
|
|
}
|
|
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => $data
|
|
]);
|
|
}
|
|
|
|
/** POST /v2/misc/egypt-phones */
|
|
public function saveEgyptPhones(Request $request): JsonResponse
|
|
{
|
|
$request->validate([
|
|
'phones' => 'required|string',
|
|
'name' => 'nullable|string',
|
|
'phones2' => 'nullable|string',
|
|
]);
|
|
|
|
try {
|
|
$id = DB::connection('primary')->table('contactEgypt')->insertGetId([
|
|
'phones' => $request->input('phones'),
|
|
'name' => $request->input('name'),
|
|
'phones2' => $request->input('phones2'),
|
|
]);
|
|
|
|
if ($id) {
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => 'Contact data saved successfully'
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
'status' => 'failure',
|
|
'message' => 'Failed to save contact data'
|
|
]);
|
|
}
|
|
} catch (\Exception $e) {
|
|
\Log::error('MiscController EgyptPhones Error: ' . $e->getMessage());
|
|
return response()->json([
|
|
'status' => 'failure',
|
|
'message' => 'An error occurred'
|
|
]);
|
|
}
|
|
}
|
|
/**
|
|
* POST /v2/admin/errors
|
|
* Accepts client-side error reports from Flutter apps.
|
|
* Public endpoint (no auth required) — just logs the error.
|
|
*/
|
|
public function logClientError(Request $request): JsonResponse
|
|
{
|
|
$body = $request->getContent();
|
|
|
|
\Illuminate\Support\Facades\Log::channel('single')->warning('Client Error Report', [
|
|
'ip' => $request->ip(),
|
|
'body' => substr($body, 0, 2000), // Limit to 2KB
|
|
'user_agent' => $request->userAgent(),
|
|
]);
|
|
|
|
$error = $request->input('error') ?? 'Error logged';
|
|
return response()->json([
|
|
'status' => 'success',
|
|
'message' => $error,
|
|
]);
|
|
}
|
|
}
|