# 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 ``` ## دیپلوی با Docker Compose (پیشنهادی برای سرور) روی سرور داخل `fabric_trade_server`: ```bash # اولین بار با دیتای فیک: RUN_SEED=true docker compose up -d --build # بعداً بدون seed: docker compose up -d --build ``` اگر بیلد به‌خاطر رجیستری npm یا Alpine خطا داد (رایج روی سرورهای ایران): ```bash # پیش‌فرض Dockerfile از میرور npmmirror استفاده می‌کند. # در صورت نیاز: docker compose build --build-arg NPM_REGISTRY=https://registry.npmmirror.com RUN_SEED=true docker compose up -d ``` - API روی `127.0.0.1:3000` بالا می‌آید - مایگریشن موقع استارت کانتینر اجرا می‌شود - LiteSpeed را Reverse Proxy کنید به `http://127.0.0.1:3000` مثال مسیر 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 | |------|------|-----------| | ادمین | `09121112222` | `admin123` | | مشتری | `09121234567` | OTP: `123456` | ## متغیرهای محیطی فایل `.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=123456 OTP_TTL_MINUTES=5 ``` ## اسکریپت‌ها | دستور | کار | |--------|-----| | `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