3247 خطوط
46 KiB
Markdown
3247 خطوط
46 KiB
Markdown
# Master Prompt — MicroLearning Manager Experience Redesign
|
||
|
||
میخواهم بخش **Manager / مدیران** در پروژه MicroLearning را بهصورت کامل بازطراحی و اصلاح کنی.
|
||
|
||
این کار فقط یک تغییر ظاهری نیست.
|
||
|
||
هدف این است که Manager Experience از حالت «نسخه محدودشده Admin Panel» خارج شود و به یک فضای مستقل، ساده، actionable و مخصوص مدیریت یادگیری تیم تبدیل شود.
|
||
|
||
---
|
||
|
||
# هدف اصلی Manager Experience
|
||
|
||
پنل مدیر باید حول این سؤال طراحی شود:
|
||
|
||
> وضعیت یادگیری تیم من چگونه است و الان باید چه اقدامی انجام دهم؟
|
||
|
||
Manager نباید برای انجام کارهای روزمره مجبور باشد با ساختار Course Designer، Admin یا Super Admin کار کند.
|
||
|
||
---
|
||
|
||
# اصول اصلی
|
||
|
||
Manager Experience باید:
|
||
|
||
* Team-centric باشد.
|
||
* Action-oriented باشد.
|
||
* Data driven باشد.
|
||
* سادهتر از Admin Panel باشد.
|
||
* Role-aware باشد.
|
||
* Permission-aware باشد.
|
||
* فقط اطلاعات مجاز تیم را نمایش دهد.
|
||
* برای Desktop، Tablet و Mobile مناسب باشد.
|
||
* RTL و LTR را پشتیبانی کند.
|
||
* Dark Mode را خراب نکند.
|
||
* از Design System موجود استفاده کند.
|
||
|
||
---
|
||
|
||
# قانون Safety
|
||
|
||
## Working Code Is Sacred
|
||
|
||
اگر بخشی:
|
||
|
||
* درست کار میکند،
|
||
* تست دارد،
|
||
* Security Issue ندارد،
|
||
* و مانع Manager Experience نیست،
|
||
|
||
فقط برای زیبایی Architecture آن را تغییر نده.
|
||
|
||
---
|
||
|
||
# Minimum Necessary Change
|
||
|
||
فقط تغییراتی را انجام بده که مستقیماً برای Manager Experience ضروری هستند.
|
||
|
||
از Refactorهای unrelated خودداری کن.
|
||
|
||
---
|
||
|
||
# Scope Lock
|
||
|
||
در ابتدای هر Phase اعلام کن:
|
||
|
||
```text
|
||
Files expected to change
|
||
Modules affected
|
||
API endpoints affected
|
||
Permissions affected
|
||
Expected behavior changes
|
||
Behavior that must remain unchanged
|
||
```
|
||
|
||
اگر Issue جدیدی پیدا کردی که مربوط به فاز جاری نیست، در:
|
||
|
||
```text
|
||
Deferred Technical Debt
|
||
```
|
||
|
||
ثبت کن.
|
||
|
||
---
|
||
|
||
# Backend Safety
|
||
|
||
هیچ Permission یا Data Scope را فقط در Frontend پیادهسازی نکن.
|
||
|
||
اگر Manager نباید دادهای را ببیند:
|
||
|
||
**Backend نیز باید آن را محدود کند.**
|
||
|
||
Hide کردن Menu امنیت محسوب نمیشود.
|
||
|
||
---
|
||
|
||
# Manager Data Scope
|
||
|
||
قاعده پیشفرض:
|
||
|
||
```text
|
||
Manager
|
||
↓
|
||
Own permitted team
|
||
↓
|
||
Direct / authorized reports
|
||
```
|
||
|
||
نه:
|
||
|
||
```text
|
||
Manager
|
||
↓
|
||
Entire Organization
|
||
```
|
||
|
||
مگر اینکه Permission صریح وجود داشته باشد.
|
||
|
||
---
|
||
|
||
# PHASE 0 — Manager Role Audit & Permission Scope
|
||
|
||
## هدف
|
||
|
||
قبل از تغییر UI، نقش Manager را در کل پروژه بررسی کن.
|
||
|
||
در این Phase redesign انجام نده.
|
||
|
||
---
|
||
|
||
## 1. Manager Role Audit
|
||
|
||
تمام موارد مربوط به Manager را پیدا کن:
|
||
|
||
```text
|
||
roles
|
||
permissions
|
||
policies
|
||
middleware
|
||
API authorization
|
||
organization scope
|
||
team membership
|
||
reporting hierarchy
|
||
frontend route guards
|
||
navigation permissions
|
||
```
|
||
|
||
مشخص کن Manager در وضعیت فعلی چه چیزهایی میتواند:
|
||
|
||
```text
|
||
View
|
||
Create
|
||
Update
|
||
Delete
|
||
Assign
|
||
Approve
|
||
Export
|
||
```
|
||
|
||
کند.
|
||
|
||
---
|
||
|
||
## 2. Data Visibility Audit
|
||
|
||
بررسی کن Manager اکنون به چه اطلاعاتی دسترسی دارد.
|
||
|
||
بهخصوص:
|
||
|
||
```text
|
||
Users
|
||
Teams
|
||
Courses
|
||
Assignments
|
||
Assessments
|
||
Progress
|
||
Skills
|
||
Reports
|
||
Certificates
|
||
Monitoring
|
||
```
|
||
|
||
هر endpoint را بررسی کن.
|
||
|
||
Manager نباید بتواند با تغییر دستی URL یا API parameter داده خارج از Scope خود را ببیند.
|
||
|
||
IDOR را بررسی کن.
|
||
|
||
---
|
||
|
||
## 3. Define Manager Permission Matrix
|
||
|
||
یک Matrix ایجاد کن.
|
||
|
||
مثال:
|
||
|
||
| Capability | Manager |
|
||
| --------------------------- | ---------------- |
|
||
| View own team | Yes |
|
||
| View organization users | No |
|
||
| View team learning progress | Yes |
|
||
| Assign approved course | Yes |
|
||
| Create course | No by default |
|
||
| Edit course | No |
|
||
| Use Builder | No |
|
||
| Use AI Studio | No |
|
||
| View team skills | Yes |
|
||
| Export team report | Permission based |
|
||
| Extend assignment deadline | Permission based |
|
||
| Approve learning request | Permission based |
|
||
|
||
Matrix نهایی را براساس قابلیتهای واقعی پروژه تنظیم کن.
|
||
|
||
---
|
||
|
||
## 4. Role Separation
|
||
|
||
این چهار Experience را از هم تفکیک کن:
|
||
|
||
```text
|
||
Super Admin
|
||
Course Designer
|
||
Manager
|
||
Learner
|
||
```
|
||
|
||
Manager نباید Sidebar مربوط به Course Designer را با چند گزینه hidden دریافت کند.
|
||
|
||
Manager Experience باید Navigation خودش را داشته باشد.
|
||
|
||
---
|
||
|
||
## 5. Backend Authorization Tests
|
||
|
||
Test بنویس برای اینکه Manager:
|
||
|
||
### بتواند:
|
||
|
||
```text
|
||
Own team data
|
||
Own team assignments
|
||
Own team progress
|
||
Authorized reports
|
||
```
|
||
|
||
### نتواند:
|
||
|
||
```text
|
||
Other team's private data
|
||
Organization-wide user data
|
||
Unauthorized course editing
|
||
Unauthorized Builder access
|
||
Unauthorized admin settings
|
||
```
|
||
|
||
---
|
||
|
||
## Acceptance Criteria Phase 0
|
||
|
||
* Manager role دقیقاً تعریف شده.
|
||
* Permission Matrix وجود دارد.
|
||
* Team Scope مشخص است.
|
||
* Data Leakage بررسی شده.
|
||
* Backend authorization تست دارد.
|
||
* Feature unrelated تغییر نکرده.
|
||
* UI redesign هنوز شروع نشده.
|
||
|
||
بعد متوقف شو.
|
||
|
||
---
|
||
|
||
# PHASE 1 — Manager Shell, Navigation & Dashboard
|
||
|
||
## هدف
|
||
|
||
Manager یک Experience مستقل و ساده داشته باشد.
|
||
|
||
---
|
||
|
||
# Manager Navigation
|
||
|
||
Navigation پیشنهادی:
|
||
|
||
```text
|
||
داشبورد
|
||
|
||
تیم من
|
||
|
||
یادگیری تیم
|
||
|
||
تخصیص آموزش
|
||
|
||
مهارتها
|
||
|
||
گزارشها
|
||
|
||
تأییدها
|
||
```
|
||
|
||
پایین Navigation:
|
||
|
||
```text
|
||
اعلانها
|
||
تنظیمات شخصی
|
||
```
|
||
|
||
فقط آیتمهایی را نمایش بده که Manager واقعاً Permission آنها را دارد.
|
||
|
||
---
|
||
|
||
# Remove Manager Irrelevant Navigation
|
||
|
||
موارد زیر بهصورت پیشفرض نباید در پنل Manager نمایش داده شوند:
|
||
|
||
```text
|
||
Course Builder
|
||
AI Studio
|
||
Question Bank
|
||
Template Management
|
||
Library Administration
|
||
Subscription
|
||
Organization Settings
|
||
System Settings
|
||
```
|
||
|
||
مگر Manager Permission صریح دیگری داشته باشد.
|
||
|
||
---
|
||
|
||
# Manager App Shell
|
||
|
||
Shell مدیر شامل:
|
||
|
||
```text
|
||
Sidebar
|
||
Top Header
|
||
Context
|
||
Main Content
|
||
```
|
||
|
||
باشد.
|
||
|
||
در Header:
|
||
|
||
```text
|
||
Search if useful
|
||
Notifications
|
||
User menu
|
||
Team context if applicable
|
||
```
|
||
|
||
وجود داشته باشد.
|
||
|
||
---
|
||
|
||
# Manager Dashboard
|
||
|
||
Dashboard مدیر را از Dashboard عمومی جدا کن.
|
||
|
||
Layout پیشنهادی:
|
||
|
||
```text
|
||
Greeting
|
||
↓
|
||
Team Health
|
||
↓
|
||
Needs Attention
|
||
↓
|
||
Team Learning Progress
|
||
↓
|
||
Upcoming Deadlines
|
||
↓
|
||
Skills Snapshot
|
||
↓
|
||
Recent Activity
|
||
```
|
||
|
||
---
|
||
|
||
# KPI Cards
|
||
|
||
KPIها compact باشند.
|
||
|
||
پیشنهاد:
|
||
|
||
```text
|
||
Team members
|
||
|
||
Active learners
|
||
|
||
Completion rate
|
||
|
||
Behind schedule
|
||
|
||
Due soon
|
||
```
|
||
|
||
اعداد باید از داده واقعی backend بیایند.
|
||
|
||
Metric جعلی یا static ایجاد نکن.
|
||
|
||
---
|
||
|
||
# Needs Attention
|
||
|
||
مهمترین بخش Dashboard باشد.
|
||
|
||
نمونه:
|
||
|
||
```text
|
||
4 learners are behind schedule
|
||
|
||
3 mandatory courses have not been started
|
||
|
||
2 assignments are due this week
|
||
|
||
3 employees haven't been active for 7 days
|
||
```
|
||
|
||
هر Item باید مستقیم Action داشته باشد.
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
View learners
|
||
|
||
Send reminder
|
||
|
||
Extend deadline
|
||
|
||
View course
|
||
```
|
||
|
||
---
|
||
|
||
# Continue Management Tasks
|
||
|
||
وظایف نیمهتمام Manager را نمایش بده:
|
||
|
||
```text
|
||
Pending approvals
|
||
|
||
Recently assigned learning
|
||
|
||
Saved reports
|
||
|
||
Pending team actions
|
||
```
|
||
|
||
در صورت وجود داده واقعی.
|
||
|
||
---
|
||
|
||
# Recent Activity
|
||
|
||
Activity Feed ساده باشد:
|
||
|
||
```text
|
||
Ali completed Leadership Basics
|
||
|
||
Sara started Workplace Safety
|
||
|
||
5 users were assigned Communication Skills
|
||
|
||
Certificate issued to Reza
|
||
```
|
||
|
||
---
|
||
|
||
# Dashboard Empty State
|
||
|
||
اگر Manager تیم ندارد یا دادهای موجود نیست، Dashboard نباید شکسته یا خالی باشد.
|
||
|
||
State مناسب طراحی کن.
|
||
|
||
---
|
||
|
||
## Acceptance Criteria Phase 1
|
||
|
||
* Manager Navigation مستقل است.
|
||
* Admin navigation reuse کورکورانه نشده.
|
||
* Dashboard کاملاً team-centric است.
|
||
* Needs Attention وجود دارد.
|
||
* KPIها compact و واقعیاند.
|
||
* Actions مستقیماند.
|
||
* Permission-aware UI وجود دارد.
|
||
* responsive صحیح است.
|
||
|
||
بعد متوقف شو.
|
||
|
||
---
|
||
|
||
# PHASE 2 — My Team & Employee Learning Profiles
|
||
|
||
## هدف
|
||
|
||
Manager بتواند وضعیت اعضای تیم را سریع بفهمد.
|
||
|
||
---
|
||
|
||
# My Team Page
|
||
|
||
صفحه:
|
||
|
||
```text
|
||
تیم من
|
||
```
|
||
|
||
ایجاد یا بازطراحی کن.
|
||
|
||
Toolbar:
|
||
|
||
```text
|
||
Search
|
||
Status Filter
|
||
Team/Subteam Filter if permitted
|
||
Learning Status
|
||
Skills Filter if applicable
|
||
```
|
||
|
||
---
|
||
|
||
# Team Table
|
||
|
||
اطلاعات پیشنهادی:
|
||
|
||
```text
|
||
Employee
|
||
|
||
Role / Position
|
||
|
||
Active courses
|
||
|
||
Completion %
|
||
|
||
Due soon
|
||
|
||
Overdue
|
||
|
||
Last activity
|
||
|
||
Status
|
||
```
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
Ali Rezaei
|
||
3 active
|
||
82%
|
||
0 overdue
|
||
Active today
|
||
Good
|
||
```
|
||
|
||
---
|
||
|
||
# Team Status
|
||
|
||
از semantic state استفاده کن:
|
||
|
||
```text
|
||
On Track
|
||
|
||
Needs Attention
|
||
|
||
Behind
|
||
|
||
Inactive
|
||
```
|
||
|
||
رنگ تنها indicator نباشد.
|
||
|
||
Text یا icon هم وجود داشته باشد.
|
||
|
||
---
|
||
|
||
# Employee Learning Profile
|
||
|
||
روی Employee کلیک شود و پروفایل یادگیری باز شود.
|
||
|
||
حداقل:
|
||
|
||
```text
|
||
Overview
|
||
|
||
Active Learning
|
||
|
||
Completed Learning
|
||
|
||
Assessments
|
||
|
||
Skills
|
||
|
||
Learning Paths
|
||
|
||
Certificates
|
||
|
||
Recent Activity
|
||
```
|
||
|
||
اما فقط اطلاعاتی که Manager اجازه دیدن آن را دارد.
|
||
|
||
---
|
||
|
||
# Employee Overview
|
||
|
||
پیشنهاد:
|
||
|
||
```text
|
||
Name
|
||
Position
|
||
Team
|
||
|
||
Current progress
|
||
Active courses
|
||
Completed courses
|
||
Due assignments
|
||
Skill development
|
||
```
|
||
|
||
---
|
||
|
||
# Learning Timeline
|
||
|
||
در صورت وجود داده:
|
||
|
||
```text
|
||
Assigned
|
||
Started
|
||
Progressed
|
||
Completed
|
||
Assessment
|
||
Certificate
|
||
```
|
||
|
||
Timeline ساده ایجاد کن.
|
||
|
||
---
|
||
|
||
# Manager Quick Actions
|
||
|
||
از Employee Profile:
|
||
|
||
```text
|
||
Assign Learning
|
||
|
||
Send Reminder
|
||
|
||
View Progress
|
||
|
||
View Skills
|
||
```
|
||
|
||
و در صورت Permission:
|
||
|
||
```text
|
||
Extend Deadline
|
||
```
|
||
|
||
---
|
||
|
||
# Privacy
|
||
|
||
اطلاعات unrelated منابع انسانی را نمایش نده.
|
||
|
||
Manager Learning Profile نباید به HR Master Profile تبدیل شود.
|
||
|
||
---
|
||
|
||
## Acceptance Criteria Phase 2
|
||
|
||
* My Team قابل استفاده است.
|
||
* Search و Filter مناسب دارد.
|
||
* Employee Learning Profile ایجاد شده.
|
||
* مدیر فقط Scope خودش را میبیند.
|
||
* Quick Actions وجود دارد.
|
||
* mobile table مناسب است.
|
||
* N+1 query یا request explosion ایجاد نشده.
|
||
|
||
بعد متوقف شو.
|
||
|
||
---
|
||
|
||
# PHASE 3 — Learning Assignment, Deadlines & Notifications
|
||
|
||
## هدف
|
||
|
||
تخصیص آموزش برای Manager بسیار ساده شود.
|
||
|
||
---
|
||
|
||
# Assignment Flow
|
||
|
||
Manager نباید وارد workflow پیچیده Admin شود.
|
||
|
||
Flow پیشنهادی:
|
||
|
||
```text
|
||
Who?
|
||
↓
|
||
What learning?
|
||
↓
|
||
Deadline
|
||
↓
|
||
Notification
|
||
↓
|
||
Review
|
||
↓
|
||
Assign
|
||
```
|
||
|
||
---
|
||
|
||
# STEP 1 — Audience
|
||
|
||
Manager بتواند انتخاب کند:
|
||
|
||
```text
|
||
Whole Team
|
||
|
||
Specific employees
|
||
|
||
Sub-team
|
||
```
|
||
|
||
فقط در Scope مجاز.
|
||
|
||
---
|
||
|
||
# STEP 2 — Learning
|
||
|
||
Manager فقط محتوایی را ببیند که برای assignment مجاز است.
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
Published Courses
|
||
|
||
Learning Paths
|
||
|
||
Mandatory Learning
|
||
```
|
||
|
||
Draft یا private course در صورت عدم Permission نمایش داده نشود.
|
||
|
||
---
|
||
|
||
# STEP 3 — Deadline
|
||
|
||
انتخاب:
|
||
|
||
```text
|
||
No deadline
|
||
|
||
Specific date
|
||
|
||
Relative deadline
|
||
```
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
Complete within 14 days
|
||
```
|
||
|
||
اگر backend support میکند.
|
||
|
||
---
|
||
|
||
# STEP 4 — Notification
|
||
|
||
گزینههای مناسب:
|
||
|
||
```text
|
||
Notify learner now
|
||
|
||
Reminder before deadline
|
||
|
||
Reminder on deadline
|
||
|
||
Reminder if not started
|
||
```
|
||
|
||
---
|
||
|
||
# Push Notification Readiness
|
||
|
||
Architecture را طوری طراحی کن که Notification Service بعداً بتواند به:
|
||
|
||
```text
|
||
Web
|
||
PWA
|
||
Android APK
|
||
FCM
|
||
```
|
||
|
||
وصل شود.
|
||
|
||
ولی اگر FCM هنوز پیادهسازی نشده، mock یا fake production integration ایجاد نکن.
|
||
|
||
Integration point تمیز ایجاد کن.
|
||
|
||
---
|
||
|
||
# Notification Preferences
|
||
|
||
به تنظیمات notification کاربر احترام بگذار.
|
||
|
||
Notificationهای mandatory و optional را تفکیک کن.
|
||
|
||
---
|
||
|
||
# Assignment Confirmation
|
||
|
||
قبل از Assign خلاصه واضح بده:
|
||
|
||
```text
|
||
Course:
|
||
Workplace Safety
|
||
|
||
Audience:
|
||
12 employees
|
||
|
||
Deadline:
|
||
September 10
|
||
|
||
Notifications:
|
||
Immediate + 3 days before deadline
|
||
```
|
||
|
||
---
|
||
|
||
# Success State
|
||
|
||
بعد از Assignment:
|
||
|
||
```text
|
||
Learning assigned successfully
|
||
|
||
12 learners assigned
|
||
12 notifications scheduled
|
||
```
|
||
|
||
اگر بخشی fail شده، partial failure را واضح گزارش کن.
|
||
|
||
---
|
||
|
||
# Deadline Management
|
||
|
||
Manager در صورت Permission بتواند:
|
||
|
||
```text
|
||
Extend deadline
|
||
|
||
Remove deadline
|
||
```
|
||
|
||
کند.
|
||
|
||
Bulk extension نیز در صورت نیاز واقعی.
|
||
|
||
---
|
||
|
||
# Reminder Action
|
||
|
||
در Team / Assignment view:
|
||
|
||
```text
|
||
Send reminder
|
||
```
|
||
|
||
وجود داشته باشد.
|
||
|
||
از duplicate notification جلوگیری کن.
|
||
|
||
---
|
||
|
||
## Acceptance Criteria Phase 3
|
||
|
||
* Assignment workflow ساده است.
|
||
* Scope رعایت میشود.
|
||
* Deadline management صحیح است.
|
||
* Notification architecture آماده است.
|
||
* Error و partial failure مدیریت میشود.
|
||
* duplicate assignments کنترل شده.
|
||
* tests وجود دارند.
|
||
|
||
بعد متوقف شو.
|
||
|
||
---
|
||
|
||
# PHASE 4 — Skills, Insights, Reports & Approvals
|
||
|
||
## هدف
|
||
|
||
Manager فقط Progress نبیند؛ بتواند تصمیم مدیریتی بگیرد.
|
||
|
||
---
|
||
|
||
# Skills Dashboard
|
||
|
||
صفحه Skills برای Manager team-specific باشد.
|
||
|
||
نمایش:
|
||
|
||
```text
|
||
Team skill level
|
||
|
||
Skill gaps
|
||
|
||
Improving skills
|
||
|
||
Critical gaps
|
||
```
|
||
|
||
---
|
||
|
||
# Skill Visualization
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
Communication 82%
|
||
|
||
Leadership 68%
|
||
|
||
Excel 54%
|
||
|
||
Safety 91%
|
||
```
|
||
|
||
عددها فقط اگر مدل داده واقعاً آنها را پشتیبانی میکند.
|
||
|
||
---
|
||
|
||
# Skill Gap
|
||
|
||
Manager بتواند ببیند:
|
||
|
||
```text
|
||
Skill
|
||
|
||
Required level
|
||
|
||
Current level
|
||
|
||
Gap
|
||
|
||
Affected employees
|
||
```
|
||
|
||
---
|
||
|
||
# Learning Recommendation
|
||
|
||
اگر سیستم recommendation واقعی دارد:
|
||
|
||
```text
|
||
Suggested learning
|
||
```
|
||
|
||
نمایش بده.
|
||
|
||
اگر ندارد، recommendation جعلی نساز.
|
||
|
||
در صورت امکان rule-based recommendation را جداگانه پیادهسازی کن.
|
||
|
||
---
|
||
|
||
# Manager Insights
|
||
|
||
یک بخش:
|
||
|
||
```text
|
||
بینشهای این هفته
|
||
```
|
||
|
||
ایجاد کن.
|
||
|
||
Insights باید از داده واقعی derive شوند.
|
||
|
||
مثال:
|
||
|
||
```text
|
||
Completion rate increased 8%
|
||
|
||
3 learners inactive for more than 7 days
|
||
|
||
Workplace Safety has the lowest completion rate
|
||
|
||
Communication is the largest team skill gap
|
||
```
|
||
|
||
---
|
||
|
||
# No Fake AI
|
||
|
||
Insightهای ساده را به اسم AI نمایش نده.
|
||
|
||
اگر AI واقعاً تحلیل میکند، مشخص باشد.
|
||
|
||
اگر rule-based است، بهعنوان Insight نمایش داده شود.
|
||
|
||
---
|
||
|
||
# Reports
|
||
|
||
Manager Reportها باید team-scoped باشند.
|
||
|
||
پیشنهاد:
|
||
|
||
```text
|
||
Team Learning Overview
|
||
|
||
Course Completion
|
||
|
||
Assignment Status
|
||
|
||
Assessment Performance
|
||
|
||
Skills Gap
|
||
|
||
Engagement
|
||
```
|
||
|
||
---
|
||
|
||
# Filters
|
||
|
||
گزارشها حداقل:
|
||
|
||
```text
|
||
Date
|
||
|
||
Course
|
||
|
||
Learning Path
|
||
|
||
Employee
|
||
|
||
Team/Subteam
|
||
|
||
Status
|
||
```
|
||
|
||
در حد Permission مدیر.
|
||
|
||
---
|
||
|
||
# Export
|
||
|
||
اگر سیستم export دارد:
|
||
|
||
```text
|
||
Excel
|
||
CSV
|
||
PDF
|
||
```
|
||
|
||
Manager فقط داده Scope خودش را export کند.
|
||
|
||
---
|
||
|
||
# Approvals
|
||
|
||
اگر Approval Workflow وجود دارد، صفحه:
|
||
|
||
```text
|
||
تأییدها
|
||
```
|
||
|
||
فقط کارهای مربوط به Manager را نشان دهد.
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
Learning request
|
||
|
||
Deadline extension
|
||
|
||
Course enrollment
|
||
|
||
Certificate approval
|
||
```
|
||
|
||
بسته به قابلیت واقعی محصول.
|
||
|
||
---
|
||
|
||
# Approval UX
|
||
|
||
هر Approval:
|
||
|
||
```text
|
||
Requester
|
||
|
||
Request
|
||
|
||
Reason
|
||
|
||
Date
|
||
|
||
Relevant context
|
||
|
||
Approve
|
||
|
||
Reject
|
||
```
|
||
|
||
Reject باید در صورت نیاز Reason داشته باشد.
|
||
|
||
---
|
||
|
||
## Acceptance Criteria Phase 4
|
||
|
||
* Skills team-scoped هستند.
|
||
* Skill gaps واضحاند.
|
||
* Insights actionable هستند.
|
||
* Reportها team-scoped هستند.
|
||
* Export امن است.
|
||
* Approvals واضح و permission-aware هستند.
|
||
* fake metric یا fake AI وجود ندارد.
|
||
|
||
بعد متوقف شو.
|
||
|
||
---
|
||
|
||
# PHASE 5 — Responsive, Security, QA & Final Manager Polish
|
||
|
||
## هدف
|
||
|
||
Manager Experience را برای Release آماده کن.
|
||
|
||
---
|
||
|
||
# Responsive QA
|
||
|
||
حداقل viewportهای زیر:
|
||
|
||
```text
|
||
375
|
||
|
||
430
|
||
|
||
768
|
||
|
||
1024
|
||
|
||
1280
|
||
|
||
1440
|
||
```
|
||
|
||
را بررسی کن.
|
||
|
||
---
|
||
|
||
# Mobile Manager Experience
|
||
|
||
Mobile نباید نسخه shrink شده Desktop باشد.
|
||
|
||
Navigation:
|
||
|
||
```text
|
||
Drawer
|
||
```
|
||
|
||
یا navigation مناسب role.
|
||
|
||
Dashboard روی موبایل:
|
||
|
||
```text
|
||
Needs Attention
|
||
↓
|
||
Quick Actions
|
||
↓
|
||
KPIs
|
||
↓
|
||
Team
|
||
↓
|
||
Deadlines
|
||
```
|
||
|
||
اولویت اطلاعات را تغییر بده.
|
||
|
||
---
|
||
|
||
# Tables
|
||
|
||
در Mobile صرفاً horizontal scroll ایجاد نکن.
|
||
|
||
از:
|
||
|
||
```text
|
||
Column priority
|
||
|
||
Card representation
|
||
|
||
Expandable row
|
||
```
|
||
|
||
استفاده کن.
|
||
|
||
---
|
||
|
||
# Quick Actions on Mobile
|
||
|
||
Manager باید بتواند از گوشی:
|
||
|
||
```text
|
||
View team
|
||
|
||
Send reminder
|
||
|
||
Assign course
|
||
|
||
Review approval
|
||
|
||
Check progress
|
||
```
|
||
|
||
را انجام دهد.
|
||
|
||
---
|
||
|
||
# Accessibility
|
||
|
||
بررسی کن:
|
||
|
||
```text
|
||
Keyboard
|
||
|
||
Focus
|
||
|
||
ARIA
|
||
|
||
Labels
|
||
|
||
Dialogs
|
||
|
||
Drawers
|
||
|
||
Tables
|
||
|
||
Forms
|
||
|
||
Color contrast
|
||
|
||
RTL
|
||
|
||
Screen reader semantics
|
||
```
|
||
|
||
---
|
||
|
||
# Security Recheck
|
||
|
||
دوباره بررسی کن:
|
||
|
||
```text
|
||
IDOR
|
||
|
||
Role escalation
|
||
|
||
Team scope bypass
|
||
|
||
URL manipulation
|
||
|
||
API parameter manipulation
|
||
|
||
Export leakage
|
||
```
|
||
|
||
Frontend hiding را Security Control محسوب نکن.
|
||
|
||
---
|
||
|
||
# Performance
|
||
|
||
Manager Dashboard ممکن است چند Widget داشته باشد.
|
||
|
||
بررسی کن:
|
||
|
||
```text
|
||
duplicate API requests
|
||
|
||
N+1 backend queries
|
||
|
||
large payloads
|
||
|
||
unnecessary polling
|
||
|
||
over-fetching
|
||
|
||
unnecessary renders
|
||
```
|
||
|
||
برای Dashboard در صورت نیاز endpoint تجمیعی بهینه طراحی کن، اما فقط اگر bottleneck واقعی وجود دارد.
|
||
|
||
---
|
||
|
||
# Loading States
|
||
|
||
از Skeleton استفاده کن.
|
||
|
||
هر Widget باید:
|
||
|
||
```text
|
||
Loading
|
||
|
||
Empty
|
||
|
||
Error
|
||
|
||
Success
|
||
```
|
||
|
||
داشته باشد.
|
||
|
||
خرابی یک Widget نباید کل Dashboard را از کار بیندازد مگر dependency واقعی وجود داشته باشد.
|
||
|
||
---
|
||
|
||
# RTL / LTR
|
||
|
||
فارسی:
|
||
|
||
```text
|
||
RTL
|
||
```
|
||
|
||
انگلیسی:
|
||
|
||
```text
|
||
LTR
|
||
```
|
||
|
||
Table alignment، icons، arrows و breadcrumbs را بررسی کن.
|
||
|
||
---
|
||
|
||
# Dark Mode
|
||
|
||
تمام Manager pages را بررسی کن.
|
||
|
||
بهخصوص:
|
||
|
||
```text
|
||
Charts
|
||
|
||
Tables
|
||
|
||
Status badges
|
||
|
||
Empty states
|
||
|
||
Filters
|
||
|
||
Dialogs
|
||
```
|
||
|
||
---
|
||
|
||
# Final Test Flow
|
||
|
||
حداقل این Scenarioها را اجرا کن.
|
||
|
||
## Scenario 1
|
||
|
||
```text
|
||
Manager Login
|
||
→
|
||
Dashboard
|
||
→
|
||
View Needs Attention
|
||
→
|
||
Employee
|
||
→
|
||
Send Reminder
|
||
```
|
||
|
||
## Scenario 2
|
||
|
||
```text
|
||
Manager
|
||
→
|
||
My Team
|
||
→
|
||
Employee
|
||
→
|
||
Learning Profile
|
||
```
|
||
|
||
## Scenario 3
|
||
|
||
```text
|
||
Manager
|
||
→
|
||
Assign Learning
|
||
→
|
||
Whole Team
|
||
→
|
||
Set Deadline
|
||
→
|
||
Notify
|
||
→
|
||
Confirm
|
||
```
|
||
|
||
## Scenario 4
|
||
|
||
```text
|
||
Manager
|
||
→
|
||
Skills
|
||
→
|
||
Skill Gap
|
||
→
|
||
Affected Employees
|
||
```
|
||
|
||
## Scenario 5
|
||
|
||
```text
|
||
Manager
|
||
→
|
||
Reports
|
||
→
|
||
Filter
|
||
→
|
||
Export
|
||
```
|
||
|
||
## Scenario 6
|
||
|
||
```text
|
||
Manager
|
||
→
|
||
Approvals
|
||
→
|
||
Review
|
||
→
|
||
Approve / Reject
|
||
```
|
||
|
||
---
|
||
|
||
# Unauthorized Tests
|
||
|
||
تست کن Manager نتواند:
|
||
|
||
```text
|
||
open other team's employee
|
||
|
||
read other team's progress
|
||
|
||
assign learning to unauthorized user
|
||
|
||
access admin settings
|
||
|
||
access Builder
|
||
|
||
access AI Studio unless explicitly permitted
|
||
|
||
export organization-wide data
|
||
```
|
||
|
||
---
|
||
|
||
# Final Quality Gate
|
||
|
||
Frontend:
|
||
|
||
```bash
|
||
npm run lint
|
||
npm run typecheck
|
||
npm test
|
||
npm run build
|
||
```
|
||
|
||
Backend:
|
||
|
||
```bash
|
||
php artisan test
|
||
```
|
||
|
||
و تستهای authorization مربوط به Manager را حتماً اجرا کن.
|
||
|
||
---
|
||
|
||
# Final Report
|
||
|
||
در انتهای Phase 5 گزارش بده.
|
||
|
||
## Manager Architecture
|
||
|
||
چه چیزهایی تغییر کرده؟
|
||
|
||
## Permissions
|
||
|
||
چه محدودیتهایی اضافه یا اصلاح شده؟
|
||
|
||
## Dashboard
|
||
|
||
چه تغییراتی انجام شده؟
|
||
|
||
## My Team
|
||
|
||
چه تغییراتی انجام شده؟
|
||
|
||
## Assignments
|
||
|
||
چه تغییراتی انجام شده؟
|
||
|
||
## Notifications
|
||
|
||
چه چیزی آماده یا پیادهسازی شده؟
|
||
|
||
## Skills
|
||
|
||
چه تغییراتی انجام شده؟
|
||
|
||
## Reports
|
||
|
||
چه تغییراتی انجام شده؟
|
||
|
||
## Approvals
|
||
|
||
چه تغییراتی انجام شده؟
|
||
|
||
## Responsive
|
||
|
||
چه تغییراتی انجام شده؟
|
||
|
||
## Security
|
||
|
||
چه مواردی بررسی یا اصلاح شده؟
|
||
|
||
---
|
||
|
||
# Test Results
|
||
|
||
Backend:
|
||
|
||
```text
|
||
Tests:
|
||
Assertions:
|
||
Failures:
|
||
```
|
||
|
||
Frontend:
|
||
|
||
```text
|
||
Test Files:
|
||
Tests:
|
||
Lint:
|
||
Typecheck:
|
||
Build:
|
||
```
|
||
|
||
---
|
||
|
||
# Remaining Manager Technical Debt
|
||
|
||
فقط مشکلات واقعی باقیمانده را ثبت کن.
|
||
|
||
Severity:
|
||
|
||
```text
|
||
High
|
||
|
||
Medium
|
||
|
||
Low
|
||
```
|
||
|
||
---
|
||
|
||
# Manager Experience Score
|
||
|
||
به موارد زیر از 10 امتیاز بده:
|
||
|
||
```text
|
||
Navigation
|
||
|
||
Dashboard
|
||
|
||
Team Management
|
||
|
||
Learning Assignment
|
||
|
||
Notifications
|
||
|
||
Skills
|
||
|
||
Reports
|
||
|
||
Approvals
|
||
|
||
Mobile UX
|
||
|
||
Accessibility
|
||
|
||
Security
|
||
|
||
Performance
|
||
```
|
||
|
||
و در نهایت:
|
||
|
||
```text
|
||
Manager Experience Score: XX/100
|
||
```
|
||
|
||
---
|
||
|
||
# اجرای دقیق فازها
|
||
|
||
```text
|
||
PHASE 0
|
||
Role & Permission Audit
|
||
↓
|
||
PHASE 1
|
||
Manager Shell & Dashboard
|
||
↓
|
||
PHASE 2
|
||
My Team & Learning Profiles
|
||
↓
|
||
PHASE 3
|
||
Assignments, Deadlines & Notifications
|
||
↓
|
||
PHASE 4
|
||
Skills, Insights, Reports & Approvals
|
||
↓
|
||
PHASE 5
|
||
Responsive, Security & Final QA
|
||
```
|
||
|
||
## قانون آخر
|
||
|
||
هر Phase را کامل کن.
|
||
|
||
Test کن.
|
||
|
||
`git diff` را بررسی کن.
|
||
|
||
فایلهای تغییرکرده را گزارش بده.
|
||
|
||
Regressionها را رفع کن.
|
||
|
||
سپس متوقف شو.
|
||
|
||
**بدون دستور صریح من وارد Phase بعد نشو.**
|
||
|
||
# SUPPLEMENTARY PROMPT
|
||
|
||
## MicroLearning — Learner Android APK + Native Push Notifications + Manager PWA Notifications
|
||
|
||
این Prompt مکمل Promptهای قبلی **Learner** و **Manager** است.
|
||
|
||
قوانین Safety، Scope Lock، Minimum Necessary Change، Regression Testing و Working Code Is Sacred که در Promptهای اصلی تعریف شدهاند، همچنان لازمالاجرا هستند.
|
||
|
||
هیچ بخش سالمی صرفاً برای اجرای این قابلیتها بازنویسی نشود.
|
||
|
||
---
|
||
|
||
# PART A — LEARNER PROMPT EXTENSION
|
||
|
||
Prompt فعلی Learner دارای Phase 0 تا Phase 5 است.
|
||
|
||
دو Phase جدید زیر را بعد از Phase 5 اضافه کن:
|
||
|
||
```text
|
||
PHASE 6
|
||
Android APK with Capacitor
|
||
|
||
PHASE 7
|
||
Native Push Notifications with Firebase Cloud Messaging
|
||
```
|
||
|
||
ترتیب نهایی Learner:
|
||
|
||
```text
|
||
PHASE 0
|
||
Critical Stabilization
|
||
↓
|
||
PHASE 1
|
||
Learning Paths + Resume
|
||
↓
|
||
PHASE 2
|
||
Course Player + Assessments
|
||
↓
|
||
PHASE 3
|
||
Offline + PWA
|
||
↓
|
||
PHASE 4
|
||
Progress + Certificates + Notifications
|
||
↓
|
||
PHASE 5
|
||
APK Readiness + QA
|
||
↓
|
||
PHASE 6
|
||
Android APK with Capacitor
|
||
↓
|
||
PHASE 7
|
||
FCM Native Push Notifications
|
||
```
|
||
|
||
---
|
||
|
||
# PHASE 6 — Android Learner APK with Capacitor
|
||
|
||
## هدف
|
||
|
||
Learner PWA فعلی را بدون ایجاد Frontend جدید به Android Application واقعی تبدیل کن.
|
||
|
||
قانون معماری:
|
||
|
||
```text
|
||
ONE LEARNER SOURCE CODE
|
||
|
||
React Learner
|
||
│
|
||
├── Web
|
||
├── PWA
|
||
└── Capacitor Android
|
||
```
|
||
|
||
به هیچ عنوان یک React App، Flutter App یا Android UI مستقل برای Learner نساز.
|
||
|
||
---
|
||
|
||
## 1. Capacitor Integration
|
||
|
||
نسخههای dependencyهای فعلی را بررسی کن و نسخه سازگار Capacitor را انتخاب کن.
|
||
|
||
Dependency upgrade unrelated انجام نده.
|
||
|
||
Android Platform را به پروژه اضافه کن.
|
||
|
||
ساختار باید بهصورت استاندارد باشد:
|
||
|
||
```text
|
||
frontend/
|
||
src/
|
||
dist/
|
||
capacitor.config.*
|
||
android/
|
||
```
|
||
|
||
از build output فعلی Vite استفاده کن.
|
||
|
||
---
|
||
|
||
## 2. Learner-Only Android Experience
|
||
|
||
APK باید تجربه Learner را ارائه کند.
|
||
|
||
نباید بهصورت پیشفرض navigation مربوط به:
|
||
|
||
```text
|
||
Super Admin
|
||
Course Designer
|
||
Course Builder
|
||
AI Studio
|
||
Platform Administration
|
||
```
|
||
|
||
نمایش دهد.
|
||
|
||
اگر همان User چند Role دارد، رفتار را از architecture واقعی Role Switching پروژه استخراج کن.
|
||
|
||
امنیت را فقط با مخفی کردن menu پیادهسازی نکن.
|
||
|
||
Backend authorization همچنان Source of Truth است.
|
||
|
||
---
|
||
|
||
## 3. API Configuration
|
||
|
||
هیچ URL مانند:
|
||
|
||
```text
|
||
localhost
|
||
127.0.0.1
|
||
```
|
||
|
||
در Production APK hard-code نشود.
|
||
|
||
Environmentهای واقعی را پشتیبانی کن:
|
||
|
||
```text
|
||
Development
|
||
Staging
|
||
Production
|
||
On-Premise
|
||
```
|
||
|
||
Configuration باید از روش استاندارد پروژه گرفته شود.
|
||
|
||
---
|
||
|
||
## 4. On-Premise Support
|
||
|
||
MicroLearning ممکن است روی Server داخلی سازمان نصب شود.
|
||
|
||
Android App باید بتواند به Endpoint سازمان متصل شود.
|
||
|
||
Architecture را طوری طراحی کن که Server/Base URL قابل configuration امن باشد اگر Business Model پروژه نیاز دارد.
|
||
|
||
Validation انجام بده:
|
||
|
||
```text
|
||
HTTPS preferred
|
||
Valid hostname
|
||
No malformed URL
|
||
Connection test
|
||
```
|
||
|
||
در Production اتصال insecure را بدون تصمیم صریح Business/Security مجاز نکن.
|
||
|
||
---
|
||
|
||
## 5. Authentication
|
||
|
||
Authentication فعلی را برای Capacitor بررسی کن.
|
||
|
||
Token/Session نباید در storage ناامن نگهداری شود.
|
||
|
||
بررسی کن:
|
||
|
||
```text
|
||
Login
|
||
Logout
|
||
Session expiry
|
||
Token refresh if applicable
|
||
401 handling
|
||
Multiple accounts
|
||
Organization context
|
||
```
|
||
|
||
بعد از Logout داده Authentication و داده خصوصی local پاک یا isolate شود.
|
||
|
||
---
|
||
|
||
## 6. Native Back Button
|
||
|
||
Android Back Button باید رفتار طبیعی داشته باشد.
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
Course Player
|
||
→ Previous App Screen
|
||
|
||
Drawer Open
|
||
→ Close Drawer
|
||
|
||
Modal Open
|
||
→ Close Modal
|
||
```
|
||
|
||
نباید با اولین Back کل App بسته شود.
|
||
|
||
در Root Screen در صورت لزوم رفتار native مناسب داشته باش.
|
||
|
||
---
|
||
|
||
## 7. Deep Linking Foundation
|
||
|
||
زیرساخت Deep Link ایجاد کن.
|
||
|
||
هدف:
|
||
|
||
```text
|
||
microlearning://learning/{assignmentId}
|
||
```
|
||
|
||
و ترجیحاً:
|
||
|
||
```text
|
||
microlearning://learning/{assignmentId}/lesson/{lessonId}
|
||
```
|
||
|
||
در صورت استفاده از App Links:
|
||
|
||
```text
|
||
https://learn.example.com/app/...
|
||
```
|
||
|
||
نیز architecture آماده باشد.
|
||
|
||
Deep Link باید بعد از Authentication به destination صحیح منتقل شود.
|
||
|
||
---
|
||
|
||
## 8. Native Safe Areas
|
||
|
||
بررسی کن:
|
||
|
||
```text
|
||
Status Bar
|
||
Navigation Bar
|
||
Display Cutout
|
||
Notch
|
||
Gesture Area
|
||
Keyboard
|
||
```
|
||
|
||
UI نباید زیر عناصر system قرار بگیرد.
|
||
|
||
CSS safe-area را برای:
|
||
|
||
```text
|
||
env(safe-area-inset-top)
|
||
env(safe-area-inset-bottom)
|
||
```
|
||
|
||
در صورت نیاز صحیح استفاده کن.
|
||
|
||
---
|
||
|
||
## 9. Android Keyboard
|
||
|
||
روی:
|
||
|
||
```text
|
||
Login
|
||
Notes
|
||
Discussion
|
||
Assessment
|
||
Search
|
||
Forms
|
||
```
|
||
|
||
بررسی کن Keyboard باعث مخفی شدن input یا CTA نشود.
|
||
|
||
---
|
||
|
||
## 10. External Links
|
||
|
||
External URLها را audit کن.
|
||
|
||
تصمیم واضح داشته باش:
|
||
|
||
```text
|
||
Internal route
|
||
→ App
|
||
|
||
External trusted URL
|
||
→ System browser
|
||
```
|
||
|
||
رفتار ناخواسته WebView ایجاد نکن.
|
||
|
||
---
|
||
|
||
## 11. Downloads
|
||
|
||
این موارد را بررسی کن:
|
||
|
||
```text
|
||
Certificates
|
||
Documents
|
||
Course resources
|
||
```
|
||
|
||
اگر download در Web کار میکند، رفتار Android را نیز تست کن.
|
||
|
||
برای Certificate باید حداقل امکان:
|
||
|
||
```text
|
||
Open
|
||
Download
|
||
Share
|
||
```
|
||
|
||
در صورت پشتیبانی platform وجود داشته باشد.
|
||
|
||
---
|
||
|
||
## 12. Sharing
|
||
|
||
برای موارد مناسب abstraction ایجاد کن:
|
||
|
||
```text
|
||
Certificate
|
||
Course link
|
||
Achievement
|
||
```
|
||
|
||
در Android از Native Share در صورت نیاز استفاده کن و Web fallback حفظ شود.
|
||
|
||
---
|
||
|
||
## 13. Network Awareness
|
||
|
||
App باید وضعیت شبکه را تشخیص دهد.
|
||
|
||
Stateهای حداقل:
|
||
|
||
```text
|
||
Online
|
||
Offline
|
||
Reconnecting
|
||
```
|
||
|
||
Offline Learning Phase 3 باید همچنان کار کند.
|
||
|
||
Capacitor integration نباید Offline/PWA architecture را خراب کند.
|
||
|
||
---
|
||
|
||
## 14. Splash Screen
|
||
|
||
Splash Screen حرفهای ولی کوتاه باشد.
|
||
|
||
از نمایش Splash طولانی و مصنوعی جلوگیری کن.
|
||
|
||
Branding موجود پروژه را reuse کن.
|
||
|
||
---
|
||
|
||
## 15. App Icon
|
||
|
||
Android launcher icon و adaptive icon استاندارد ایجاد کن.
|
||
|
||
از asset برند فعلی MicroLearning استفاده کن.
|
||
|
||
Icon جدید unrelated طراحی نکن مگر asset مناسب موجود نباشد.
|
||
|
||
---
|
||
|
||
## 16. Status Bar
|
||
|
||
Status Bar با:
|
||
|
||
```text
|
||
Light Theme
|
||
Dark Theme
|
||
```
|
||
|
||
هماهنگ شود.
|
||
|
||
---
|
||
|
||
## 17. PWA Must Continue Working
|
||
|
||
بعد از اضافه شدن Capacitor این موارد نباید خراب شوند:
|
||
|
||
```text
|
||
Web
|
||
PWA Install
|
||
Service Worker
|
||
Offline Downloads
|
||
Responsive UI
|
||
Desktop Learner
|
||
```
|
||
|
||
APK نباید باعث fork شدن codebase شود.
|
||
|
||
---
|
||
|
||
## 18. Android Build
|
||
|
||
Debug APK بساز.
|
||
|
||
در صورت آماده بودن signing configuration، release build architecture را نیز آماده کن.
|
||
|
||
Secret signing key را commit نکن.
|
||
|
||
---
|
||
|
||
## 19. GitHub Actions Readiness
|
||
|
||
در صورت وجود GitHub Actions، pipeline جدا برای Android ایجاد کن یا readiness آن را اضافه کن.
|
||
|
||
هدف آینده:
|
||
|
||
```text
|
||
Frontend Test
|
||
↓
|
||
Frontend Build
|
||
↓
|
||
Capacitor Sync
|
||
↓
|
||
Android Build
|
||
↓
|
||
APK Artifact
|
||
```
|
||
|
||
اما CI موجود را بدون ضرورت بازنویسی نکن.
|
||
|
||
---
|
||
|
||
## PHASE 6 ACCEPTANCE CRITERIA
|
||
|
||
Phase 6 فقط وقتی Complete است که:
|
||
|
||
```text
|
||
React Web works
|
||
PWA works
|
||
Android project builds
|
||
APK installs
|
||
Login works
|
||
Learner Home works
|
||
Course Player works
|
||
Assessments work
|
||
Resume works
|
||
Offline works
|
||
Certificates work
|
||
Android Back works
|
||
Dark Mode works
|
||
RTL works
|
||
LTR works
|
||
```
|
||
|
||
و هیچ Frontend دوم ایجاد نشده باشد.
|
||
|
||
---
|
||
|
||
# PHASE 7 — Native Push Notifications with FCM
|
||
|
||
## هدف
|
||
|
||
Learner Android App باید Notification واقعی Android دریافت کند.
|
||
|
||
حتی وقتی App در foreground نیست.
|
||
|
||
Architecture مقصد:
|
||
|
||
```text
|
||
MicroLearning Backend
|
||
↓
|
||
Notification Domain Event
|
||
↓
|
||
Notification Service
|
||
↓
|
||
Laravel Queue
|
||
↓
|
||
Firebase Cloud Messaging
|
||
↓
|
||
Android App
|
||
↓
|
||
Native Android Notification
|
||
```
|
||
|
||
---
|
||
|
||
# 1. Notification Architecture
|
||
|
||
Notification logic را داخل Controllerها پراکنده نکن.
|
||
|
||
Architecture ترجیحی:
|
||
|
||
```text
|
||
Domain Event
|
||
↓
|
||
Notification Orchestrator
|
||
↓
|
||
Channel
|
||
```
|
||
|
||
Channelها:
|
||
|
||
```text
|
||
InAppChannel
|
||
PushChannel
|
||
EmailChannel
|
||
```
|
||
|
||
Web Push در آینده قابل اضافه شدن باشد.
|
||
|
||
---
|
||
|
||
# 2. Device Registration
|
||
|
||
Backend باید Deviceهای User را مدیریت کند.
|
||
|
||
مدل مناسب طراحی کن.
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
user_devices
|
||
```
|
||
|
||
فیلدهای منطقی:
|
||
|
||
```text
|
||
id
|
||
user_id
|
||
organization_id
|
||
platform
|
||
device_identifier
|
||
push_token
|
||
enabled
|
||
last_seen_at
|
||
created_at
|
||
updated_at
|
||
```
|
||
|
||
نام نهایی را با conventions پروژه هماهنگ کن.
|
||
|
||
---
|
||
|
||
# 3. Multiple Devices
|
||
|
||
یک User ممکن است:
|
||
|
||
```text
|
||
Phone
|
||
Tablet
|
||
Second Phone
|
||
```
|
||
|
||
داشته باشد.
|
||
|
||
Notification architecture باید Multiple Device را پشتیبانی کند.
|
||
|
||
---
|
||
|
||
# 4. Token Registration
|
||
|
||
بعد از دریافت FCM Token:
|
||
|
||
```text
|
||
Android App
|
||
↓
|
||
Authenticated API
|
||
↓
|
||
Register Device Token
|
||
```
|
||
|
||
Backend ownership را verify کند.
|
||
|
||
---
|
||
|
||
# 5. Token Refresh
|
||
|
||
FCM Token ممکن است تغییر کند.
|
||
|
||
Token refresh باید به Backend sync شود.
|
||
|
||
Duplicate token ایجاد نکن.
|
||
|
||
---
|
||
|
||
# 6. Logout
|
||
|
||
هنگام Logout:
|
||
|
||
Device registration مربوطه disable یا unregister شود.
|
||
|
||
User قبلی نباید Notification User جدید را دریافت کند.
|
||
|
||
---
|
||
|
||
# 7. Android 13+ Permission
|
||
|
||
برای Androidهایی که Permission لازم دارند:
|
||
|
||
```text
|
||
POST_NOTIFICATIONS
|
||
```
|
||
|
||
را صحیح مدیریت کن.
|
||
|
||
Permission را بلافاصله و بدون context درخواست نکن.
|
||
|
||
UX پیشنهادی:
|
||
|
||
```text
|
||
اعلانهای یادگیری را فعال کنید
|
||
|
||
مهلت دورهها، آموزشهای جدید و
|
||
گواهیهای صادرشده را از دست ندهید.
|
||
|
||
[فعال کردن اعلانها]
|
||
[بعداً]
|
||
```
|
||
|
||
از Dialog/Component استاندارد پروژه استفاده کن.
|
||
|
||
---
|
||
|
||
# 8. Notification Channels
|
||
|
||
Android Notification Channels ایجاد کن.
|
||
|
||
حداقل:
|
||
|
||
```text
|
||
Learning
|
||
Deadlines
|
||
Certificates
|
||
System
|
||
```
|
||
|
||
در صورت نیاز:
|
||
|
||
```text
|
||
Assignments
|
||
Reminders
|
||
```
|
||
|
||
اما Channelهای بسیار زیاد نساز.
|
||
|
||
---
|
||
|
||
# 9. Learner Notification Types
|
||
|
||
حداقل Eventهای زیر را بررسی و در صورت support Backend پیادهسازی کن:
|
||
|
||
```text
|
||
Course Assigned
|
||
Learning Path Assigned
|
||
Mandatory Learning Assigned
|
||
|
||
Deadline Approaching
|
||
Due Today
|
||
Overdue
|
||
|
||
Continue Learning Reminder
|
||
|
||
Assessment Available
|
||
|
||
Course Completed
|
||
|
||
Certificate Issued
|
||
|
||
Important Organization Announcement
|
||
```
|
||
|
||
---
|
||
|
||
# 10. Notification Preferences
|
||
|
||
به Preference واقعی User احترام بگذار.
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
New assignments
|
||
Deadline reminders
|
||
Daily reminders
|
||
Certificates
|
||
Organization announcements
|
||
```
|
||
|
||
Notificationهای security/critical system در صورت Business Rule میتوانند سیاست متفاوت داشته باشند.
|
||
|
||
---
|
||
|
||
# 11. Scheduled Reminders
|
||
|
||
Reminderها از queue/scheduler ارسال شوند.
|
||
|
||
برای مثال:
|
||
|
||
```text
|
||
3 days before deadline
|
||
1 day before deadline
|
||
Due today
|
||
Overdue
|
||
```
|
||
|
||
از Request synchronous برای ارسال bulk notification استفاده نکن.
|
||
|
||
---
|
||
|
||
# 12. Duplicate Protection
|
||
|
||
یک Notification نباید به دلیل Retry Queue چندبار برای یک Event ارسال شود.
|
||
|
||
Idempotency مناسب ایجاد کن.
|
||
|
||
مثلاً بر اساس:
|
||
|
||
```text
|
||
user
|
||
event
|
||
assignment
|
||
notification type
|
||
scheduled window
|
||
```
|
||
|
||
---
|
||
|
||
# 13. Deep Link on Notification Tap
|
||
|
||
هر Push باید در صورت نیاز مقصد داشته باشد.
|
||
|
||
مثلاً:
|
||
|
||
### Course Assigned
|
||
|
||
```text
|
||
Notification
|
||
↓
|
||
My Learning
|
||
↓
|
||
Course
|
||
```
|
||
|
||
### Deadline
|
||
|
||
```text
|
||
Notification
|
||
↓
|
||
Assignment
|
||
↓
|
||
Resume Lesson
|
||
```
|
||
|
||
### Certificate
|
||
|
||
```text
|
||
Notification
|
||
↓
|
||
My Certificates
|
||
↓
|
||
Certificate
|
||
```
|
||
|
||
---
|
||
|
||
# 14. Foreground Behavior
|
||
|
||
اگر App باز است، Notification نباید UX آزاردهنده ایجاد کند.
|
||
|
||
در صورت مناسب بودن:
|
||
|
||
```text
|
||
In-app banner / toast
|
||
```
|
||
|
||
و در background:
|
||
|
||
```text
|
||
Native notification
|
||
```
|
||
|
||
---
|
||
|
||
# 15. Notification History
|
||
|
||
Push Notification باید در صورت منطقی بودن با Notification Center داخل App هماهنگ باشد.
|
||
|
||
یعنی Notification دریافتشده فقط ephemeral نباشد.
|
||
|
||
User بتواند بعداً در:
|
||
|
||
```text
|
||
Notifications
|
||
```
|
||
|
||
آن را مشاهده کند.
|
||
|
||
---
|
||
|
||
# 16. Read / Unread
|
||
|
||
Notification Center:
|
||
|
||
```text
|
||
Unread
|
||
Read
|
||
Mark as read
|
||
Mark all as read
|
||
```
|
||
|
||
داشته باشد در صورت support فعلی.
|
||
|
||
---
|
||
|
||
# 17. Security
|
||
|
||
هر Notification Payload را حداقلگرا نگه دار.
|
||
|
||
Sensitive data را مستقیماً داخل Push Payload قرار نده.
|
||
|
||
مثلاً اطلاعات خصوصی ارزیابی یا اطلاعات حساس Employee ارسال نشود.
|
||
|
||
Push فقط context identifier امن ارسال کند و App داده اصلی را از API مجاز دریافت کند.
|
||
|
||
---
|
||
|
||
# 18. FCM Credentials
|
||
|
||
Firebase credential:
|
||
|
||
```text
|
||
.env
|
||
Secret Manager
|
||
Server Configuration
|
||
```
|
||
|
||
باشد.
|
||
|
||
هیچ:
|
||
|
||
```text
|
||
Private Key
|
||
Server Key
|
||
Service Account Secret
|
||
```
|
||
|
||
در repository commit نشود.
|
||
|
||
---
|
||
|
||
# 19. Failure Handling
|
||
|
||
FCM responseها را مدیریت کن.
|
||
|
||
برای Tokenهای:
|
||
|
||
```text
|
||
Invalid
|
||
Expired
|
||
Unregistered
|
||
```
|
||
|
||
Device token را disable/remove کن.
|
||
|
||
---
|
||
|
||
# 20. Observability
|
||
|
||
حداقل بتوانیم بفهمیم:
|
||
|
||
```text
|
||
Queued
|
||
Sent to FCM
|
||
Failed
|
||
Invalid token
|
||
```
|
||
|
||
ولی Delivery قطعی را اگر FCM چنین اطلاعاتی نداده، جعلی نمایش نده.
|
||
|
||
---
|
||
|
||
# 21. Push Tests
|
||
|
||
حداقل تست:
|
||
|
||
```text
|
||
User A notification
|
||
→ User A devices only
|
||
```
|
||
|
||
```text
|
||
User B
|
||
→ Must not receive User A notification
|
||
```
|
||
|
||
```text
|
||
Disabled preference
|
||
→ Optional notification not sent
|
||
```
|
||
|
||
```text
|
||
Invalid token
|
||
→ Safely disabled
|
||
```
|
||
|
||
```text
|
||
Logout
|
||
→ Device no longer receives private push
|
||
```
|
||
|
||
```text
|
||
Notification tap
|
||
→ Correct deep link
|
||
```
|
||
|
||
---
|
||
|
||
# PHASE 7 ACCEPTANCE CRITERIA
|
||
|
||
Phase 7 زمانی Complete است که:
|
||
|
||
```text
|
||
FCM connected
|
||
Device registration works
|
||
Token refresh works
|
||
Logout cleanup works
|
||
Android permission works
|
||
Native notification works
|
||
Background notification works
|
||
Notification channels work
|
||
Preferences work
|
||
Deep linking works
|
||
Duplicate push protection works
|
||
Notification center stays consistent
|
||
Security tests pass
|
||
```
|
||
|
||
---
|
||
|
||
# LEARNER FINAL QUALITY GATE — UPDATED
|
||
|
||
پس از Phase 7 حتماً این Flow را تست کن:
|
||
|
||
```text
|
||
Learner Login
|
||
↓
|
||
Device Registered
|
||
↓
|
||
Course Assigned
|
||
↓
|
||
App Closed
|
||
↓
|
||
Native Notification Received
|
||
↓
|
||
Tap Notification
|
||
↓
|
||
App Opens
|
||
↓
|
||
Correct Course
|
||
↓
|
||
Correct Resume Location
|
||
```
|
||
|
||
و:
|
||
|
||
```text
|
||
Deadline Reminder
|
||
↓
|
||
Native Notification
|
||
↓
|
||
Tap
|
||
↓
|
||
Assignment
|
||
↓
|
||
Continue Learning
|
||
```
|
||
|
||
و:
|
||
|
||
```text
|
||
Course Complete
|
||
↓
|
||
Certificate Issued
|
||
↓
|
||
Native Notification
|
||
↓
|
||
My Certificates
|
||
```
|
||
|
||
---
|
||
|
||
# UPDATED LEARNER RELEASE STATUS
|
||
|
||
در گزارش نهایی یکی از این وضعیتها را بده:
|
||
|
||
```text
|
||
NOT READY
|
||
|
||
PWA PRODUCTION READY
|
||
|
||
ANDROID DEBUG READY
|
||
|
||
ANDROID RELEASE READY WITH CONDITIONS
|
||
|
||
ANDROID PRODUCTION READY
|
||
```
|
||
|
||
---
|
||
|
||
# PART B — MANAGER PROMPT EXTENSION
|
||
|
||
Prompt Manager فعلی Phase 0 تا Phase 5 دارد.
|
||
|
||
یک Phase جدید اضافه کن:
|
||
|
||
```text
|
||
PHASE 6
|
||
Manager PWA & Push/Web Notification Experience
|
||
```
|
||
|
||
ترتیب نهایی:
|
||
|
||
```text
|
||
PHASE 0
|
||
Role & Permission Audit
|
||
↓
|
||
PHASE 1
|
||
Manager Shell & Dashboard
|
||
↓
|
||
PHASE 2
|
||
My Team & Learning Profiles
|
||
↓
|
||
PHASE 3
|
||
Assignments, Deadlines & Notifications
|
||
↓
|
||
PHASE 4
|
||
Skills, Insights, Reports & Approvals
|
||
↓
|
||
PHASE 5
|
||
Responsive, Security & Final QA
|
||
↓
|
||
PHASE 6
|
||
Manager PWA & Notifications
|
||
```
|
||
|
||
---
|
||
|
||
# PHASE 6 — Manager PWA & Notification Experience
|
||
|
||
## هدف
|
||
|
||
Manager Panel علاوه بر Desktop/Web، روی موبایل نیز بهصورت PWA قابل استفاده باشد.
|
||
|
||
برای Manager فعلاً Android APK مستقل نساز.
|
||
|
||
Architecture:
|
||
|
||
```text
|
||
Manager React Experience
|
||
↓
|
||
Web
|
||
+
|
||
Installable PWA
|
||
```
|
||
|
||
---
|
||
|
||
# 1. PWA Availability
|
||
|
||
Manager بتواند در browserهای پشتیبانیشده PWA را Install کند.
|
||
|
||
PWA Shell باید Role-aware باشد.
|
||
|
||
وقتی Manager وارد میشود:
|
||
|
||
```text
|
||
Manager Dashboard
|
||
```
|
||
|
||
نمایش داده شود، نه Learner Home.
|
||
|
||
---
|
||
|
||
# 2. Role Combination
|
||
|
||
اگر Manager خودش Learner هم هست، Role Switching یا Experience Switching فعلی پروژه را بررسی کن.
|
||
|
||
راهحل جدید duplicate نساز.
|
||
|
||
در صورت وجود switching استاندارد:
|
||
|
||
```text
|
||
Manager Mode
|
||
Learner Mode
|
||
```
|
||
|
||
را حفظ کن.
|
||
|
||
---
|
||
|
||
# 3. Manager Mobile Priorities
|
||
|
||
PWA Manager روی موبایل باید حداقل این Actions را عالی پشتیبانی کند:
|
||
|
||
```text
|
||
View Needs Attention
|
||
View My Team
|
||
View Employee Learning
|
||
Send Reminder
|
||
Assign Learning
|
||
Review Deadline
|
||
Approve Request
|
||
View Team Progress
|
||
```
|
||
|
||
Course Builder و Admin Toolهای unrelated را وارد PWA Manager نکن.
|
||
|
||
---
|
||
|
||
# 4. Manager In-App Notifications
|
||
|
||
Notification Center برای Manager category-aware باشد.
|
||
|
||
نمونه:
|
||
|
||
```text
|
||
Team Learning
|
||
Deadlines
|
||
Approvals
|
||
Skill Alerts
|
||
Reports
|
||
System
|
||
```
|
||
|
||
---
|
||
|
||
# 5. Manager Notification Events
|
||
|
||
در صورت وجود داده واقعی، Manager بتواند Notification دریافت کند برای:
|
||
|
||
```text
|
||
Team member overdue
|
||
|
||
Mandatory course not started
|
||
|
||
Team deadline approaching
|
||
|
||
Approval requested
|
||
|
||
Learning request received
|
||
|
||
Assignment completed
|
||
|
||
Critical skill gap alert
|
||
|
||
Weekly learning summary ready
|
||
```
|
||
|
||
Insight ساده را بیدلیل Push نکن.
|
||
|
||
Notification fatigue ایجاد نکن.
|
||
|
||
---
|
||
|
||
# 6. Immediate vs Digest
|
||
|
||
همه Eventها Push فوری نباشند.
|
||
|
||
تقسیمبندی منطقی:
|
||
|
||
```text
|
||
Immediate:
|
||
Critical overdue
|
||
Approval needing action
|
||
Important assignment issue
|
||
```
|
||
|
||
```text
|
||
Digest:
|
||
Team learning summary
|
||
Weekly progress
|
||
General insights
|
||
```
|
||
|
||
---
|
||
|
||
# 7. Manager Notification Preferences
|
||
|
||
Manager بتواند تنظیم کند:
|
||
|
||
```text
|
||
Team deadline alerts
|
||
Overdue alerts
|
||
Approval requests
|
||
Learning activity
|
||
Weekly summary
|
||
```
|
||
|
||
---
|
||
|
||
# 8. Web Push
|
||
|
||
اگر infrastructure Web Push پروژه آماده و قابل اتکا است، Manager PWA بتواند Web Push واقعی دریافت کند.
|
||
|
||
اگر هنوز زیرساخت Web Push وجود ندارد:
|
||
|
||
Fake implementation ایجاد نکن.
|
||
|
||
Architecture Notification Channel را طوری نگه دار که Web Push بعداً اضافه شود.
|
||
|
||
---
|
||
|
||
# 9. Shared Notification Backend
|
||
|
||
Notification Business Rules را بین:
|
||
|
||
```text
|
||
Learner APK
|
||
Manager PWA
|
||
In-App Notification Center
|
||
```
|
||
|
||
duplicate نکن.
|
||
|
||
Architecture:
|
||
|
||
```text
|
||
Domain Event
|
||
↓
|
||
Notification Service
|
||
↓
|
||
Recipient Resolution
|
||
↓
|
||
Preferences
|
||
↓
|
||
Channels
|
||
```
|
||
|
||
Channels:
|
||
|
||
```text
|
||
In-App
|
||
FCM
|
||
Web Push
|
||
Email
|
||
```
|
||
|
||
باید قابل توسعه باشند.
|
||
|
||
---
|
||
|
||
# 10. Manager Assignment Notification Integration
|
||
|
||
وقتی Manager در Phase 3 دورهای تخصیص میدهد:
|
||
|
||
```text
|
||
Manager
|
||
↓
|
||
Assign Course
|
||
↓
|
||
Learners
|
||
↓
|
||
Notification Event
|
||
↓
|
||
In-App + FCM according to preference
|
||
```
|
||
|
||
در صورت APK Learner.
|
||
|
||
Manager نباید خودش مستقیم FCM API را فراخوانی کند.
|
||
|
||
---
|
||
|
||
# 11. Manager Reminder Action
|
||
|
||
Action:
|
||
|
||
```text
|
||
Send Reminder
|
||
```
|
||
|
||
باید از همان Notification Service استفاده کند.
|
||
|
||
نه implementation جداگانه.
|
||
|
||
قبل از ارسال bulk reminder خلاصه نشان بده:
|
||
|
||
```text
|
||
12 learners
|
||
Course: Workplace Safety
|
||
Channel:
|
||
In-App + Push
|
||
|
||
[Send Reminder]
|
||
```
|
||
|
||
---
|
||
|
||
# 12. Rate / Spam Protection
|
||
|
||
Manager نباید بتواند ناخواسته پشت سر هم Pushهای مشابه برای یک Team ارسال کند.
|
||
|
||
برای Reminder:
|
||
|
||
```text
|
||
cooldown
|
||
duplicate detection
|
||
authorization
|
||
```
|
||
|
||
در نظر بگیر.
|
||
|
||
---
|
||
|
||
# 13. Team Scope
|
||
|
||
Notification recipientها حتماً Backend-scoped باشند.
|
||
|
||
Manager با دستکاری Request نباید بتواند برای افراد خارج از Team مجاز خودش Push ارسال کند.
|
||
|
||
---
|
||
|
||
# 14. Notification Audit
|
||
|
||
عملیات مهم Manager مثل:
|
||
|
||
```text
|
||
Bulk reminder sent
|
||
Assignment notification triggered
|
||
Deadline changed
|
||
```
|
||
|
||
در صورت وجود Audit architecture ثبت شود.
|
||
|
||
---
|
||
|
||
# 15. PWA Responsive QA
|
||
|
||
بررسی:
|
||
|
||
```text
|
||
360
|
||
375
|
||
390
|
||
430
|
||
768
|
||
```
|
||
|
||
Manager PWA روی mobile نباید desktop table shrink شده باشد.
|
||
|
||
---
|
||
|
||
# MANAGER PHASE 6 ACCEPTANCE CRITERIA
|
||
|
||
```text
|
||
Manager PWA installable
|
||
Manager route correct
|
||
Mobile dashboard works
|
||
Team actions work
|
||
Notifications permission-aware
|
||
Reminder action uses shared service
|
||
Team scope enforced
|
||
Duplicate reminder protection works
|
||
Learner FCM integration compatible
|
||
No separate Manager APK created
|
||
```
|
||
|
||
---
|
||
|
||
# PART C — SHARED NOTIFICATION ARCHITECTURE
|
||
|
||
این بخش برای هر دو Prompt الزامی است.
|
||
|
||
نباید برای Manager و Learner دو سیستم Notification جدا ساخته شود.
|
||
|
||
Architecture مقصد:
|
||
|
||
```text
|
||
MicroLearning
|
||
│
|
||
Domain/Application Events
|
||
│
|
||
Notification Service
|
||
│
|
||
┌───────────┼───────────┐
|
||
│ │ │
|
||
In-App Push Email
|
||
│
|
||
┌────────┴────────┐
|
||
│ │
|
||
FCM Web Push
|
||
│ │
|
||
Learner APK Manager PWA
|
||
```
|
||
|
||
---
|
||
|
||
# Recipient Resolution
|
||
|
||
Notification Service باید خودش مشخص کند Recipient چه کسی است.
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
Course Assigned
|
||
→ Learner
|
||
```
|
||
|
||
```text
|
||
Deadline approaching
|
||
→ Learner
|
||
```
|
||
|
||
```text
|
||
Employee overdue
|
||
→ Authorized Manager
|
||
```
|
||
|
||
```text
|
||
Approval requested
|
||
→ Manager
|
||
```
|
||
|
||
---
|
||
|
||
# Preferences
|
||
|
||
Flow:
|
||
|
||
```text
|
||
Event
|
||
↓
|
||
Recipient
|
||
↓
|
||
Permission / Scope
|
||
↓
|
||
Notification Preference
|
||
↓
|
||
Channel
|
||
↓
|
||
Queue
|
||
↓
|
||
Delivery
|
||
```
|
||
|
||
---
|
||
|
||
# Queue First
|
||
|
||
ارسال Notificationهای خارجی را synchronous داخل user request انجام نده.
|
||
|
||
از Queue استفاده کن.
|
||
|
||
Failure FCM/Web Push نباید عملیات اصلی مثل:
|
||
|
||
```text
|
||
Assign Course
|
||
Complete Course
|
||
Issue Certificate
|
||
```
|
||
|
||
را rollback کند مگر business rule صریحی وجود داشته باشد.
|
||
|
||
---
|
||
|
||
# Notification Taxonomy
|
||
|
||
یک taxonomy استاندارد داشته باش.
|
||
|
||
مثلاً:
|
||
|
||
```text
|
||
learning.assigned
|
||
learning.reminder
|
||
learning.deadline_soon
|
||
learning.overdue
|
||
learning.completed
|
||
|
||
assessment.available
|
||
|
||
certificate.issued
|
||
|
||
manager.approval_requested
|
||
manager.team_overdue
|
||
manager.weekly_summary
|
||
|
||
system.announcement
|
||
```
|
||
|
||
Naming را با conventions فعلی پروژه تطبیق بده.
|
||
|
||
---
|
||
|
||
# Notification Payload
|
||
|
||
Payload استاندارد داشته باش:
|
||
|
||
```text
|
||
type
|
||
title
|
||
body
|
||
recipient
|
||
entityType
|
||
entityId
|
||
deepLink
|
||
createdAt
|
||
```
|
||
|
||
Sensitive information اضافه نکن.
|
||
|
||
---
|
||
|
||
# Shared Deep Links
|
||
|
||
Learner:
|
||
|
||
```text
|
||
/course
|
||
/lesson
|
||
/certificate
|
||
/notification
|
||
```
|
||
|
||
Manager:
|
||
|
||
```text
|
||
/team/member
|
||
/assignment
|
||
/approval
|
||
/report
|
||
```
|
||
|
||
هم Web و هم Native باید از destination منطقی مشترک استفاده کنند.
|
||
|
||
---
|
||
|
||
# FINAL SAFETY RULE
|
||
|
||
برای اضافه کردن Capacitor، FCM یا PWA Notification:
|
||
|
||
**هیچیک از فازهای قبلی را دوباره Refactor نکن مگر integration واقعاً به تغییر آن نیاز داشته باشد.**
|
||
|
||
اگر integration نیازمند تغییر گسترده شد:
|
||
|
||
```text
|
||
STOP
|
||
```
|
||
|
||
و قبل از ادامه گزارش بده:
|
||
|
||
```text
|
||
Integration blocker:
|
||
Why:
|
||
Affected modules:
|
||
Risk:
|
||
Minimum viable fix:
|
||
Alternative:
|
||
```
|
||
|
||
---
|
||
|
||
# UPDATED EXECUTION ORDER
|
||
|
||
ترتیب پیشنهادی نهایی برای این دو بخش:
|
||
|
||
```text
|
||
LEARNER PHASE 0–5
|
||
↓
|
||
LEARNER PHASE 6
|
||
Android APK
|
||
↓
|
||
LEARNER PHASE 7
|
||
FCM Push
|
||
↓
|
||
MANAGER PHASE 0–5
|
||
↓
|
||
MANAGER PHASE 6
|
||
PWA + Manager Notifications
|
||
```
|
||
|
||
اگر Manager Phaseهای 0–5 قبلاً انجام شدهاند، مستقیماً Phase 6 را اجرا کن.
|
||
|
||
**هیچ Phase را بدون دستور صریح من شروع نکن. پس از هر Phase تست کن، گزارش بده و متوقف شو.**
|