Files
fabric_trade_server/README.md
T
mohmdsdgandCursor d5dfd6a0f0 Ship prebuilt Prisma client so the server never runs prisma generate
prisma generate needs over three minutes on the production host, which made
every deploy hang on that build step. The client is now generated on the dev
machine into prisma-client.tar.gz (tracked, 8.5MB) and the image just untars
it. Dropping the unused linux-musl engine target halves that payload.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 16:35:06 +03:30

3.9 KiB
Raw Blame History

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
ادمین 09121112222 admin123
مشتری 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