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

FileFungsiDiubah?
server.nsEntry point — muat semua modul lalu jalankan serverJarang
.envVariabel lingkungan: PORT, DB_PATH, RAHASIA_JWT✅ Wajib
config/app.nsBaca .env, buat variabel global APP, PORT, dllOpsional
rute/api.nsDaftar semua rute HTTP dan hubungkan ke fungsi handler✅ Sering
app/kontroler/*.nsFungsi handler yang memproses setiap request✅ Sering
app/model/*.nsRegistrasi model ORM dan fungsi query kustom✅ Sering
app/middleware/auth.nsFungsi wajib_login dan wajib_adminOpsional
database/migrasi.nsCREATE TABLE — jalankan sekali dengan nusa migrasiJarang
database/seeder.nsInsert 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_.