Skip to main content

Kiến trúc & Tech stack

Tech stack

LớpCông nghệ
FrameworkReact 18.3 + TypeScript 4.9
BuildCreate React App 5 + CRACO 7
Routingreact-router-dom v6
Server stateReact Query v3 (useApi.ts ~2500 dòng)
HTTPAxios
Formsreact-hook-form
StylingTailwind CSS 3 + Radix UI + shadcn-style components
Tables/Charts@tanstack/react-table, Recharts
Local stateZustand 5 (ticket search)
Toastreact-hot-toast
CAPTCHA@marsidev/react-turnstile
Monorepo@kioskgaming/ui, @kioskgaming/page-loading
TestJest, Playwright (e2e, visual)

Cấu trúc thư mục

kioskgaming_admin/
├── src/
│ ├── index.tsx / App.tsx
│ ├── config/
│ │ ├── routes.tsx # Single source of truth — routes + nav
│ │ ├── permissions.ts # Role/permission matrix
│ │ └── env.ts
│ ├── components/
│ │ ├── auth/ # Login, ProtectedRoute
│ │ ├── layout/ # Layout, Sidebar, Header
│ │ ├── pages/ # 21+ module trang
│ │ ├── ui/ # shadcn components, data-table
│ │ └── finance/
│ ├── hooks/
│ │ ├── useAuth.tsx
│ │ └── useApi.ts # React Query hooks
│ ├── services/api.ts # ~2800 dòng, ~150 methods
│ ├── contexts/BreadcrumbLabelContext.tsx
│ ├── constants/
│ ├── types/
│ ├── utils/
│ └── queryClient.ts
├── scripts/postbuild-spa-fallback.js
├── craco.config.js
└── package.json

Entry points

FileVai trò
src/index.tsxMount React
src/App.tsxProviders (QueryClient, Auth), route rendering
src/config/routes.tsxRoute config + sidebar metadata
src/services/api.tsAxios client + tất cả API methods

State management

LayerCông nghệMục đích
Server stateReact QueryCache API, mutations, invalidation
AuthReact Context (useAuth)User, token, permissions
FormsReact Hook FormCRUD modals
Ticket searchZustandFilter, pagination
PersistlocalStorageadmin_auth_token, admin_user_data

Auth flow

  1. Khởi tạo từ localStorage
  2. Thiếu permissionObjects → gọi GET /admin/manage/me
  3. hasPermission() — ưu tiên API permissions > role fallback
  4. Logout → queryClient.clear() + xóa localStorage
  5. 401 → auth:unauthorized → auto logout

Permissions

14 permission codes trong config/permissions.ts:

dashboard, userManagement, transactionManagement, withdrawalManagement, manualGameDepositManagement, ticketManagement, adminManagement, agentManagement, agentPopupPermissionManagement, walletManagement, gameProviderManagement, vfxConfigManagement, transactionLimitsManagement, domainManagement

Một số route có superAdminOnly: true — chỉ system_admin / super_admin.


Biến môi trường

BiếnDefaultMô tả
REACT_APP_API_BASE_URLhttp://localhost:3001/apiBackend API
REACT_APP_TURNSTILE_ENABLEDfalseTurnstile
REACT_APP_TURNSTILE_SITE_KEY''Site key
REACT_APP_API_TIMEOUT10000Axios timeout
REACT_APP_APP_NAMETên app
REACT_APP_PLATFORM_USD_OWNER_IDOptional platform tier UUID

Port dev mặc định: 3000 (CRA default)


Cấu hình đặc biệt

CRACO

  • Alias @src/
  • Webpack patch cho @kioskgaming/ui

Deploy SPA

npm run build # craco build + postbuild-spa-fallback.js
FilePlatform
scripts/postbuild-spa-fallback.jsCopy index.html404.html
public/_redirectsNetlify / Cloudflare
public/.htaccessApache
public/web.configIIS
deploy/nginx-spa.conf.exampleNginx

Sơ đồ tổng quan

flowchart TB
subgraph Client["kioskgaming_admin"]
App[App.tsx] --> Auth[AuthProvider]
App --> RQ[React Query]
Auth --> Router[routes.tsx]
Router --> PR[ProtectedRoute]
PR --> Layout[Layout + Sidebar]
Layout --> useApi[useApi hooks]
useApi --> API[api.ts]
end

subgraph Backend["kioskgaming_backend"]
API --> Admin["/admin/*"]
API --> Payment["/payment/admin/*"]
API --> Support["/support/admin/*"]
end