Backend layanan Point of Sale (POS) berbasis Node.js & Express, menggunakan Prisma ORM untuk manajemen database, Midtrans untuk pembayaran, MinIO untuk object storage, serta OTP & JWT untuk autentikasi. Sistem ini dirancang modular, terstruktur, dan siap dikembangkan.
- Login, Register, OTP Verification
- JWT-based Authentication & Authorization
- Role-based Access (Admin / Cashier)
📁 Referensi:
controllers/auth.controller.jsmiddlewares/auth.middleware.jsmiddlewares/verifyOtp.middleware.js
- CRUD Kategori
- CRUD Produk (dengan upload gambar)
📁 Referensi:
controllers/category.controller.jscontrollers/product.controller.js
- Transaksi POS (Cash / Midtrans)
- Integrasi Midtrans Snap
- Callback & status pembayaran
📁 Referensi:
controllers/transaction.controller.jscontrollers/midtrans.controller.jsconfig/midtrans.config.js
- Laporan transaksi (Admin & Cashier)
- Filter berdasarkan tanggal & metode pembayaran
📁 Referensi:
controllers/report.controller.js
- Upload file menggunakan Multer
- Penyimpanan object menggunakan MinIO
📁 Referensi:
config/multer.config.jsconfig/minio.config.js- Direktori
uploads/
- Pengiriman OTP & notifikasi via SMTP
📁 Referensi:
config/mailer.config.js
- Validasi input request
- Global error handler
📁 Referensi:
middlewares/validation.middleware.jsmiddlewares/errorHandler.middleware.js
- Node.js
- Express.js
- Prisma ORM
- PostgreSQL / MySQL (via Prisma)
- Midtrans Payment Gateway
- MinIO Object Storage
- Multer
- JWT
- SMTP Mailer
Entrypoint aplikasi:
index.js
├── config/ # Konfigurasi (DB, Midtrans, MinIO, Mailer, dll)
├── controllers/ # Controller endpoint
├── middlewares/ # Middleware auth, validation, error handler
├── routes/ # Routing modular
├── services/ # Business logic
├── prisma/ # Prisma schema & migration
├── uploads/ # File upload (default)
├── utils/ # Helper & utilities
├── index.js # Entrypoint aplikasi
├── package.json
└── .env
npm installBuat file .env berdasarkan kebutuhan:
# Server
PORT=3000
NODE_ENV=development
# Database (Prisma)
DATABASE_URL=
# JWT
JWT_SECRET=
JWT_EXPIRES_IN=
# Midtrans
MIDTRANS_SERVER_KEY=
MIDTRANS_CLIENT_KEY=
MIDTRANS_IS_PRODUCTION=false
# MinIO
MINIO_ENDPOINT=
MINIO_PORT=
MINIO_USE_SSL=false
MINIO_ACCESS_KEY=
MINIO_SECRET_KEY=
MINIO_BUCKET=
# SMTP Mailer
SMTP_HOST=
SMTP_PORT=
SMTP_USER=
SMTP_PASS=
SMTP_SECURE=false
# Upload
UPLOAD_DIR=uploads📁 Lihat juga:
config/env.config.js
npx prisma generate
npx prisma migrate dev --name initnode index.jsPastikan service eksternal berikut sudah berjalan:
- Database
- MinIO
- Midtrans
- SMTP Server
-
Midtrans Konfigurasi di
config/midtrans.config.js -
MinIO Client di
config/minio.config.js, upload viamulter -
Mailer (SMTP) Konfigurasi di
config/mailer.config.js -
Prisma ORM Client di
config/prisma.config.jsSkema diprisma/schema.prisma
- Routing →
routes/ - Controller →
controllers/ - Business Logic →
services/ - Middleware (auth, validation) →
middlewares/ - Error handling terpusat →
errorHandler.middleware.js
Struktur ini memudahkan scaling dan maintenance.
-
Tambah endpoint baru:
- Buat route di
routes/ - Implementasi di
controllers/ - Logic di
services/
- Buat route di
-
Perubahan database:
npx prisma migrate dev
- MIT