Fix 500 in payment endpoints by using separate connections
This commit is contained in:
@@ -53,6 +53,15 @@ try {
|
|||||||
];
|
];
|
||||||
$con = new PDO($dsn, $user, $pass, $options);
|
$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
|
// 5. JWT Authentication
|
||||||
include __DIR__ . "/functions.php";
|
include __DIR__ . "/functions.php";
|
||||||
$decodedToken = authenticateJWT();
|
$decodedToken = authenticateJWT();
|
||||||
|
|||||||
@@ -2,63 +2,31 @@
|
|||||||
include "../../connect.php";
|
include "../../connect.php";
|
||||||
$driverID = filterRequest("driverID");
|
$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 {
|
try {
|
||||||
$stmt = $con->prepare($sql);
|
// 1. Get ride stats using $conRide
|
||||||
$stmt->bindValue(':driverID', $driverID);
|
$sqlRide = "SELECT
|
||||||
$stmt->execute();
|
(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) {
|
// 2. Get payment stats using $con
|
||||||
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
$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);
|
printSuccess($row);
|
||||||
} else {
|
} else {
|
||||||
printFailure("No wallet record found");
|
printFailure("No wallet record found");
|
||||||
|
|||||||
@@ -5,15 +5,15 @@ $driver_id = filterRequest("driver_id");
|
|||||||
$sql = "SELECT
|
$sql = "SELECT
|
||||||
COUNT(id) AS count
|
COUNT(id) AS count
|
||||||
FROM
|
FROM
|
||||||
`rideDB`.`ride`
|
`ride`
|
||||||
WHERE
|
WHERE
|
||||||
LOWER(`ride`.`status`) IN ('finished','completed')
|
LOWER(`status`) IN ('finished','completed')
|
||||||
AND driver_id = :driver_id
|
AND driver_id = :driver_id
|
||||||
AND created_at >= CURDATE();
|
AND created_at >= CURDATE();
|
||||||
";
|
";
|
||||||
// كان المعرّف يُدمج في نص الاستعلام مباشرةً — حقن SQL.
|
// كان المعرّف يُدمج في نص الاستعلام مباشرةً — حقن SQL.
|
||||||
try {
|
try {
|
||||||
$stmt = $con->prepare($sql);
|
$stmt = $conRide->prepare($sql);
|
||||||
$stmt->bindValue(':driver_id', $driver_id);
|
$stmt->bindValue(':driver_id', $driver_id);
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user