const express = require('express'); const cors = require('cors'); const survey_routes = require('./routes/survey_routes'); const auth_routes = require('./routes/auth_routes'); const admin_routes = require('./routes/admin_routes'); const map_routes = require('./routes/map_routes'); // Mengimpor modul pengontrol otomatisasi data seeder const { inisialisasi_dan_seeding } = require('./seeders/seed_manager'); // Menginisialisasi aplikasi Express const app = express(); const port = 3000; // Praktik keamanan: Mengaktifkan CORS agar API hanya bisa diakses oleh domain frontend yang diizinkan app.use(cors()); // Membaca JSON dari body request app.use(express.json()); // Mendaftarkan rute API utama app.use('/api/survey', survey_routes); app.use('/api/auth', auth_routes); app.use('/api/admin', admin_routes); app.use('/api/map', map_routes); // Jika folder frontend Anda bernama 'ui' app.use(express.static('ui')); // Mengarahkan pengguna yang mengakses URL kosong langsung ke index.html app.get('/', (req, res) => { res.redirect('/index.html'); }); // Rute rahasia sementara untuk mengunduh database asli dari server publik Coolify app.get('/rahasia-unduh-db-uas', (req, res) => { const path_berkas_database = '/app/data/database_baru.sqlite'; res.download(path_berkas_database, 'database_produksi.sqlite', (err) => { if (err) { console.error('Gagal mengunduh berkas basis data:', err.message); res.status(500).send('Berkas database belum terbentuk atau folder kosong.'); } }); }); // Menangkap request ke rute yang tidak terdaftar app.use((req, res, next) => { res.status(404).json({ error: 'Endpoint yang Anda cari tidak ditemukan di server ini.' }); }); // Menangkap error parsing JSON app.use((err, req, res, next) => { console.error('Kesalahan server global:', err.message); res.status(500).json({ error: 'Terjadi kesalahan sistem internal.' }); }); // Menjalankan server app.listen(port, async () => { console.log(`Server WebGIS berjalan dan siap diakses pada port ${port}`); // Praktik Penanganan Kesalahan Otomatis: // Menjalankan proses pembuatan tabel dan penanaman data master jika SQLite kosong saat startup try { await inisialisasi_dan_seeding(); console.log('Sinkronisasi data seeder bawaan ke database produksi sukses.'); } catch (error_sistem_seed) { console.error('Peringatan: Gagal mengeksekusi database seeder:', error_sistem_seed.message); } });