Files
TX/attached_assets/Pasted--5--1777634302007_1777634302007.txt
T
2026-05-01 11:18:40 +00:00

249 lines
6.5 KiB
Plaintext

أريد بناء نظام تنبيهات كامل داخل الاجتماعات الاجتماعات:
عرض تنبيه قبل الاجتماع القادم بـ 5 دقائق بطريقة واضحة وبسيطة ومناسبة
========================================
🧠 منطق النظام (Logic)
========================================
1. جلب اجتماعات اليوم فقط.
2. استبعاد الاجتماعات:
- status = cancelled
- status = completed
3. ترتيب الاجتماعات حسب startTime تصاعديًا.
4. تحديد الاجتماع القادم (أقرب اجتماع لم يبدأ بعد).
5. حساب الفرق بين الوقت الحالي ووقت بداية الاجتماع.
إذا:
remainingTime <= 5 دقائق AND remainingTime > 0
→ يظهر التنبيه.
========================================
🚫 شروط عدم الظهور
========================================
- إذا تم الضغط على "تم"
- إذا تم الضغط على "حذف التنبيه"
- إذا تم إلغاء الاجتماع
- إذا انتهى الاجتماع
-
========================================
🖥️ واجهة التنبيه (UI)
========================================
يظهر كـ:
Modal أو Toast في أعلى/وسط الشاشة يستطيع المستخدم تحريكه على اي اتجاه.
وكذالك التنبيه يظهر حتى لو انه خارج تطبيق الاجتماعات يظهر
يحتوي على:
- عنوان:
باقي على الاجتماع القادم 5 دقائق
- اسم الاجتماع
- الوقت:
مثال:
10:00
10:30
- تصميم:
- رسمي
- بسيط
- مناسب لجميع الاجهزه
- RTL
========================================
🔘 الأزرار داخل التنبيه
========================================
1) زر: تم
- إخفاء التنبيه
- لا تعديل على الاجتماع
- تسجيل في Audit Log:
meeting_alert_acknowledged
----------------------------------------
2) زر: تأجيل
عند الضغط:
يفتح Modal يحتوي 3 أقسام:
----------------------------------------
🔹 القسم الأول: تأجيل بالدقائق
----------------------------------------
خيارات:
- 5 دقائق
- 10 دقائق
- 15 دقيقة
- 30 دقيقة
- 45 دقيقة
- 60 دقيقة
عند اختيار مدة:
- تعديل startTime و endTime مباشرة
- مثال:
10:00 - 10:30 → 10:15 - 10:45
- إغلاق التنبيه
- إعادة ترتيب جدول اليوم حسب الوقت
- إعادة ترقيم عمود "#"
- تسجيل:
meeting_postponed_minutes
----------------------------------------
🔹 القسم الثاني: تأجيل إلى وقت لاحق
----------------------------------------
نموذج يحتوي:
- التاريخ
- وقت البداية
- وقت النهاية
- ملاحظة (اختياري)
عند الحفظ:
- تحديث الاجتماع مباشرة
- إذا نفس اليوم:
→ إعادة ترتيب الجدول
- إذا يوم آخر:
→ إزالته من جدول اليوم
- إعادة ترقيم "م"
- تسجيل:
meeting_rescheduled
----------------------------------------
🔹 القسم الثالث: إلغاء الاجتماع
----------------------------------------
عند الضغط:
يظهر Confirmation:
"هل أنت متأكد من إلغاء هذا الاجتماع من جدول اليوم؟"
الأزرار:
- نعم، إلغاء الاجتماع
- تراجع
عند التأكيد:
- status = cancelled
- لا حذف من قاعدة البيانات
- إخفاء من جدول اليوم
- إعادة ترتيب الجدول
- إعادة ترقيم "#"
- تسجيل:
meeting_cancelled
----------------------------------------
3) زر: حذف التنبيه
- إخفاء التنبيه فقط
- لا تعديل على الاجتماع
- تسجيل:
meeting_alert_dismissed
========================================
⚙️ إعادة ترتيب الجدول (Auto Reordering)
========================================
بعد أي عملية:
- تأجيل
- إعادة جدولة
- إلغاء
يجب:
- sort by startTime ASC
- إعادة ترقيم عمود "#"
- تحديث العرض مباشرة بدون Refresh كامل
========================================
⚠️ التعارضات (Conflict)
========================================
إذا أصبح هناك تداخل في الأوقات:
- لا تمنع العملية
- اعرض رسالة بسيطة:
"يوجد تعارض محتمل في وقت الاجتماعات"
========================================
🗄️ قاعدة البيانات (اختياري إذا غير موجود)
========================================
جدول:
executive_meeting_alert_state
حقول:
- id
- meetingId
- userId
- dismissed (boolean)
- acknowledged (boolean)
- updatedAt
========================================
📜 Audit Log
========================================
سجل العمليات:
- meeting_alert_shown
- meeting_alert_acknowledged
- meeting_alert_dismissed
- meeting_postponed_minutes
- meeting_rescheduled
- meeting_cancelled
========================================
🧩 Frontend
========================================
Component جديد:
UpcomingMeetingAlert
يرتبط بـ:
- صفحة جدول الاجتماعات اليومية
يعمل:
- polling أو timer كل 30 ثانية
- حساب الاجتماع القادم
- إظهار التنبيه عند الحاجة
========================================
🧪 الاختبار
========================================
1. أضف اجتماع بعد 5 دقائق
→ يجب أن يظهر التنبيه
2. اضغط "تم"
→ يختفي
3. اضغط "تأجيل 10 دقائق"
→ يتغير الوقت + يعاد ترتيب الجدول
4. اضغط "تأجيل إلى وقت لاحق"
→ يتحدث الاجتماع
5. اضغط "إلغاء"
→ يختفي من الجدول
6. تأكد:
- كل شيء مباشر
========================================
🚫 قيود مهمة
========================================
- لا تغيّر النظام العام
- لا تضف Workflow
- لا تضف Roles جديدة
- التعديل فقط داخل Executive Meetings
- الحفاظ على التصميم الرسمي والبسيط