Update: 2026-08-07 05:05:45

This commit is contained in:
Hamza-Ayed
2026-08-07 05:05:46 +03:00
parent 977d238c84
commit b938e287c6
3 changed files with 127 additions and 11 deletions
@@ -0,0 +1,49 @@
-- 2026_08_07_verify_all.sql — فحص حالة كل ترحيلات اليوم
--
-- ‏قراءة خالصة لا تُعدّل شيئاً. شغّله على أي قاعدة لتعرف ما نُفِّذ وما لا.
-- ‏العمود ok: 1 = موجود، 0 = ناقص.
--
-- sirodb jorSiroDB < backend/migrations/2026_08_07_verify_all.sql
-- sirodb 'intaleq-ridesDB' < backend/migrations/2026_08_07_verify_all.sql
SELECT 'kazan.cancelCompensationCap' AS item,
COUNT(*) AS ok FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='kazan' AND COLUMN_NAME='cancelCompensationCap'
UNION ALL SELECT 'kazan.cancelMinWaitMinutes', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='kazan' AND COLUMN_NAME='cancelMinWaitMinutes'
UNION ALL SELECT 'kazan.passengerCancelCap', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='kazan' AND COLUMN_NAME='passengerCancelCap'
UNION ALL SELECT 'kazan.passengerCancelFreeMinutes', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='kazan' AND COLUMN_NAME='passengerCancelFreeMinutes'
UNION ALL SELECT 'kazan.driverLateExemptMinutes', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='kazan' AND COLUMN_NAME='driverLateExemptMinutes'
UNION ALL SELECT 'ride.driverArrivedAt', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ride' AND COLUMN_NAME='driverArrivedAt'
UNION ALL SELECT 'ride.pickupApproachKm', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='ride' AND COLUMN_NAME='pickupApproachKm'
UNION ALL SELECT 'driver.blockedUntil', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='driver' AND COLUMN_NAME='blockedUntil'
UNION ALL SELECT 'driver.safetyHoldIncidentId', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='driver' AND COLUMN_NAME='safetyHoldIncidentId'
UNION ALL SELECT 'passengers.noShowCount', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='passengers' AND COLUMN_NAME='noShowCount'
UNION ALL SELECT 'complaint.first_response_at', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='complaint' AND COLUMN_NAME='first_response_at'
UNION ALL SELECT 'complaint.assigned_to', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='complaint' AND COLUMN_NAME='assigned_to'
UNION ALL SELECT 'complaint.reason_code', COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='complaint' AND COLUMN_NAME='reason_code'
UNION ALL SELECT 'driver_orders.idx_order', COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='driver_orders' AND INDEX_NAME='idx_order'
UNION ALL SELECT 'TABLE driver_leak_events', COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='driver_leak_events'
UNION ALL SELECT 'TABLE safety_incidents', COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='safety_incidents'
UNION ALL SELECT 'TABLE complaint_compensations', COUNT(*) FROM information_schema.TABLES
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='complaint_compensations';
+75
View File
@@ -0,0 +1,75 @@
-- _helpers.sql — إجراءات ترحيل قابلة لإعادة التشغيل
--
-- ‏المشكلة: ALTER TABLE ... ADD COLUMN في MySQL يُجهض **كل** الجملة عند
-- ‏أول عمود مكرّر. فإعادة تشغيل ترحيل نُفِّذ جزئياً تفشل، وإعادة تشغيل
-- ‏ترحيل نُفِّذ كاملاً تفشل أيضاً — بلا أن تعرف أيّهما.
--
-- ‏هذا لدغ نشرَ سيرو ثلاث مرات في يوم واحد، ويزداد سوءاً مع تعدد النسخ
-- ‏(intaleq / tripz / siro) حيث لا أحد يتذكّر ما نُفِّذ أين.
--
-- ‏الحل: إجراءات تفحص information_schema أولاً فتتخطّى الموجود بصمت.
--
-- ‏شغّل هذا الملف مرة واحدة على كل قاعدة قبل أي ترحيل يستخدمه.
DELIMITER //
DROP PROCEDURE IF EXISTS `siro_add_column` //
/**
* ‏يضيف عموداً إن لم يكن موجوداً. آمن لإعادة التشغيل.
*
* ‏مثال:
* CALL siro_add_column('ride', 'driverArrivedAt',
* 'DATETIME NULL DEFAULT NULL COMMENT ''لحظة الوصول''');
*/
CREATE PROCEDURE `siro_add_column`(
IN p_table VARCHAR(64),
IN p_column VARCHAR(64),
IN p_definition TEXT
)
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = p_table
AND COLUMN_NAME = p_column
) THEN
SET @ddl = CONCAT('ALTER TABLE `', p_table, '` ADD COLUMN `',
p_column, '` ', p_definition);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT CONCAT('أُضيف: ', p_table, '.', p_column) AS result;
ELSE
SELECT CONCAT('موجود مسبقاً: ', p_table, '.', p_column) AS result;
END IF;
END //
DROP PROCEDURE IF EXISTS `siro_add_index` //
/**
* ‏يضيف فهرساً إن لم يكن موجوداً.
* CALL siro_add_index('driver_orders', 'idx_order', '(`order_id`)');
*/
CREATE PROCEDURE `siro_add_index`(
IN p_table VARCHAR(64),
IN p_index VARCHAR(64),
IN p_columns TEXT
)
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = p_table
AND INDEX_NAME = p_index
) THEN
SET @ddl = CONCAT('ALTER TABLE `', p_table, '` ADD INDEX `',
p_index, '` ', p_columns);
PREPARE stmt FROM @ddl;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SELECT CONCAT('أُضيف فهرس: ', p_table, '.', p_index) AS result;
ELSE
SELECT CONCAT('فهرس موجود مسبقاً: ', p_table, '.', p_index) AS result;
END IF;
END //
DELIMITER ;
+3 -11
View File
@@ -1,17 +1,9 @@
<?php
require_once __DIR__ . '/../connect.php';
// شاشة إدارة الشكاوى في لوحة التحكم. لم يكن فيها أي فحص للدور، و connect.php
// لا يفرض بوّابة عامة — فأي مستخدم يملك JWT صالحاً كان يقرأ كل الشكاوى
// بأسماء الطرفين وتقييماتهم وتوكنات الإشعارات.
if ($role !== 'admin' && $role !== 'super_admin') {
http_response_code(403);
echo json_encode([
'status' => 'failure',
'message' => 'Forbidden. Admin access required.',
], JSON_UNESCAPED_UNICODE);
exit;
}
// ‏الحماية الآن من البوّابة المسارية في connect.php: كل ما تحت serviceapp/
// ‏يتطلب service أو admin أو super_admin. كان هنا فحص admin وحده، وهو ما
// ‏منع موظفي خدمة العملاء — وهم أصحاب هذه الشاشة — من قراءة الشكاوى أصلاً.
$sql = "
SELECT