82 lines
2.8 KiB
PHP
82 lines
2.8 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
require_once __DIR__ . '/config.php';
|
|
|
|
function ensureSupportSchema(): void
|
|
{
|
|
static $bootstrapped = false;
|
|
|
|
if ($bootstrapped) {
|
|
return;
|
|
}
|
|
|
|
$fallbackSql = <<<'SQL'
|
|
CREATE TABLE IF NOT EXISTS faqs (
|
|
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
keywords VARCHAR(255) NOT NULL,
|
|
answer TEXT NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS messages (
|
|
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
user_message TEXT NOT NULL,
|
|
ai_response MEDIUMTEXT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
INDEX idx_messages_created_at (created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS settings (
|
|
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
setting_key VARCHAR(100) NOT NULL,
|
|
setting_value TEXT NULL,
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uniq_settings_key (setting_key)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
SQL;
|
|
|
|
$migrationPath = __DIR__ . '/migrations/20260512_001_support_tables.sql';
|
|
$sql = $fallbackSql;
|
|
|
|
if (is_readable($migrationPath)) {
|
|
$fileSql = file_get_contents($migrationPath);
|
|
if (is_string($fileSql) && trim($fileSql) !== '') {
|
|
$sql = $fileSql;
|
|
}
|
|
}
|
|
|
|
db()->exec($sql);
|
|
|
|
$faqCount = (int) db()->query('SELECT COUNT(*) FROM faqs')->fetchColumn();
|
|
if ($faqCount === 0) {
|
|
$seedFaqs = [
|
|
[
|
|
'keywords' => 'penawaran, quotation, quote, harga',
|
|
'answer' => 'Gunakan modul penawaran untuk membuat penawaran harga barang maupun jasa sebelum pekerjaan dimulai.',
|
|
],
|
|
[
|
|
'keywords' => 'spk, surat perintah kerja, work order',
|
|
'answer' => 'SPK dipakai untuk menerbitkan perintah kerja berdasarkan penawaran yang sudah disetujui pelanggan.',
|
|
],
|
|
[
|
|
'keywords' => 'surat jalan, delivery note, pengiriman',
|
|
'answer' => 'Surat jalan dipakai untuk mencatat barang yang dikirim atau pekerjaan yang dikirimkan ke pelanggan.',
|
|
],
|
|
[
|
|
'keywords' => 'invoice, faktur, tagihan, pembayaran',
|
|
'answer' => 'Invoice diterbitkan sebagai tagihan akhir setelah pengiriman barang atau penyelesaian jasa.',
|
|
],
|
|
];
|
|
|
|
$stmt = db()->prepare('INSERT INTO faqs (keywords, answer) VALUES (:keywords, :answer)');
|
|
foreach ($seedFaqs as $faq) {
|
|
$stmt->bindValue(':keywords', $faq['keywords']);
|
|
$stmt->bindValue(':answer', $faq['answer']);
|
|
$stmt->execute();
|
|
}
|
|
}
|
|
|
|
$bootstrapped = true;
|
|
}
|