From 7efb91324548cc0a24e3459399fcda593ff8a110 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Sat, 1 Aug 2026 15:54:52 +0300 Subject: [PATCH] Fix 500 in payment endpoints by using separate connections --- payment_server/v2/main/connect.php | 9 +++ .../v2/main/ride/payment/getAllPayment.php | 78 ++++++------------- .../v2/main/ride/payment/getCountRide.php | 6 +- 3 files changed, 35 insertions(+), 58 deletions(-) diff --git a/payment_server/v2/main/connect.php b/payment_server/v2/main/connect.php index 3d333f3..a0f2481 100755 --- a/payment_server/v2/main/connect.php +++ b/payment_server/v2/main/connect.php @@ -53,6 +53,15 @@ try { ]; $con = new PDO($dsn, $user, $pass, $options); + // Ride DB Connection (for cross-db queries) + $rideDbname = getenv('DB_RIDE_NAME') ?: 'rideDB'; + $rideDbHost = getenv('DB_RIDE_HOST') ?: (getenv('DB_HOST') ?: 'mysql'); + $rideUser = getenv('DB_RIDE_USER') ?: 'root'; + $ridePass = getenv('DB_RIDE_PASS') ?: getenv('MYSQL_ROOT_PASSWORD') ?: ''; + + $dsnRide = "mysql:host=$rideDbHost;dbname=$rideDbname;charset=utf8mb4"; + $conRide = new PDO($dsnRide, $rideUser, $ridePass, $options); + // 5. JWT Authentication include __DIR__ . "/functions.php"; $decodedToken = authenticateJWT(); diff --git a/payment_server/v2/main/ride/payment/getAllPayment.php b/payment_server/v2/main/ride/payment/getAllPayment.php index 4806da7..bde907a 100644 --- a/payment_server/v2/main/ride/payment/getAllPayment.php +++ b/payment_server/v2/main/ride/payment/getAllPayment.php @@ -2,63 +2,31 @@ include "../../connect.php"; $driverID = filterRequest("driverID"); -$sql = "SELECT - ( - SELECT - COUNT(*) - FROM - `rideDB`.`ride` - WHERE - LOWER(`ride`.`status`) IN ('finished','completed') - AND `ride`.`created_at` BETWEEN CURRENT_DATE() + INTERVAL 7 HOUR AND CURRENT_DATE() + INTERVAL 10 HOUR - AND `ride`.`driver_id` = :driverID - ) AS morning_count, - ( - SELECT - COUNT(*) - FROM - `rideDB`.`ride` - WHERE - LOWER(`ride`.`status`) IN ('finished','completed') - AND `ride`.`created_at` BETWEEN CURRENT_DATE() + INTERVAL 15 HOUR AND CURRENT_DATE() + INTERVAL 18 HOUR - AND `ride`.`driver_id` = :driverID - ) AS afternoon_count, - ( - SELECT - COALESCE(SUM(amount), 0) AS total_amount - FROM - payments - WHERE - isGiven = 'waiting' AND `driverID` = :driverID - ) AS total_amount, - ( - SELECT - COALESCE(SUM(price), 0) AS total_amount - FROM - `rideDB`.`ride` - WHERE - `driver_id` = :driverID - AND LOWER(`ride`.`status`) IN ('finished','completed') - AND `ride`.`created_at` > CURRENT_DATE() - INTERVAL 1 WEEK - ) AS total_amount_last_week -FROM - dual -LIMIT 1; - - - "; -/** - * كان معرّف السائق يُدمج في نص الاستعلام مباشرةً (حقن SQL)، وكانت الحالة - * تُطابق 'Finished' فقط بينما خط الرحلات الحالي يكتب 'completed' — فتظهر - * أرباح السائق ورحلاته أصفاراً. - */ try { - $stmt = $con->prepare($sql); - $stmt->bindValue(':driverID', $driverID); - $stmt->execute(); + // 1. Get ride stats using $conRide + $sqlRide = "SELECT + (SELECT COUNT(*) FROM `ride` WHERE LOWER(`status`) IN ('finished','completed') AND `created_at` BETWEEN CURRENT_DATE() + INTERVAL 7 HOUR AND CURRENT_DATE() + INTERVAL 10 HOUR AND `driver_id` = :driverID) AS morning_count, + (SELECT COUNT(*) FROM `ride` WHERE LOWER(`status`) IN ('finished','completed') AND `created_at` BETWEEN CURRENT_DATE() + INTERVAL 15 HOUR AND CURRENT_DATE() + INTERVAL 18 HOUR AND `driver_id` = :driverID) AS afternoon_count, + (SELECT COALESCE(SUM(price), 0) FROM `ride` WHERE `driver_id` = :driverID AND LOWER(`status`) IN ('finished','completed') AND `created_at` > CURRENT_DATE() - INTERVAL 1 WEEK) AS total_amount_last_week + FROM dual"; + + $stmtRide = $conRide->prepare($sqlRide); + $stmtRide->bindValue(':driverID', $driverID); + $stmtRide->execute(); + $rideStats = $stmtRide->fetch(PDO::FETCH_ASSOC) ?: []; - if ($stmt->rowCount() > 0) { - $row = $stmt->fetchAll(PDO::FETCH_ASSOC); + // 2. Get payment stats using $con + $sqlPayment = "SELECT COALESCE(SUM(amount), 0) AS total_amount FROM payments WHERE isGiven = 'waiting' AND `driverID` = :driverID"; + $stmtPayment = $con->prepare($sqlPayment); + $stmtPayment->bindValue(':driverID', $driverID); + $stmtPayment->execute(); + $paymentStats = $stmtPayment->fetch(PDO::FETCH_ASSOC) ?: []; + + // 3. Combine + if (!empty($rideStats) || !empty($paymentStats)) { + $row = [ + array_merge($rideStats, $paymentStats) + ]; printSuccess($row); } else { printFailure("No wallet record found"); diff --git a/payment_server/v2/main/ride/payment/getCountRide.php b/payment_server/v2/main/ride/payment/getCountRide.php index b676773..32c9375 100644 --- a/payment_server/v2/main/ride/payment/getCountRide.php +++ b/payment_server/v2/main/ride/payment/getCountRide.php @@ -5,15 +5,15 @@ $driver_id = filterRequest("driver_id"); $sql = "SELECT COUNT(id) AS count FROM - `rideDB`.`ride` + `ride` WHERE - LOWER(`ride`.`status`) IN ('finished','completed') + LOWER(`status`) IN ('finished','completed') AND driver_id = :driver_id AND created_at >= CURDATE(); "; // كان المعرّف يُدمج في نص الاستعلام مباشرةً — حقن SQL. try { - $stmt = $con->prepare($sql); + $stmt = $conRide->prepare($sql); $stmt->bindValue(':driver_id', $driver_id); $stmt->execute();