39961-vm/db/schema.php
Flatlogic Bot d2f3725560 TES1
2026-05-12 09:45:21 +00:00

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;
}