Struktur Proyek NusaFramework
Penjelasan setiap file dan direktori dalam proyek NusaFramework yang dihasilkan oleh nusa buat:proyek.
Gambaran Lengkap
Struktur Direktori
nama-proyek/
│
├── server.ns ← 🚀 Entry point — jalankan ini
├── .env ← ⚙️ Konfigurasi environment
│
├── config/
│ └── app.ns ← Muat .env, definisi konstanta global
│
├── rute/
│ └── api.ns ← 🔀 Semua definisi rute HTTP
│
├── app/
│ ├── kontroler/ ← 🎮 Handler setiap endpoint
│ │ ├── AuthKontroler.ns (daftar, masuk, profil)
│ │ ├── PenggunaKontroler.ns (CRUD pengguna)
│ │ └── ProdukKontroler.ns (CRUD produk)
│ │
│ ├── model/ ← 🗄️ Model ORM dan fungsi kustom
│ │ ├── Pengguna.ns
│ │ └── Produk.ns
│ │
│ └── middleware/ ← 🛡️ Autentikasi dan filter
│ └── auth.ns (wajib_login, wajib_admin)
│
├── database/
│ ├── migrasi.ns ← Definisi skema tabel
│ └── seeder.ns ← Data awal (admin, contoh produk)
│
└── kunci/ ← 🔑 Simpan file kunci/cert (gitignored)
Deskripsi File Utama
| File | Fungsi | Diubah? |
|---|---|---|
server.ns | Entry point — muat semua modul lalu jalankan server | Jarang |
.env | Variabel lingkungan: PORT, DB_PATH, RAHASIA_JWT | ✅ Wajib |
config/app.ns | Baca .env, buat variabel global APP, PORT, dll | Opsional |
rute/api.ns | Daftar semua rute HTTP dan hubungkan ke fungsi handler | ✅ Sering |
app/kontroler/*.ns | Fungsi handler yang memproses setiap request | ✅ Sering |
app/model/*.ns | Registrasi model ORM dan fungsi query kustom | ✅ Sering |
app/middleware/auth.ns | Fungsi wajib_login dan wajib_admin | Opsional |
database/migrasi.ns | CREATE TABLE — jalankan sekali dengan nusa migrasi | Jarang |
database/seeder.ns | Insert data awal (admin, data dummy) | Opsional |
server.ns — Entry Point
File ini adalah jantung aplikasi. Urutannya penting: konfigurasi → database → model → middleware → kontroler → rute → jalankan.
server.ns
// 1. Muat konfigurasi (baca .env, set konstanta global)
muat_file("config/app.ns")
// 2. Buka koneksi database dan simpan ke framework
buat db = db_buka(DB_DRIVER, DB_PATH)
db_framework(db)
// 3. Daftarkan model-model ke ORM registry
muat_file("app/model/Pengguna.ns")
muat_file("app/model/Produk.ns")
// 4. Muat fungsi middleware (wajib_login, wajib_admin)
muat_file("app/middleware/auth.ns")
// 5. Muat semua kontroler (definisi fungsi aksi_*)
muat_file("app/kontroler/AuthKontroler.ns")
muat_file("app/kontroler/PenggunaKontroler.ns")
muat_file("app/kontroler/ProdukKontroler.ns")
// 6. Buat server dan daftarkan rute
buat app = server_baru(PORT)
muat_file("rute/api.ns")
// 7. Jalankan! 🚀
cetak_log("SUCCESS", "Server berjalan di http://localhost:" + PORT)
jalankan_server(app)
Menambah Modul Baru
Contoh: menambah modul Pesanan:
Langkah-langkah
// 1. Tambah migrasi di database/migrasi.ns
db_query(db, "CREATE TABLE IF NOT EXISTS pesanan (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pengguna_id INTEGER NOT NULL,
total REAL NOT NULL,
status TEXT DEFAULT 'pending',
dibuat_pada TEXT DEFAULT (datetime('now'))
)")
// 2. Buat app/model/Pesanan.ns
daftar_model("Pesanan", "pesanan")
fungsi Pesanan_milihPengguna(pengguna_id) {
buat db = db_framework()
kembalikan db_ambil_semua(db,
"SELECT * FROM pesanan WHERE pengguna_id=? ORDER BY id DESC",
pengguna_id)
}
// 3. Buat app/kontroler/PesananKontroler.ns
fungsi aksi_pesanan_semua(req) {
buat klaim = wajib_login(req)
jika klaim == nihil { kembalikan resp_error("Akses ditolak") }
buat data = Pesanan_milihPengguna(ambil(klaim, "id"))
kembalikan resp_ok(data, "OK")
}
// 4. Tambah rute di rute/api.ns
tambah_rute(app, "GET", "/api/pesanan", aksi_pesanan_semua)
// 5. Muat di server.ns (sebelum muat_file rute)
muat_file("app/model/Pesanan.ns")
muat_file("app/kontroler/PesananKontroler.ns")
📌 Konvensi Penamaan: Nama file model menggunakan PascalCase (
Pengguna.ns), kontroler diakhiri Kontroler.ns, dan fungsi handler diawali aksi_.