safavimohadeseh78andCursor f0de721c5f Let admin create and price orders with real product lines.
Admin create now requires items, and pricing can add or remove products instead of only patching existing rows.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 21:41:09 +03:30
2026-09-10 18:34:31 +03:30
2026-09-10 18:54:53 +03:30
2026-09-10 18:54:53 +03:30
2026-09-10 17:24:13 +03:30
2026-09-10 17:24:13 +03:30
2026-09-10 18:54:53 +03:30
2026-09-10 18:54:53 +03:30
2026-09-10 17:24:13 +03:30

Fabric Trade Server

بک‌اند NestJS + Prisma + PostgreSQL برای اپ کاربر و پنل ادمین تجارت پارچه.

پیش‌نیاز

  • Node.js 20+
  • Docker (برای PostgreSQL)

اگر به Docker دسترسی ندارید:

sudo usermod -aG docker "$USER"
# سپس یک‌بار logout/login کنید

راه‌اندازی سریع (لوکال بدون Docker برای API)

cd fabric_trade_server
docker compose up -d postgres
npm install
npx prisma migrate deploy
npm run prisma:seed
npm run start:dev

دیپلوی: بیلد روی سیستم خودت، اجرا روی سرور

روی سرور هیچ npm و هیچ دستور prisma اجرا نمی‌شود. سه چیز از قبل ساخته و روی گیت هستند: dist، prisma-client.tar.gz (کلاینت Prisma) و deploy-bundle.tar.gz (node_modules پروداکشن).

۱) روی سیستم خودت:

cd fabric_trade_server
npm run deploy:build
git add dist prisma-client.tar.gz && git commit -m "..." && git push

۲) روی سرور:

cd /opt/parche/server
git pull
docker compose up -d --build
docker compose logs -f api

Dockerfile باندل را باز می‌کند، بعد dist و prisma و کلاینت آماده‌ی Prisma را روی آن می‌نویسد. prisma generate روی هاست پروداکشن چند دقیقه طول می‌کشد، پس عمداً آنجا اجرا نمی‌شود.

هر بار که prisma/schema.prisma را عوض کردی، npm run deploy:build را بزن تا prisma-client.tar.gz هم به‌روز شود؛ وگرنه سرور با کلاینت قدیمی بالا می‌آید.

فقط اگر پکیج npm جدید اضافه شد باندل را دوباره بساز و push کن:

bash scripts/pack-bundle.sh
git add deploy-bundle.tar.gz && git commit -m "refresh deploy bundle" && git push
  • env سرور از .env همان پوشه خوانده می‌شود (env_file در compose)
  • API روی 127.0.0.1:${API_PORT} بالا می‌آید (سرور: 8585)
  • مایگریشن موقع استارت کانتینر اجرا می‌شود
  • LiteSpeed را Reverse Proxy کنید به http://127.0.0.1:8585

مثال مسیر LiteSpeed: https://domain.com/api/ → http://127.0.0.1:3000/api/

حساب‌های تست (پس از seed)

نقش ورود رمز / OTP
ادمین 09128081392 123456
مشتری 09121234567 OTP پیامکی (۴ رقم) — با SMS_ENABLED=false کد ثابت: 1234

متغیرهای محیطی

فایل .env:

DATABASE_URL=postgresql://fabric:fabric123@localhost:5432/fabric_trade?schema=public
JWT_SECRET=fabric-trade-dev-secret-change-me
JWT_EXPIRES_IN=7d
PORT=3000
MOCK_OTP_CODE=1234
OTP_TTL_MINUTES=5
SMS_ENABLED=true
SMS_API_URL=http://185.231.112.101/api/createsms
SMS_SECRET_KEY=...
SMS_PLATFORM=rayegansms
SMS_HOST=پارچه
SMS_APP_NAME=پارچه

اسکریپت‌ها

دستور کار
npm run db:up بالا آوردن Postgres
npm run prisma:migrate مایگریشن توسعه
npm run prisma:seed دیتای فیک
npm run start:dev سرور با watch
npm run db:reset ریست کامل دیتابیس

ساختار API (خلاصه)

کاربر (Bearer JWT مشتری)

  • POST /api/auth/otp/request / verify
  • GET /api/auth/me · PATCH /api/auth/profile
  • GET /api/companies · catalogs · products · bank-accounts
  • GET/POST /api/carts …
  • GET/POST /api/orders · POST /api/orders/:id/cash-receipt

ادمین (Bearer JWT ادمین)

  • POST /api/admin/auth/login
  • GET /api/admin/dashboard · /admin/reports · /admin/settings
  • CRUD: companies, catalogs, products, customers, users, orders, checks, cash-payments, shipments
S
Description
No description provided
Readme
168 MiB
Languages
JavaScript 95%
TypeScript 4.9%
Shell 0.1%