A progressive Node.js framework for building efficient and scalable server-side applications.
Nest framework TypeScript starter repository.
Proyek ini dibangun menggunakan NestJS dan Prisma ORM, yang menerapkan beberapa pola desain (design patterns) standar industri untuk memastikan kode modular, mudah diuji (testable), aman, dan mudah dipelihara (scalable). Berikut adalah penjelasan mengapa pola-pola tersebut digunakan:
Aplikasi dibagi menjadi modul-modul independen seperti AuthModule, TasksModule, dan PrismaModule.
- Mengapa? Modul membatasi ruang lingkup (encapsulation) fitur. Setiap modul mengelompokkan pengontrol (controllers), penyedia layanan (providers/services), dan dependency lainnya yang saling terkait. Ini mencegah penumpukan kode dalam satu file besar dan mempermudah kerja tim paralel.
Pemisahan tanggung jawab secara jelas antara penanganan permintaan HTTP dan logika bisnis:
- Controller (
tasks.controller.ts,auth.controller.ts): Bertanggung jawab menerima request, melakukan pemetaan URL/HTTP method, serta mengembalikan response HTTP. - Service (
tasks.service.ts,auth.service.ts): Menyimpan logika bisnis inti dan berinteraksi dengan database melalui Prisma. - Mengapa? Mencegah controller menjadi terlalu gemuk (fat controllers). Dengan memisahkan logika bisnis ke dalam service, kita dapat menggunakan kembali logika tersebut di tempat lain dan mempermudah penulisan unit test.
NestJS menggunakan DI container untuk mengelola instansiasi class. Sebagai contoh, PrismaService diinjeksikan ke dalam TasksService melalui constructor.
- Mengapa? DI mengurangi ketergantungan antar-class secara langsung (decoupling). Ini memudahkan kita untuk melakukan mocking (simulasi) database/service lain saat menulis pengujian otomatis (automated testing).
Menggunakan DTO (CreateTaskDto, UpdateTaskDto, dll.) bersama dengan class-validator.
- Mengapa? Menjamin bahwa data yang masuk ke server memiliki struktur dan tipe data yang valid sebelum diproses oleh logika bisnis. Ini bertindak sebagai gerbang keamanan pertama aplikasi.
Prisma digunakan sebagai ORM untuk berinteraksi dengan database SQLite.
- Mengapa? Memberikan keamanan tipe data penuh (type-safety) yang terintegrasi dengan TypeScript. Prisma meminimalkan penulisan query SQL manual yang rawan terhadap serangan SQL Injection, serta mempercepat proses pengembangan dengan fitur migrasi otomatis.
Menggunakan JwtAuthGuard dan JwtStrategy untuk memproteksi endpoint.
- Mengapa? Memisahkan logika autentikasi dan otorisasi dari logika bisnis utama. Guard bertindak sebagai middleware yang memfilter request sebelum mencapai controller, memastikan hanya user terautentikasi yang dapat mengakses resource mereka sendiri.
$ npm install# development
$ npm run start
# watch mode
$ npm run start:dev
# production mode
$ npm run start:prod# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov