shadrairfn/Task-Management

★ 0Forks 0JavaScriptGitHub ↗Compare

README

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Discord Backers on Open Collective Sponsors on Open Collective Donate us Support us Follow us on Twitter

Description

Nest framework TypeScript starter repository.

Pola Arsitektur & Desain (Architectural & Design Patterns)

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:

1. Modular Architecture (Modul)

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.

2. Controller-Service Pattern (Separation of Concerns)

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.

3. Dependency Injection (DI) & Inversion of Control (IoC)

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).

4. Data Transfer Object (DTO) & Validation

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.

5. Data Access Layer / ORM (Prisma)

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.

6. Strategy & Guard Pattern (Security)

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.

Project setup

$ npm install

Compile and run the project

# development
$ npm run start

# watch mode
$ npm run start:dev

# production mode
$ npm run start:prod

Run tests

# unit tests
$ npm run test

# e2e tests
$ npm run test:e2e

# test coverage
$ npm run test:cov

Contributors

shadrairfn

Issues