6.7 KiB
6.7 KiB
گزارش اجرای فاز ۳ پنل مدیر
تاریخ اجرا: ۱۴۰۵/۰۵/۲۹ (2026-08-20)
محدوده اجراشده
- بخش مستقل «تخصیص آموزش» به ناوبری مدیر اضافه شد.
- جریان ساده و پنجمرحلهای مخاطب، آموزش، مهلت، اعلان و بازبینی پیادهسازی شد.
- مدیر میتواند یک تیم تحت مدیریت یا چند کارمند مشخص از همان محدوده را انتخاب کند.
- فقط نسخههای منتشرشده دورهها و مسیرهای یادگیری در انتخاب آموزش نمایش داده میشوند.
- سه حالت بدون مهلت، تاریخ مشخص و مهلت نسبی پشتیبانی میشود.
- اعلان فوری، یادآوری قبل از مهلت، یادآوری روز مهلت و شرط «فقط اگر شروع نشده» قابل تنظیم است.
- پیش از ثبت، خلاصه کامل تصمیم نمایش داده میشود و پس از ثبت، تعداد تخصیص موفق، تکراری، اعلان ارسالشده، ردشده و زمانبندیشده گزارش میشود.
- فهرست تخصیصهای اخیر مدیر با امکان تغییر/حذف مهلت و ارسال یادآوری اضافه شد.
- اقدامهای «تخصیص آموزش» و «ارسال یادآوری» از پروفایل کارمند، با deep-link و فیلتر همان کارمند، به جریان جدید متصل شدند.
قرارداد API و مجوزها
Endpointهای اختصاصی و محدود به مدیر:
GET /api/v1/manager/assignment-contextsGET /api/v1/manager/assignmentsPOST /api/v1/manager/assignmentsPATCH /api/v1/manager/assignments/{assignment}/deadlinePOST /api/v1/manager/assignments/{assignment}/reminders
مجوزهای افزودهشده:
manager.assignments.managemanager.deadlines.managemanager.reminders.send
Endpoint عمومی سازمان برای assignment همچنان برای مدیر ممنوع است. مجوزهای جدید فقط جریان محدودشده مدیر را فعال میکنند.
امنیت، Scope و یکپارچگی داده
- مخاطبان در backend از تیمهای تحت مدیریت و اعضای فعال آنها استخراج میشوند؛ شناسه ارسالی کلاینت منبع اعتماد نیست.
- ساخت، مشاهده، تغییر مهلت و یادآوری فقط برای تخصیصهایی مجاز است که مدیر ساخته و همه گیرندگان آن همچنان داخل scope او باشند.
- دوره Draft یا محتوای خصوصی از context حذف و در mutation نیز رد میشود.
- تخصیص فعال تکراری در سطح هر گیرنده رد میشود؛ گیرندگان غیرتکراری همان درخواست همچنان ثبت میشوند.
- ساخت تخصیص، تغییر مهلت و ارسال یادآوری در audit log ثبت میشوند.
- reminder دستی دارای کلید idempotency روزانه است تا ارسال تکراری ناخواسته رخ ندهد.
- مسیر یادآوری با rate limit مستقل محافظت شده است.
معماری اعلان و زمانبندی
- ارسال واقعی از کانال In-App موجود انجام میشود و Notification Center یادگیرنده را تغذیه میکند.
- جدول
notification_schedulesبرای اعلانهای آینده، وضعیت تحویل، شرط، خطا و کلید idempotency اضافه شد. - فرمان
notifications:process-schedulesهر دقیقه توسط scheduler اجرا میشود. - هنگام تحویل، تکمیل/لغو assignment و شرط «شروع نشده» دوباره ارزیابی میشود.
- با تغییر مهلت، reminderهای در انتظار لغو و بر اساس مهلت جدید زمانبندی میشوند؛ با حذف مهلت لغو میشوند.
- تنظیمات
inAppNotifications،assignmentNotificationsوdeadlineRemindersکاربر رعایت میشوند؛ اعلانهای الزامی از اعلان اختیاری تفکیک شدهاند. - لایه orchestration از کانال تحویل جدا است و برای اتصال بعدی Web/PWA/FCM آماده است؛ هیچ اتصال ساختگی FCM یا Push اضافه نشده است.
تصمیمهای UI/UX
- طراحی با tokenها، RTL، dark mode و ترجمه فارسی/انگلیسی موجود هماهنگ نگه داشته شد.
- هر مرحله یک تصمیم مشخص دارد و خطا پیش از عبور از همان مرحله با
role="alert"اعلام میشود. - ورودیها label واقعی، دکمه آیکونی بستن نام قابلدسترسی و ترتیب طبیعی keyboard دارند.
- وضعیتها تنها با رنگ منتقل نمیشوند و متن/آیکن مکمل دارند.
- motion محدود است و
prefers-reduced-motionرعایت میشود. - در پروفایل کارمند، لینک تخصیص ویزارد را برای همان شخص باز میکند؛ لینک یادآوری فقط تخصیصهای مرتبط با او را فیلتر میکند.
تست و راستیآزمایی
- Backend کامل: ۱۶۲ تست و ۱۱۰۲ assertion پاس.
- Frontend کامل: ۳۱ فایل و ۹۸ تست پاس.
- تست متمرکز Manager frontend: ۷ تست پاس.
- تست متمرکز Manager backend: ۷ تست و ۵۸ assertion پاس.
- TypeScript typecheck، lint، Pint و build تولیدی پاس.
- migration زمانبندی اعلان با موفقیت اجرا شد.
- Playwright فاز ۳ در Chrome: ۲ تست پاس؛ ویزارد پنجمرحلهای و عرضهای ۳۷۵، ۷۶۸ و ۱۴۴۰ پیکسل بدون overflow بررسی شدند.
- build هشدار قدیمی chunkهای بزرگتر از ۵۰۰ کیلوبایت را دارد؛ این هشدار مانع build نیست و به این فاز اختصاص ندارد.
- PHPStan در وابستگیهای نصبشده پروژه وجود ندارد؛ بنابراین اجرای آن ممکن نبود و جایگزین نتایج آن ادعا نشده است.
خارج از محدوده این فاز
- قابلیتهای Skills، Insights، Reports و Approvals فاز ۴
- bulk deadline extension فراتر از نیاز واقعی فعلی
- اتصال تولیدی Web Push، PWA Push یا FCM
- هرگونه redesign سراسری پنل مدیر
فاز ۳ در همین نقطه متوقف شده است و فاز ۴ شروع نشده است.