admin/PRODUCTION_READINESS_PLAN.md
alisaza e1eaf5eff5 feat: initial ghabilee-admin backoffice app
Extract admin dashboard from ghabilee-frontend2 into a dedicated Next.js
app for backoffice.ghabilee.ir (no SEO indexing / Clarity).
2026-09-05 13:12:59 +03:30

219 lines
10 KiB
Markdown
Raw Permalink 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.

# برنامه آمادگی Production فرانت‌اند قبیله
این سند برنامه اجرایی رسیدن از وضعیت فعلی به انتشار عمومی مطمئن است. ترتیب مراحل الزام‌آور است: هر مرحله باید معیارهای پذیرش خود را پاس کند تا مرحله بعد آغاز شود.
## تعریف Done نهایی
نسخه زمانی Production-ready محسوب می‌شود که:
- pipeline استاندارد و Docker build روی checkout تمیز، تکرارپذیر و کاملاً سبز باشد.
- lint هیچ error یا warning نداشته باشد.
- مسیرهای auth، booking، payment و authorization تست E2E پایدار داشته باشند.
- refresh token در JavaScript و localStorage قابل دسترس نباشد.
- کنترل‌های XSS، CSRF، CSP و upload در فرانت و بک‌اند تأیید شده باشند.
- accessibility، Core Web Vitals و مرورگرهای هدف از budgetهای تعریف‌شده عبور نکنند.
- خطاها و شاخص‌های عملیاتی قابل مشاهده باشند و rollback آزمایش شده باشد.
- smoke test محیط staging و production به‌صورت خودکار اجرا شود.
## ۱. تثبیت pipeline و کیفیت پایه — Release blocker
### هدف
یک فرمان واحد باید تمام قرارداد API، typeها، lint، تست و production build را بدون وابستگی به state محلی بررسی کند.
### کارها
1. رفع خطای TypeScript تولید OpenAPI در booking service بک‌اند.
2. یکسان‌سازی فرمان‌های:
- `generate:api`
- `typecheck`
- `lint`
- `test`
- `build`
- `check`
3. رفع تمام warningهای ESLint و فعال کردن مجدد `--max-warnings 0`.
4. تعیین سیاست روشن برای کد generated و جلوگیری از lint دستی آن.
5. ثابت کردن نسخه Node و pnpm در local، Docker و CI.
6. افزودن CI با cache کنترل‌شده و اجرای build روی checkout تمیز.
7. افزودن کنترل تغییر OpenAPI تا generated client قدیمی merge نشود.
### معیار پذیرش
```bash
pnpm install --frozen-lockfile
pnpm check
pnpm build
```
هر سه فرمان باید با exit code صفر اجرا شوند و working tree پس از build تغییر نکند.
## ۲. تست مسیرهای حیاتی — Release blocker
### هدف
شکست flowهای مالی و session پیش از deploy شناسایی شود.
### کارها
1. unit test برای route policy، response normalization، validation و error mapping.
2. component test برای فرم‌های OTP، booking CTA، payment state و modalهای حساس.
3. راه‌اندازی Playwright با fixture و data factory ایزوله.
4. E2E سناریوهای:
- درخواست OTP، ورود، تکمیل پروفایل و logout
- refresh موفق، refresh هم‌زمان و session منقضی
- دسترسی guest/user/admin به routeها
- ایجاد، ویرایش و انتشار رویداد
- رزرو، جلوگیری از double-submit و انقضای رزرو
- پرداخت موفق، ناموفق، callback و retry
- لغو، refund و waitlist
- chat، notification و unread count
5. اجرای تست‌ها در CI با artifact شامل trace و screenshot شکست.
### معیار پذیرش
- تمام تست‌های مسیر بحرانی پایدار و مستقل باشند.
- تست flaky پذیرفته نیست؛ retry نباید خطای واقعی را مخفی کند.
- coverage منطق حساس حداقل ۸۰٪ branch باشد؛ برای JSX عدد سراسری تحمیل نمی‌شود.
## ۳. سخت‌سازی امنیت — Release blocker
### هدف
کاهش ریسک سرقت session، XSS، CSRF و upload مخرب.
### کارها
1. انتقال refresh token به cookie با `HttpOnly`، `Secure` و `SameSite` مناسب.
2. حذف refresh token از localStorage و کد client.
3. rotation و reuse detection در بک‌اند و revoke واقعی session هنگام logout.
4. تعیین مدل CSRF و پیاده‌سازی token/origin validation متناسب با cookie auth.
5. تعریف CSP سازگار با API، WebSocket، map، image و file server.
6. افزودن HSTS، Referrer-Policy، Permissions-Policy، nosniff و frame-ancestors.
7. sanitize قطعی HTML تولیدشده توسط editor در مرز backend.
8. اعتبارسنجی server-side نوع، حجم، extension و محتوای upload.
9. dependency audit، secret scan و جلوگیری از log شدن OTP/token/PII.
### معیار پذیرش
- refresh token از DevTools JavaScript قابل خواندن نباشد.
- تست‌های session rotation، CSRF و XSS پاس شوند.
- security headers روی پاسخ production تأیید شوند.
- یافته Critical/High باز در ممیزی امنیتی وجود نداشته باشد.
## ۴. refactor معماری و DRY
### هدف
کاهش coupling و امکان تغییر featureها بدون regression گسترده.
### کارها
1. شکستن `PaginatedList` به:
- query/state hook
- table renderer
- filter controls
- pagination
- export action
2. شکستن `Input` به کنترل‌های typed مجزا و API ترکیبی مشترک.
3. انتقال business logic از pageها به feature hook/service.
4. حذف تبدیل‌های تکراری response و type assertionهای ناامن.
5. تعریف الگوی واحد data fetching شامل cache، retry، abort و invalidation.
6. محدود کردن Contextهای global و انتقال providerها به نزدیک‌ترین layout مصرف‌کننده.
7. انتقال محتوای غیرتعاملی و public fetching به Server Component.
### معیار پذیرش
- رفتار قبلی با component/E2E test حفظ شود.
- فایل‌های feature عادی ترجیحاً زیر ۳۰۰ خط باشند.
- cycle در import graph و duplicate business rule وجود نداشته باشد.
## ۵. error handling، accessibility و UX مرزی
### هدف
کاربر در خطا، کندی شبکه، keyboard navigation و deviceهای مختلف مسیر قابل فهم داشته باشد.
### کارها
1. مدل خطای واحد برای validation، network، auth، permission و server.
2. error boundary سطح route و feature با retry و request ID.
3. حالت‌های loading، skeleton، empty، offline، timeout و retry برای تمام صفحات.
4. جلوگیری از double-submit و تعریف optimistic update فقط در عملیات امن.
5. حفظ filter/page هنگام back navigation.
6. keyboard navigation، focus trap/restore، label، description و live region.
7. بررسی contrast، reduced motion، zoom و screen reader.
8. اجرای axe در component و E2E test.
### معیار پذیرش
- axe در مسیرهای اصلی violation بحرانی/جدی نداشته باشد.
- تمام flowهای اصلی فقط با keyboard قابل انجام باشند.
- هر درخواست async حالت loading، error و retry مشخص داشته باشد.
## ۶. performance و مرزبندی Next.js
### هدف
کاهش JavaScript سمت client و دستیابی پایدار به Core Web Vitals مناسب.
### کارها
1. تحلیل bundle و تعیین budget برای routeهای اصلی.
2. dynamic import برای editor، map، chart، QR و کتابخانه‌های سنگین.
3. استفاده درست از `next/image` و تعیین sizes/priority.
4. کاهش client boundary و providerهای root.
5. cache/revalidation صحیح صفحات عمومی SEO.
6. حذف hydration و renderهای غیرضروری.
7. ثبت Web Vitals واقعی و اصلاح براساس داده production.
### معیار پذیرش
- p75 موبایل: LCP ≤ 2.5s، INP ≤ 200ms و CLS ≤ 0.1.
- budget تعریف‌شده bundle در CI enforce شود.
- route عمومی بدون نیاز، client-side data fetching نداشته باشد.
## ۷. عملیات Production و PWA
### هدف
انتشار قابل مشاهده، قابل rollback و قابل پشتیبانی باشد.
### کارها
1. Docker image کوچک، reproducible و non-root با health check.
2. جداسازی config و secret محیط‌های dev/staging/production.
3. error monitoring با source map خصوصی و release tag.
4. داشبورد Web Vitals، خطاهای API/WebSocket و نرخ شکست login/payment.
5. alert با threshold و runbook مشخص.
6. smoke test خودکار پس از deploy.
7. canary یا rollout تدریجی و rollback آزمایش‌شده.
8. سیاست cache Service Worker؛ عدم cache داده خصوصی.
9. update flow نسخه PWA، offline fallback و تست push روی device واقعی.
### معیار پذیرش
- deploy و rollback در staging عملاً تمرین شده باشند.
- خطای عمدی client با release و source map در monitoring دیده شود.
- smoke test پس از deploy خودکار و blocking باشد.
## ۸. ممیزی نهایی و Release gate
### کارها
1. تست Chrome، Firefox، Safari و مرورگر Android هدف.
2. تست موبایل واقعی روی شبکه کند و قطع/وصل شبکه.
3. load test flowهای auth، discovery، booking و payment callback.
4. ممیزی امنیتی و accessibility مستقل.
5. اجرای restore/rollback drill.
6. انتشار محدود beta و بررسی telemetry قبل از rollout کامل.
### معیار پذیرش
- هیچ issue با شدت Critical یا High باز نباشد.
- issueهای Medium پذیرفته‌شده owner و deadline داشته باشند.
- Product، Engineering و Operations چک‌لیست release را تأیید کنند.
## ترتیب تحویل
هر مرحله در یک تغییر قابل review تحویل می‌شود. گزارش هر مرحله شامل فایل‌های تغییرکرده، تصمیم‌های معماری، فرمان‌های راستی‌آزمایی، ریسک‌های باقی‌مانده و مرحله بعد خواهد بود.