Files
nabeh/backend/app/Models/DriverReminder.php
2026-05-22 21:52:51 +03:00

75 lines
2.4 KiB
PHP

<?php
namespace App\Models;
use App\Core\Database;
/**
* DriverReminder Model
* Manages driver registration reminders for follow-up notifications.
*/
class DriverReminder extends BaseModel
{
protected static string $table = 'driver_registration_reminders';
/**
* Find active reminder by company and contact phone
*/
public static function findActive(int $companyId, string $phone): ?array
{
self::ensureTableExists();
return Database::selectOne(
"SELECT * FROM " . static::$table . " WHERE company_id = ? AND phone = ? AND status = 'pending' LIMIT 1",
[$companyId, $phone]
);
}
/**
* Save or update driver reminder state
*/
public static function saveReminder(array $data): string
{
self::ensureTableExists();
$existing = Database::selectOne(
"SELECT id FROM " . static::$table . " WHERE company_id = ? AND phone = ? AND status = 'pending' LIMIT 1",
[$data['company_id'], $data['phone']]
);
if ($existing) {
self::update($existing['id'], $data);
return $existing['id'];
} else {
return self::create($data);
}
}
/**
* Ensure the driver_registration_reminders table exists dynamically
*/
public static function ensureTableExists(): void
{
static $checked = false;
if ($checked) return;
try {
Database::execute("
CREATE TABLE IF NOT EXISTS `driver_registration_reminders` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`company_id` INT NOT NULL,
`phone` VARCHAR(50) NOT NULL,
`scheduled_at` DATETIME NOT NULL,
`postpone_count` INT DEFAULT 0,
`status` VARCHAR(20) DEFAULT 'pending',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (`company_id`) REFERENCES `companies` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
");
$checked = true;
} catch (\Exception $e) {
error_log("Failed to ensure driver_registration_reminders table: " . $e->getMessage());
}
}
}