Files
nademitex_server/README.md
T

124 lines
3.9 KiB
Markdown

# Fabric Trade Server
بک‌اند NestJS + Prisma + PostgreSQL برای اپ کاربر و پنل ادمین تجارت پارچه.
## پیش‌نیاز
- Node.js 20+
- Docker (برای PostgreSQL)
اگر به Docker دسترسی ندارید:
```bash
sudo usermod -aG docker "$USER"
# سپس یک‌بار logout/login کنید
```
## راه‌اندازی سریع (لوکال بدون Docker برای API)
```bash
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` پروداکشن).
**۱) روی سیستم خودت:**
```bash
cd fabric_trade_server
npm run deploy:build
git add dist prisma-client.tar.gz && git commit -m "..." && git push
```
**۲) روی سرور:**
```bash
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
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/`
- API: http://localhost:3000/api
- Swagger: http://localhost:3000/api/docs
## حساب‌های تست (پس از 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