Quick Start
Guidelines
This document defines folder structure, naming convention, and architectural patterns for developing Tantri Cashier backend using NestJS + Prisma.
Tech Stack
- ✅ NestJS (Modular Backend Framework)
- ✅ Prisma ORM for PostgreSQL
- ✅ PostgreSQL as the main database
- ✅ Docker for containerization
- ✅ Redis for caching
- ✅ WebSocket (or socket.io) for real-time
- ✅ Kafka (if needed) for message broker
Naming Convention
| Element | Convention | Example |
|---|---|---|
| Files | kebab-case | currency.repository.ts |
| Classes | PascalCase | CurrencyRepository |
| DTOs | kebab-case, with .dto.ts | update-setting-language-currency.dto.ts |
| Modules | feature-based folder | cafe/, auth/, article/ |
| Helpers/utils | grouped under helper/ | getCurrMonthAndYearByTimeZone |
Engineering Principles
-
Feature-First Modularization
- Setiap folder (auth, cafe, article, etc) adalah satu fitur independen.
- Gunakan
*.module.tsuntuk register dependensi.
-
Repository Pattern + Prisma
- Gunakan repository terpisah (
*.repository.ts) untuk logic akses database. - Jangan campur logic query dan business logic di service.
- Gunakan repository terpisah (
-
Business Logic di Service
*.service.tsberfungsi untuk mengelola aturan bisnis (validasi, kalkulasi, dsb).
-
Transactional-safe via Prisma
- Gunakan
prisma.$transaction()untuk keperluantxseperti padatxForceUpdateCurrencyCafewithDeleteOrder.
- Gunakan
-
Dependency Injection
- Semua service, repo, dan helper harus injek via constructor.
- Gunakan
@Inject(forwardRef(...))jika dependensi melingkar.
-
Custom Error Handling
- Gunakan
CustomErrordengan status code untuk response lebih jelas.
- Gunakan
Folder Structure Reference (based on your screenshot)
🧪 Additional Best Practices
- ✅ Gunakan file
prisma.service.tssebagai singleton provider untuk Prisma Client. - ✅ Gunakan
Validationhelper atauclass-validatoruntuk validasi non-decorator. - ✅ Hindari
anydan selalu pakai typing dari@prisma/clientatau DTO.

