Skip to content

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

FrameworkNestJS 10, TypeScript 5
APIApollo GraphQL (@nestjs/graphql 12, @apollo/server 4), code-first; plus REST (Express)
ORMTypeORM 0.3, pg 8, Postgres
Auth@nestjs/jwt, @nestjs/passport, passport-jwt, passport-google-oauth20, bcrypt
Jugaaws-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 scriptsrc/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 di include GraphQL; 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 pakai JwtMemberAuthGuard. Lihat API and auth.

Cron dan event

  • Satu cron: OrdersCronService.handleOrderPaymentExpiry jalan tiap menit, mengecek ulang DOKU untuk order pending_payment yang sudah lewat expiry, lalu membatalkan yang kedaluwarsa (juga membatalkan order WMS dan draft Biteship).
  • Domain event lewat @nestjs/event-emitter: order.completed dan member.recalculate_favorites ditangani di users/services/members.service.ts untuk memperbarui statistik member. Perhatikan ada juga AppEventEmitter custom 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.