Backend — def-exsport-backend
GraphQL + REST API di belakang kedua frontend dan tiga third party. Semua business logic ada di sini.
Cara halaman ini diverifikasi
Dibaca pada 2026-09-15 dari package.json, src/main.ts, src/app.module.ts, module tree, dan config DB. Checkout lokal: /Volumes/xpro/erisristemena/nestjs/def-exsport-backend.
Stack
| Framework | NestJS 10, TypeScript 5 |
| API | Apollo GraphQL (@nestjs/graphql 12, @apollo/server 4), code-first; plus REST (Express) |
| ORM | TypeORM 0.3, pg 8, Postgres |
| Auth | @nestjs/jwt, @nestjs/passport, passport-jwt, passport-google-oauth20, bcrypt |
| Juga | aws-sdk (S3), @nestjs/schedule (cron), @nestjs/event-emitter, nodemailer + EJS, exceljs, moment-timezone, nanoid |
Tidak ada queue/bull, tidak ada Sentry, tidak ada pin engines.
Menjalankan
Script: start:dev = nest start --watch, start:prod = node dist/main, build = nest build. Tidak ada port di script — src/main.ts listen di APP_PORT (3014 di lokal, default 3000) dan menyetel global prefix dari APP_PREFIX (be-api di lokal, gapi di prod).
Struktur
Tiap area adalah src/<domain>/ dengan <domain>.module.ts, resolvers/, services/, models/ (entity), dto/, dan sering controllers/. Module bisnis: catalogs, users, orders, payments, deliveries, promotions, journals, admins. Pendukung: public, storages, smtp, health, events, database, utils. Lihat codebase tour untuk apa yang dimiliki masing-masing, dan Features untuk trace end-to-end.
Tiga fakta struktural
- Code-first GraphQL, tanpa
schema.gql. Schema di-generate saat boot. Hanya admins, catalogs, users, orders, promotions, journals yang ada diincludeGraphQL; deliveries, payments, public, health, storages hanya REST. synchronize: true, tanpa migration, tanpa seed. Schema-nya adalah file entity; "seeding" hanya beberapa endpoint REST. Lihat Database.- Dua realm JWT, guard per-resolver. Resolver admin menumpuk
JwtAuthGuard, LastActivityGuard, RoleAbilityGuard; member pakaiJwtMemberAuthGuard. Lihat API and auth.
Cron dan event
- Satu cron:
OrdersCronService.handleOrderPaymentExpiryjalan tiap menit, mengecek ulang DOKU untuk orderpending_paymentyang sudah lewat expiry, lalu membatalkan yang kedaluwarsa (juga membatalkan order WMS dan draft Biteship). - Domain event lewat
@nestjs/event-emitter:order.completeddanmember.recalculate_favoritesditangani diusers/services/members.service.tsuntuk memperbarui statistik member. Perhatikan ada jugaAppEventEmittercustom kedua.
Client third-party
DeliveriesService (Biteship), PaymentsService (DOKU) dan WmsService (PowerBiz) — semuanya @nestjs/axios, base URL dari env, diarahkan ke simulator di dev. Callback masuk mendarat di route REST di bawah webhooks/*.
Model branch
Environment branches: main, staging, development di origin (plus branch feature lama seperti vouchers, members — jangan pernah base dari itu). Auto-deploy saat push. Lihat Environments.