Skip to content

Monorepo Structure

ระบบ WMS ทั้งหมดอยู่ใน monorepo เดียว จัดการด้วย pnpm workspaces — แชร์ TypeScript config, dependency, และ shared types ระหว่าง apps

Folder Tree

WMS/
├─ apps/
│  ├─ api/                     # NestJS backend (REST API)
│  │  ├─ src/
│  │  │  ├─ app.module.ts      # ลงทะเบียน 20 feature modules
│  │  │  ├─ main.ts            # bootstrap: global prefix, ValidationPipe, CORS, Swagger
│  │  │  ├─ common/            # shared dto/services/utils
│  │  │  ├─ infrastructure/    # prisma module + service
│  │  │  └─ modules/           # 19 folders — feature modules
│  │  ├─ prisma/
│  │  │  ├─ schema.prisma      # 35+ models
│  │  │  └─ seed.ts            # default tenant + admin
│  │  ├─ test/                 # e2e tests
│  │  ├─ Dockerfile
│  │  └─ package.json
│  │
│  ├─ web/                     # Main WMS (React 19 + Vite 6)
│  │  ├─ src/
│  │  │  ├─ main.tsx           # provider tree (QueryClient → Router → Auth → Help → Toaster)
│  │  │  ├─ App.tsx            # routes (Layout + ProtectedRoute)
│  │  │  ├─ pages/             # หน้า: dashboard, master-data, inbound, outbound, …
│  │  │  ├─ components/        # Layout, ProtectedRoute, modals, tables
│  │  │  ├─ contexts/          # AuthContext, HelpContext
│  │  │  ├─ hooks/             # useApi (useList/useDetail/useCreate/useUpdate/useRemove/useAction)
│  │  │  ├─ lib/               # api.ts (axios), toast.ts, permissions.ts
│  │  │  ├─ locales/           # th.ts, en.ts
│  │  │  └─ i18n.ts
│  │  └─ package.json
│  │
│  ├─ admin/                   # Admin Portal (React 19 + Vite 6)
│  │  ├─ src/                  # โครงสร้างคล้าย web — มี per-module ProtectedRoute
│  │  └─ package.json
│  │
│  └─ docs/                    # VitePress docs site
│     ├─ .vitepress/config.ts  # sidebar + theme + locales
│     ├─ guide/                # user + admin guides
│     ├─ workflows/            # end-to-end flows
│     ├─ reference/            # glossary, allocation, integration-api
│     ├─ spec/                 # ← Technical Specification (หน้านี้)
│     └─ troubleshooting/

├─ packages/
│  └─ shared-types/            # TypeScript types ใช้ร่วม FE ↔ BE

├─ scripts/                    # repo-wide automation
├─ docker-compose.yml          # local-dev stack (postgres + redis + api)
├─ render.yaml                 # Render.com infrastructure-as-code
├─ pnpm-workspace.yaml         # ลงทะเบียน workspaces
├─ tsconfig.base.json          # shared TS config
├─ WMS_SPEC.md                 # ต้นฉบับ functional spec
└─ package.json                # root scripts (dev:api / build:web / db:push / …)

หน้าที่ของแต่ละโฟลเดอร์

โฟลเดอร์บทบาทOwner
apps/apiBackend REST API ทั้งหมด (business logic, validation, DB access)Backend dev
apps/webUI สำหรับ operator/supervisor/manager — งานคลังประจำวันFrontend dev
apps/adminUI สำหรับ admin/superadmin — user management, settings, monitoringFrontend dev
apps/docsคู่มือผู้ใช้ + technical spec (static site)All
packages/shared-typesTypeScript interfaces ใช้ทั้ง FE/BE (avoid drift)Backend dev
scripts/repo-wide tooling เช่น migration helpers, seed utilitiesDevOps
docker-compose.ymlSelf-contained local stack (เผื่อไม่ใช้ Supabase)Local dev

pnpm Workspaces

ไฟล์ pnpm-workspace.yaml:

yaml
packages:
  - "apps/*"
  - "packages/*"
allowBuilds:
  "@nestjs/core": true
  "@prisma/client": true
  "@prisma/engines": true
  bcrypt: true
  esbuild: true
  prisma: true

allowBuilds คือ pnpm 11+ feature ที่ต้อง allowlist native post-install scripts (security)

คำสั่งทั่วไป

ทุกคำสั่งรันจาก repo root

Workspace-filtered (รัน app ใดอย่างเดียว)

bash
pnpm --filter @wms/api dev          # backend dev (ts-node-dev watch)
pnpm --filter @wms/web dev          # main app (Vite, port 5173)
pnpm --filter @wms/admin dev        # admin portal (Vite, port 5174)
pnpm --filter @wms/docs dev         # docs site (port 5175)

pnpm --filter @wms/api build        # NestJS production build → dist/
pnpm --filter @wms/web build        # tsc + vite build → dist/

Root-level shortcuts (จาก package.json ของ root)

bash
pnpm dev                # parallel: api + web
pnpm build              # parallel: api + web build
pnpm dev:api / dev:web / dev:admin / dev:docs
pnpm build:docs

pnpm db:generate        # prisma generate (regen client)
pnpm db:migrate         # prisma migrate dev (creates migration)
pnpm db:push            # prisma db push (apply schema, no migration)

pnpm lint               # recursive lint
pnpm test               # recursive test

Add dependency to specific app

bash
pnpm --filter @wms/web add lodash
pnpm --filter @wms/api add -D @types/lodash

ติดตั้งทั้งหมด

bash
pnpm install            # resolve + install ทุก workspace

dependency hoisting

pnpm จะ symlink dep ของแต่ละ workspace ไป node_modules/.pnpm/ (content-addressable) — ไม่ flatten แบบ npm/yarn → ปลอดภัยกว่า, ใช้พื้นที่น้อยกว่า

เผยแพร่ภายใต้ Digital Outsourcing