Logo
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

ElementConventionExample
Fileskebab-casecurrency.repository.ts
ClassesPascalCaseCurrencyRepository
DTOskebab-case, with .dto.tsupdate-setting-language-currency.dto.ts
Modulesfeature-based foldercafe/, auth/, article/
Helpers/utilsgrouped under helper/getCurrMonthAndYearByTimeZone

Engineering Principles

  1. Feature-First Modularization

    • Setiap folder (auth, cafe, article, etc) adalah satu fitur independen.
    • Gunakan *.module.ts untuk register dependensi.
  2. Repository Pattern + Prisma

    • Gunakan repository terpisah (*.repository.ts) untuk logic akses database.
    • Jangan campur logic query dan business logic di service.
  3. Business Logic di Service

    • *.service.ts berfungsi untuk mengelola aturan bisnis (validasi, kalkulasi, dsb).
  4. Transactional-safe via Prisma

    • Gunakan prisma.$transaction() untuk keperluan tx seperti pada txForceUpdateCurrencyCafewithDeleteOrder.
  5. Dependency Injection

    • Semua service, repo, dan helper harus injek via constructor.
    • Gunakan @Inject(forwardRef(...)) jika dependensi melingkar.
  6. Custom Error Handling

    • Gunakan CustomError dengan status code untuk response lebih jelas.

Folder Structure Reference (based on your screenshot)


🧪 Additional Best Practices

  • ✅ Gunakan file prisma.service.ts sebagai singleton provider untuk Prisma Client.
  • ✅ Gunakan Validation helper atau class-validator untuk validasi non-decorator.
  • ✅ Hindari any dan selalu pakai typing dari @prisma/client atau DTO.