TorbatYar/docs/progress.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

175 lines
8.7 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.

# پیشرفت پروژه (Progress)
## فاز ۱ — Core Platform ✅
### زیرساخت و ساختار
- [x] ساختار کامل پروژه با جداسازی اجباری `backend/` و `frontend/`
- [x] کتابخانه مشترک `backend/shared-lib`
- [x] بخش ۲.۱ معماری: Frontend & Backend Separation
### سرویس هسته (core-service)
- [x] پیکربندی، دیتابیس، cache، logging، security پایه
- [x] مدل‌ها، APIها، Entitlement، Celery، Outbox
- [x] تست‌ها و مستندات
### Frontend
- [x] Next.js مستقل، API Client، White-label theme
---
## فاز ۲ — Identity & Access + SSO ✅
### shared-lib
- [x] `shared/auth/jwt.py` — JWTValidator مشترک
- [x] `shared/auth/roles.py` — نقش‌های استاندارد پلتفرم
- [x] رویدادهای Identity در `shared/events.py`
### Identity & Access Service
- [x] سرویس مستقل در `backend/services/identity-access/`
- [x] دیتابیس `identity_access_db` (database-per-service)
- [x] مدل‌ها: UserProfile, TenantMembership
- [x] Keycloak Admin Client + token exchange (BFF)
- [x] APIها: `/auth/config`, `/auth/token`, `/auth/me`, `/users`, `/tenants/{id}/members`
- [x] Alembic migration + Dockerfile
- [x] تست‌های پایه
### Keycloak
- [x] Realm import: `infrastructure/keycloak/realm/superapp-realm.json`
- [x] Clients: superapp-frontend, core-service, identity-access-service
- [x] نقش‌ها و کاربر admin نمونه
- [x] docker-compose با `--import-realm`
### محافظت APIهای Core
- [x] `AUTH_REQUIRED` قابل تنظیم از env
- [x] `require_platform_admin`, `require_tenant_admin`, `require_authenticated`
- [x] اعمال روی همه endpointهای مدیریتی
### Frontend SSO
- [x] `lib/auth.ts` — OIDC flow
- [x] صفحات `/login`, `/auth/callback`, `/dashboard`
- [x] `AuthGuard` و `useAuth` hook
- [x] API Client با Bearer token
### زیرساخت
- [x] `identity-access-service` در docker-compose (پورت 8001)
- [x] `frontend` در docker-compose (پورت 3000، dev + hot-reload)
- [x] ارتقای Next.js به `15.5.18` (پچ امنیتی — نسخه 14 دیگر پشتیبانی امنیتی ندارد)
- [x] `infrastructure/postgres/init-dbs.sql` برای ساخت identity_access_db
- [x] به‌روزرسانی `.env.example`
### مستندات
- [x] architecture.md (بخش SSO فاز ۲)
- [x] database_schema.md (identity_access_db)
- [x] services_contracts.md (APIهای Identity)
- [x] progress.md, last_step.md
---
## فاز ۳ — OTP Login + Tenant Management ✅
### Backend (core-service)
- [x] مدل `users` و migration Alembic (`0002_users`)
- [x] OTP request/verify: `/api/v1/auth/otp/request`, `/api/v1/auth/otp/verify`
- [x] ثبت‌نام خودکار کاربر + audit log
- [x] یکپارچگی Payamak-Panel SendOtp
- [x] JWT محلی (HS256) برای کاربران OTP
- [x] Admin Tenant CRUD: `/api/v1/admin/tenants` با owner mapping
- [x] فیلتر لیست tenant بر اساس مالک (Platform Admin: همه / Tenant Admin: فقط مالک)
### Frontend
- [x] `lib/api.ts` — API Client یکپارچه با Bearer token
- [x] `/admin/login` — جریان OTP دو مرحله‌ای با countdown
- [x] `/admin/tenants` — داشبورد لیست tenant
- [x] `/admin/tenants/new` — فرم ایجاد tenant
### تست‌ها
- [x] `test_otp_auth.py` — OTP flow و tenant با JWT
### مستندات
- [x] architecture.md (بخش OTP)
- [x] progress.md, last_step.md
- [x] `.env.example` (Payamak + NEXT_PUBLIC_BACKEND_URL)
---
## فاز ۴ — Tenant Onboarding و Workspace Activation ✅
> در بریف پروژه این فاز با عنوان **«Phase 3: operationalizing tenant
> onboarding and workspace activation»** معرفی شده است. چون در شماره‌گذاری
> داخلی این سند «فاز ۳» قبلاً به OTP Login + Tenant Management اختصاص
> یافته بود، این تحویل به‌عنوان فاز ۴ ثبت می‌شود (محتوا دقیقاً همان
> «Phase 3» بریف است).
### Backend (core-service)
- [x] مدل `TenantMembership` + جدول `tenant_memberships` (نقش/وضعیت/owner)
- [x] چرخهٔ عمر tenant: `draft` / `pending_activation` / `active` /
`suspended` / `archived`
- [x] پروفایل/برندینگ روی `tenants`: `business_type`, `default_locale`,
`timezone`, `primary_color`, `secondary_color`, `logo_url`,
`favicon_url`, `onboarding_completed`
- [x] `domains.is_primary` و `domains.verification_status`
- [x] `users.current_tenant_id` (tenant انتخاب‌شده جاری)
- [x] Seed پلن‌های پیش‌فرض `FREE`/`STARTER` (migration + `ensure_default_plan`)
- [x] `UserService.resolve_current` — یکپارچه‌سازی resolve کاربر Core از JWT
محلی (OTP) یا JWT کیکلوک (SSO، بر اساس `keycloak_sub`)
- [x] `MembershipService` — عضویت owner، لیست عضویت‌ها، `ensure_role`
(authorization سبک با bypass برای `platform_admin`)
- [x] `OnboardingService` — ایجاد tenant، برندینگ، دامنه، تکمیل/فعال‌سازی
- [x] `TenantContextService` — ساخت `TenantContextRead` کامل برای frontend
- [x] APIهای جدید: `GET /me`, `GET /me/tenants`, `POST /onboarding/tenant`,
`PATCH /onboarding/tenant/{id}/branding`,
`PATCH /onboarding/tenant/{id}/domain`,
`POST /onboarding/tenant/{id}/complete`, `GET /tenant/current`,
`POST /tenant/switch`
- [x] Migration `0005_tenant_onboarding` (ستون‌ها، جدول جدید، seed پلن‌ها)
- [x] `PLATFORM_BASE_DOMAIN` در config برای تخصیص خودکار زیردامنه
### تست‌ها
- [x] `app/tests/test_onboarding.py` — جریان کامل onboarding (ساخت tenant،
برندینگ، دامنه، تکمیل، `/me`, `/tenant/current`, `/tenant/switch`) +
حالات forbidden/duplicate/owner-required
- [x] کل test suite موجود (`test_otp_auth`, `test_tenants`, `test_domains`, ...)
بدون رگرسیون اجرا شد
### Frontend
- [x] `lib/api.ts` — انواع و متدهای `api.me`, `api.onboarding`,
`api.tenantContext` (بدون تغییر ساختار قبلی `api.tenants`/`api.auth`)
- [x] `hooks/useMe.ts` — بارگذاری `/api/v1/me`
- [x] `app/onboarding/page.tsx` — ویزارد تک‌صفحه‌ای ۴ مرحله‌ای (کسب‌وکار →
برندینگ → دامنه → بازبینی) با قابلیت ازسرگیری onboarding ناتمام
- [x] `app/dashboard/page.tsx` — داشبورد واقعی workspace (نام، وضعیت، پلن،
دامنه، وضعیت onboarding، نقش کاربر) + redirect خودکار به `/onboarding`
در صورت نیاز
- [x] `components/TenantSwitcher.tsx` — سوییچر ساده (فقط با بیش از یک
عضویت نمایش داده می‌شود)
- [x] Type-check تمیز (`tsc --noEmit`)
### زیرساخت
- [x] `PLATFORM_BASE_DOMAIN` در `.env` و `.env.example`
### مستندات
- [x] architecture.md (بخش ۱۱ — فاز ۴)
- [x] database_schema.md (`tenant_memberships` جدید Core، ستون‌های جدید
`tenants`/`domains`/`users`، توضیح تمایز با جدول هم‌نام Identity)
- [x] services_contracts.md (بخش ۷ — Onboarding و Tenant Context)
- [x] progress.md, last_step.md
### محدودیت‌های شناخته‌شده (عمداً خارج از این فاز)
- [ ] درگاه پرداخت واقعی برای اشتراک (فقط ساختار provisioning پیاده شده)
- [ ] تأیید واقعی دامنهٔ اختصاصی (DNS/TXT) — فعلاً فقط `pending`
- [ ] tenantهای ساخته‌شده از مسیر قدیمی `POST /admin/tenants` عضویت/پلن
خودکار نمی‌گیرند (آن مسیر به فاز ۱/۲ تعلق دارد و در این فاز بازنویسی
نشده)
- [ ] JIT provisioning کامل کاربر Core از JWT کیکلوک (کاربر SSO بدون رکورد
Core فعلاً خطای `forbidden` می‌گیرد)
## فازهای بعدی (Backlog)
- [ ] پیاده‌سازی اولین ماژول بیزینسی واقعی (نگاه کنید به `last_step.md`)
- [ ] White-label runtime rendering (تشخیص tenant از دامنه + اعمال برند در frontend)
- [ ] JIT provisioning کامل کاربر Core از SSO کیکلوک
- [ ] Permission management پیشرفته (نقش‌های سفارشی، دعوت اعضا)
- [ ] تأیید واقعی دامنهٔ اختصاصی (DNS/TXT) و درگاه پرداخت
- [ ] Subscription & Entitlement به‌عنوان سرویس مستقل
- [ ] Message bus واقعی برای انتشار رویدادها
- [ ] Reverse proxy (Nginx/Traefik) و TLS