TorbatYar/docs/developer_guide.md
Mortezakoohjani 800b0ba2c5 Deploy TorbatYar for torbatyar.ir with nginx multi-tenant routing.
Wire production domain, CORS for tenant subdomains, celery volume mounts, and nginx reverse proxy configs for apex, API, identity, auth, and wildcard tenants.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 21:43:33 +03:30

111 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# راهنمای توسعه‌دهنده (Developer Guide)
## ۱. پیش‌نیازها
- Python 3.11+ (backend)
- Node.js 18+ (frontend)
- Docker و Docker Compose (برای اجرای کامل)
- PostgreSQL 15+ و Redis (در صورت اجرای بدون Docker)
## ۲. قانون جداسازی Frontend/Backend (اجباری)
- تمام کد backend فقط در `backend/` قرار دارد.
- تمام کد frontend فقط در `frontend/` قرار دارد.
- ارتباط فقط از طریق REST API نسخه‌دار (`lib/api-client.ts` در frontend).
- جزئیات در [`architecture.md`](./architecture.md) بخش ۲.۱.
## ۳. راه‌اندازی با Docker
```bash
cp .env.example .env
docker compose up -d --build
```
سرویس‌ها: Core API روی `:8000`، Identity روی `:8001`، Frontend روی `:3000`،
Keycloak روی `:8080`. همه با `docker compose up -d --build` بالا می‌آیند.
## ۴. راه‌اندازی محلی — Backend
```bash
cd backend/core-service
python -m venv .venv
# Windows: .venv\Scripts\Activate.ps1 | Linux/macOS: source .venv/bin/activate
pip install -r requirements.txt
alembic upgrade head
uvicorn app.main:app --reload
```
## ۵. راه‌اندازی محلی — Frontend
```bash
cd frontend
npm install
npm run dev
```
Frontend: http://localhost:3000
## ۶. متغیرهای محیطی
همه تنظیمات در `.env` هستند (نمونه: `.env.example`). هیچ مقداری در کد
hardcode نمی‌شود.
**Backend:** `DATABASE_URL`, `DATABASE_URL_SYNC`, `REDIS_URL`, `CELERY_BROKER_URL`,
`KEYCLOAK_*`, `INTERNAL_TOKEN_SECRET`, `PLATFORM_*`.
**Frontend:** `NEXT_PUBLIC_API_BASE_URL` (پیش‌فرض: `http://localhost:8000`).
## ۷. ساختار backend
```
backend/
├── core-service/app/
│ ├── api/v1/ # routerها
│ ├── core/ # config, database, cache, security, logging
│ ├── models/ # مدل‌های SQLAlchemy
│ ├── schemas/ # اسکیماهای Pydantic
│ ├── services/ # منطق کسب‌وکار
│ ├── repositories/ # دسترسی به داده
│ ├── middlewares/ # تشخیص tenant
│ ├── workers/ # Celery
│ └── tests/ # تست‌ها
├── shared-lib/ # کتابخانه مشترک backend
└── services/ # placeholder سرویس‌های آینده
```
## ۸. ساختار frontend
```
frontend/
├── app/ # صفحات Next.js (App Router)
├── components/ # کامپوننت‌های UI
├── hooks/ # React hooks
├── lib/ # API client، theme
├── styles/ # CSS global
└── public/ # فایل‌های استاتیک
```
## ۹. Migrations (Alembic)
```bash
cd backend/core-service
alembic revision --autogenerate -m "توضیح"
alembic upgrade head
```
## ۱۰. اجرای تست‌ها (Backend)
```bash
cd backend/core-service
pytest -q
```
## ۱۱. Celery
```bash
cd backend/core-service
celery -A app.workers.celery_app.celery_app worker -Q default,core_events,notifications,webhooks
celery -A app.workers.celery_app.celery_app beat
```
## ۱۲. الگوهای کدنویسی
- نام فایل‌ها/کلاس‌ها/توابع/routeها/migrationها انگلیسی استاندارد.
- کامنت‌ها می‌توانند فارسی باشند.
- منطق کسب‌وکار فقط در backend (`services/`).
- UI فقط در frontend (`components/`, `app/`).
- خطاها از `shared.exceptions` استفاده کنند.
## ۱۳. افزودن سرویس جدید (فازهای بعدی)
1. پوشه سرویس را در `backend/services/` توسعه دهید.
2. دیتابیس مستقل با `tenant_id` بسازید.
3. قابلیت‌ها را در Core ثبت کنید.
4. UI مربوطه را در `frontend/` بسازید (فقط از API استفاده کند).
5. ارتباط را فقط از طریق API/Event برقرار کنید.