Struktur folder yang baik di NestJS sebaiknya:
✅ Modular & Scalable → Agar mudah dikembangkan
✅ Bersih & Tertata → Agar mudah dipahami
✅ Menerapkan Separation of Concerns → Memisahkan concerns seperti controller, service, dan repository
📂 Struktur Folder yang Direkomendasikan
Berikut adalah struktur yang sesuai best practice untuk proyek NestJS:
📦 src
┣ 📂 common # 🔹 Modul yang bisa digunakan ulang
┃ ┣ 📂 decorators # ➜ Custom decorators
┃ ┣ 📂 filters # ➜ Global Exception Filters
┃ ┣ 📂 guards # ➜ Auth Guards (JWT, Role-based)
┃ ┣ 📂 interceptors # ➜ Logging, Transforming responses
┃ ┣ 📂 middlewares # ➜ Custom middlewares
┃ ┣ 📂 pipes # ➜ Validation pipes
┣ 📂 config # 🔹 Konfigurasi Aplikasi
┃ ┣ 📜 config.module.ts # ➜ Config Module untuk env
┃ ┣ 📜 app.config.ts # ➜ App-wide konfigurasi
┣ 📂 modules # 🔹 Semua fitur aplikasi di sini
┃ ┣ 📂 auth # ➜ Modul Auth (Login, Register)
┃ ┃ ┣ 📜 auth.module.ts
┃ ┃ ┣ 📜 auth.controller.ts
┃ ┃ ┣ 📜 auth.service.ts
┃ ┃ ┣ 📜 auth.repository.ts # (Opsional) Untuk query ke DB
┃ ┃ ┣ 📜 auth.strategy.ts # (Opsional) JWT, OAuth Strategy
┃ ┣ 📂 users # ➜ Modul Users
┃ ┃ ┣ 📜 users.module.ts
┃ ┃ ┣ 📜 users.controller.ts
┃ ┃ ┣ 📜 users.service.ts
┃ ┃ ┣ 📜 users.repository.ts
┃ ┣ 📂 payments # ➜ Modul Payment
┃ ┃ ┣ 📜 payments.module.ts
┃ ┃ ┣ 📜 payments.controller.ts
┃ ┃ ┣ 📜 payments.service.ts
┃ ┃ ┣ 📜 payments.repository.ts
┃ ┃ ┣ 📜 dto # ➜ Data Transfer Objects
┃ ┃ ┃ ┣ 📜 create-payment.dto.ts
┃ ┃ ┃ ┣ 📜 get-period.dto.ts
┃ ┃ ┃ ┣ 📜 update-payment.dto.ts
┃ ┃ ┣ 📜 entities # ➜ Model database jika menggunakan class (Opsional)
┃ ┃ ┃ ┣ 📜 payment.entity.ts
┣ 📂 database # 🔹 Konfigurasi Database
┃ ┣ 📜 prisma.service.ts # ➜ Jika menggunakan Prisma
┃ ┣ 📜 database.module.ts
┃ ┣ 📜 database.service.ts # ➜ Service database (jika tanpa Prisma)
┣ 📂 logs # 🔹 Menyimpan logs aplikasi
┣ 📂 utils # 🔹 Helper functions / utilities
┣ 📜 app.module.ts # 🔹 Entry Module utama
┣ 📜 main.ts # 🔹 Entry point aplikasi (bootstrap)
┣ 📜 env.example # 🔹 Contoh file `.env`
┣ 📜 tsconfig.json # 🔹 Konfigurasi TypeScript
┣ 📜 package.json # 🔹 Dependencies proyek
🏆 Penjelasan & Best Practices
common/
→ Menyimpan kode reusable, seperti guards, pipes, filters, interceptors.config/
→ Menyimpan semua konfigurasi aplikasi.modules/
→ Setiap fitur aplikasi dibuat dalam modul tersendiri agar mudah dikelola.database/
→ Untuk database service, terutama jika menggunakan Prisma atau TypeORM.logs/
→ Untuk menyimpan file log jika menggunakan Winston atau pino.utils/
→ Untuk menyimpan fungsi bantuan (misalnyagenerateRandomId()
).
🚀 Keuntungan Struktur Ini
✅ Mudah Dimaintain → Kode lebih rapi dan modular
✅ Mudah di-scale → Bisa menambahkan modul baru dengan mudah
✅ Mudah Ditemukan → Semua file ada di tempat yang jelas
✅ Terpisah Dengan Jelas → Controller, Service, dan Repository tidak bercampur
🔥 Tambahan (Opsional)
- Jika ada WebSocket → Bisa buat
events/
- Jika ada Cron Jobs → Bisa buat
jobs/
- Jika ada microservices → Bisa buat
microservices/
💡 Kesimpulan:
Struktur ini flexible dan bisa disesuaikan dengan kebutuhan proyek tanpa mengorbankan best practice! 🚀