First commit

This commit is contained in:
Saufi
2026-05-18 08:56:23 +08:00
commit fd3d3a4d2b
147 changed files with 22099 additions and 0 deletions

View File

@@ -0,0 +1,156 @@
<?php
namespace Database\Seeders;
use App\Models\Category;
use App\Models\KnowledgeItem;
use Illuminate\Database\Seeder;
class KnowledgeItemSeeder extends Seeder
{
/**
* Sample FAQ untuk development dan demo awal.
* Data ini bukan fakta sebenar untuk tujuan ujian sahaja.
*/
public function run(): void
{
$items = [
// ── Pelesenan ─────────────────────────────────────────────────
[
'category_slug' => 'pelesenan',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Apakah dokumen yang diperlukan untuk memohon lesen perniagaan baru?',
'content' => "Untuk memohon lesen perniagaan baru, pemohon perlu menyediakan dokumen berikut:\n\n" .
"1. Salinan kad pengenalan pemohon (MyKad)\n" .
"2. Borang permohonan yang telah dilengkapkan\n" .
"3. Salinan geran tanah atau perjanjian sewaan premis\n" .
"4. Pelan lantai premis perniagaan\n" .
"5. Sijil pendaftaran perniagaan (SSM)\n" .
"6. Gambar premis dari dalam dan luar\n\n" .
"Sila hubungi Bahagian Pelesenan untuk maklumat lanjut.",
'tags' => ['lesen', 'perniagaan', 'permohonan', 'dokumen'],
'is_active' => true,
],
[
'category_slug' => 'pelesenan',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Berapa lama masa yang diperlukan untuk kelulusan lesen perniagaan?',
'content' => "Proses kelulusan lesen perniagaan biasanya mengambil masa 14 hingga 30 hari bekerja " .
"bergantung kepada jenis lesen dan kelengkapan dokumen yang dikemukakan.\n\n" .
"Pemohon boleh semak status permohonan melalui kaunter Bahagian Pelesenan atau " .
"menghubungi talian hotline kami.",
'tags' => ['lesen', 'tempoh', 'kelulusan'],
'is_active' => true,
],
// ── Cukai ─────────────────────────────────────────────────────
[
'category_slug' => 'cukai',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Bila tarikh akhir pembayaran cukai taksiran?',
'content' => "Cukai taksiran perlu dibayar dalam dua penggal:\n\n" .
"• Penggal pertama: 28 Februari setiap tahun\n" .
"• Penggal kedua: 31 Ogos setiap tahun\n\n" .
"Bayaran lewat akan dikenakan denda atau caj penalti. " .
"Pembayaran boleh dibuat di kaunter, atas talian, atau melalui bank.",
'tags' => ['cukai', 'taksiran', 'tarikh', 'bayaran'],
'is_active' => true,
],
// ── WiFi Johor ────────────────────────────────────────────────
[
'category_slug' => 'wifi-johor',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Bagaimana cara untuk sambung ke WiFi Johor?',
'content' => "Cara menyambung ke WiFi Johor:\n\n" .
"1. Hidupkan WiFi pada peranti anda\n" .
"2. Pilih rangkaian 'WiFi Johor' atau 'WiFiJohor'\n" .
"3. Buka pelayar web — halaman log masuk akan muncul\n" .
"4. Daftar menggunakan nombor telefon atau e-mel\n" .
"5. Masukkan OTP yang diterima\n" .
"6. Anda kini boleh menggunakan internet percuma\n\n" .
"WiFi Johor tersedia di taman awam, perpustakaan, dan bangunan kerajaan terpilih.",
'tags' => ['wifi', 'johor', 'internet', 'sambung'],
'is_active' => true,
],
// ── Penguatkuasaan ────────────────────────────────────────────
[
'category_slug' => 'penguatkuasaan',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Bagaimana cara untuk membuat aduan berkaitan penguatkuasaan?',
'content' => "Aduan berkaitan penguatkuasaan boleh dibuat melalui cara berikut:\n\n" .
"1. Kaunter aduan di Jabatan Penguatkuasaan\n" .
"2. Hotline: 07-XXX XXXX (Isnin-Jumaat, 8pagi-5ptg)\n" .
"3. E-mel: penguatkuasaan@majlis.gov.my\n" .
"4. Sistem aduan atas talian\n\n" .
"Sertakan maklumat berikut dalam aduan:\n" .
"• Nama dan nombor telefon pengadu\n" .
"• Lokasi kejadian\n" .
"• Tarikh dan masa kejadian\n" .
"• Penerangan ringkas masalah",
'tags' => ['aduan', 'penguatkuasaan', 'prosedur'],
'is_active' => true,
],
// ── Sewaan Gerai ──────────────────────────────────────────────
[
'category_slug' => 'sewaan-gerai-majlis',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Apakah syarat untuk menyewa gerai majlis?',
'content' => "Syarat-syarat untuk menyewa gerai majlis:\n\n" .
"1. Pemohon mestilah warganegara Malaysia\n" .
"2. Berumur 18 tahun ke atas\n" .
"3. Tiada tunggakan dengan pihak majlis\n" .
"4. Mempunyai lesen perniagaan yang sah (jika berniaga)\n" .
"5. Menandatangani perjanjian sewaan\n\n" .
"Kadar sewa bergantung kepada lokasi dan jenis gerai. " .
"Sila rujuk jadual kadar sewa yang terkini di kaunter.",
'tags' => ['gerai', 'sewa', 'syarat', 'permohonan'],
'is_active' => true,
],
// ── Lain-lain ─────────────────────────────────────────────────
[
'category_slug' => 'lain-lain',
'item_type' => KnowledgeItem::TYPE_FAQ,
'title' => 'Apakah waktu operasi pejabat majlis?',
'content' => "Waktu operasi pejabat majlis adalah seperti berikut:\n\n" .
"• Isnin Khamis: 8:00 pagi 5:00 petang\n" .
"• Jumaat: 8:00 pagi 12:00 tengah hari (tutup 12:15 2:45 ptg)\n" .
"• Sabtu, Ahad, dan Cuti Umum: Tutup\n\n" .
"Perkhidmatan kaunter ditutup 15 minit sebelum masa tutup pejabat.",
'tags' => ['waktu', 'operasi', 'pejabat', 'jadual'],
'is_active' => true,
],
];
$count = 0;
foreach ($items as $data) {
$slug = $data['category_slug'];
unset($data['category_slug']);
$category = Category::where('slug', $slug)->first();
if (!$category) {
$this->command->warn(" Kategori '{$slug}' tidak dijumpai. Skip.");
continue;
}
KnowledgeItem::updateOrCreate(
[
'category_id' => $category->id,
'title' => $data['title'],
],
array_merge($data, [
'category_id' => $category->id,
'language' => 'ms',
'is_public' => true,
])
);
$count++;
}
$this->command->info("{$count} knowledge items (sample FAQ) berjaya dibuat.");
}
}