Codebase tour
Jalan-jalan lewat tiga repo utama, supaya kamu tahu di mana sebuah perubahan seharusnya sebelum membuka file. Repo pendukung punya halaman repo-nya sendiri.
Cara halaman ini diverifikasi
Dibaca pada 2026-09-15 dari pohon module src/ backend dan pohon App Router kedua frontend. Jalur bersifat relatif-repo.
Backend — def-exsport-backend
NestJS 10. Entry-nya src/main.ts → src/app.module.ts. Setiap area bisnis adalah folder module berbentuk <domain>/<domain>.module.ts dengan resolvers/, services/, models/ (TypeORM entity) dan dto/, dan sering controllers/ untuk REST.
| Module | Memiliki |
|---|---|
catalogs | products, articles (variants), heads/types/subtypes, categories, brands, series, collaborations, tags — dan WmsService untuk stok |
users | members, member addresses, cart, stores, reference locations |
orders | orders, order items, order status, cron payment-expiry |
payments | DOKU client dan webhook-nya (REST saja) |
deliveries | Biteship client dan webhook-nya (REST saja) |
promotions | vouchers, discounts, flash sales |
journals | konten blog |
admins | admin users, roles, menus (RBAC), dan konten homepage / banners / CMS |
public, storages, smtp, health, events, database, utils | penyajian file, storage S3/lokal, mail, liveness, domain events, config DB, helper |
Tiga fakta menentukan bentuk seluruh backend:
- GraphQL itu code-first.
GraphQLModule.forRootmemakaiautoSchemaFile: true, jadi schema dihasilkan saat boot dari decorator. Tidak adaschema.gqluntuk dibaca — boot app-nya untuk melihat SDL. Hanya sebagian module yang masukincludeGraphQL: admins, catalogs, users, orders, promotions, journals.deliveries,payments,public,health,storagesadalah REST-only. - Schema adalah entity-nya. TypeORM menjalankan
synchronize: true; tidak ada folder migrations dan tidak ada seed script. "Seeding" adalah beberapa REST endpoint (POST admins/seed-settings,POST vouchers/seed-voucher-types, …). - Dua realm auth. Resolver admin menumpuk
@UseGuards(JwtAuthGuard, LastActivityGuard, RoleAbilityGuard); resolver member memakaiJwtMemberAuthGuard. Tidak ada global guard. Lihat API dan auth.
Operasi GraphQL storefront diawali front*; operasi admin/CMS polos. Create/update dengan file upload adalah REST controller (multipart), misalnya catalogs/products.
Storefront — def-exsport-frontend-storefront
Next.js 15 App Router di bawah src/app/, alias path @/* → ./src/*. Sebagian besar halaman adalah client component yang mengambil data lewat Apollo hook; beberapa file layout.tsx adalah server component yang hanya membangun metadata SEO. Tidak ada SSG/ISR dan tidak ada middleware.ts; penjagaan route dilakukan di dalam halaman.
Layout kodenya:
src/app/— routes:/,/productsdan/products/[slug],/series,/collaboration,/flash-sale,/sale,/new-arrival,/search,/checkout/shipping,/auth/*,/user/*(profile, address, my-order),/journals,/store-locator.src/lib/<domain>/— dokumen GraphQL (*.gql.ts) dan type (*.type.ts), operasi bernamafront*.src/modules/<feature>/components/— UI fitur;src/components/— UI kit buatan tangan (Tailwind v4 + Headless UI, tanpa component library).src/context/— lima React context (cart,address,homepage,dialog,alert). Tanpa Redux/Zustand.- Auth adalah NextAuth (
src/app/auth.ts), Credentials provider →loginAsMember; token menumpang di NextAuth JWT session dan dikirim sebagaiBearerdi setiap panggilan Apollo/axios.
Ada cart, tetapi tidak ada route /cart — cart adalah context dan slide-over.
Admin — def-exsport-frontend-admin
Next.js 15 App Router. Semuanya di bawah /admin; / redirect ke /admin/dashboard. src/middleware.ts adalah gerbang kasar "sudah login atau belum".
src/app/admin/<area>/—page.tsxlist ditambah halamanadd-*/edit-*/[slug]. Area: products (+ variants), heads-types, categories, sub-categories, brands, tags, series, collaborations, members, orders (view only), stores, homepage, discounts, vouchers, flash-sales, journals, admins, roles.src/lib/<domain>/—index.ts(GraphQL),*.rest.ts(axios multipart untuk upload),*.type.ts.src/modules/<area>/— form dan list. UI adalah template Metronic yang di-vendor ditambah Tailwind v3; tidak ada React component library, dan modal/menu memakai JS imperatif Metronic.- RBAC bersifat data-driven dan client-side.
src/hooks/useAccess.tsxmembacasession.user.me.role.menus[](tiap menu punya view/add/update/delete/export). Ia menyembunyikan item sidebar dan menjaga halaman; backend menegakkan hak yang sama per resolver.
Dua area yang perlu diketahui: dashboard itu stub (merender heading kosong), dan orders view-only (src/lib/orders punya query, tanpa mutation).
Kekhasan penamaan yang harus dipertahankan
Kutip apa adanya — semuanya nyata di kode: wrapper Apollo storefront adalah appollo-wrapper.tsx (triple p) dan route community-nya adalah /comunity; domain vouchers admin dieja vourchers (src/lib/vourchers, vourcer.rest.ts).