generated from MuhammadIqbalMaulana/UAS-SIG
Initial commit
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
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', { index: false }));
|
||||
|
||||
// Mengarahkan pengguna yang mengakses URL kosong langsung ke index.html
|
||||
app.get('/', (req, res) => {
|
||||
res.redirect('/portal.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);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user