c0d9e30b91
Replit-Commit-Author: Agent Replit-Commit-Session-Id: 77cfe984-2c65-4152-bb7a-0df28274fe66 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 2ca1a6d7-3aae-4de6-b02f-bcf6a2301173 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/c3c252e4-c83d-40ca-9fff-99a3ea60701e/77cfe984-2c65-4152-bb7a-0df28274fe66/G3ZvHke Replit-Helium-Checkpoint-Created: true
226 lines
6.8 KiB
Plaintext
226 lines
6.8 KiB
Plaintext
المطلوب تعديل نظام Note ليصبح فيه إرسال ومشاركة بين المستخدمين.
|
|
|
|
الفكرة:
|
|
المستخدم ينشئ Note جديدة، ثم يختار شخص أو أكثر لإرسالها لهم.
|
|
عند الإرسال تظهر النوت عند المتلقي داخل النظام في قسم خاص مثل:
|
|
- Received Notes
|
|
أو:
|
|
- Notes Inbox
|
|
|
|
كل Note مستلمة يجب أن تعرض:
|
|
- عنوان النوت
|
|
- محتوى النوت
|
|
- لون النوت
|
|
- اسم الشخص المرسل
|
|
- تاريخ الإرسال
|
|
- حالة القراءة Read / Unread
|
|
- إمكانية الرد داخل نفس النوت
|
|
|
|
--------------------------------------------------
|
|
1) تعديل مفهوم المشاركة
|
|
--------------------------------------------------
|
|
|
|
بدلاً من مشاركة صامتة فقط، أريد نظام إرسال واضح:
|
|
|
|
المرسل:
|
|
- ينشئ Note
|
|
- يختار اللون
|
|
- يكتب المحتوى
|
|
- يختار المستلمين
|
|
- يضغط Send
|
|
|
|
المتلقي:
|
|
- تظهر له النوت في Notes Inbox
|
|
- يشوف اسم المرسل
|
|
- يشوف اللون والمحتوى
|
|
- يستطيع الرد داخل نفس النوت
|
|
- تبقى نسخة محفوظة عنده حتى يراجعها لاحقاً
|
|
|
|
--------------------------------------------------
|
|
2) الجداول المطلوبة
|
|
--------------------------------------------------
|
|
|
|
جدول notes:
|
|
- id
|
|
- title
|
|
- content
|
|
- type (note | list)
|
|
- color
|
|
- ownerUserId
|
|
- createdAt
|
|
- updatedAt
|
|
|
|
جدول note_recipients:
|
|
- id
|
|
- noteId
|
|
- senderUserId
|
|
- recipientUserId
|
|
- status (unread | read | replied | archived)
|
|
- sentAt
|
|
- readAt
|
|
- archivedAt
|
|
|
|
جدول note_replies:
|
|
- id
|
|
- noteId
|
|
- senderUserId
|
|
- recipientUserId
|
|
- content
|
|
- createdAt
|
|
|
|
مهم:
|
|
- الردود تكون داخل نفس النوت
|
|
- كل رد يظهر باسم كاتبه وتاريخه
|
|
- المرسل والمتلقي فقط يشوفون المحادثة الخاصة بهم
|
|
|
|
--------------------------------------------------
|
|
3) واجهة المستخدم
|
|
--------------------------------------------------
|
|
|
|
داخل صفحة Note أضف تبويبات:
|
|
|
|
- My Notes
|
|
- Sent Notes
|
|
- Received Notes
|
|
- Archived
|
|
|
|
في My Notes:
|
|
- المستخدم يشوف النوتات التي أنشأها
|
|
|
|
في Sent Notes:
|
|
- المستخدم يشوف النوتات التي أرسلها للآخرين
|
|
- يظهر لكل نوت:
|
|
- المستلمين
|
|
- حالة كل مستلم: unread / read / replied
|
|
|
|
في Received Notes:
|
|
- المستخدم يشوف النوتات التي وصلته
|
|
- يظهر:
|
|
- اسم المرسل
|
|
- صورة/Avatar المرسل إن وجدت
|
|
- عنوان النوت
|
|
- اللون
|
|
- مختصر المحتوى
|
|
- حالة القراءة
|
|
|
|
--------------------------------------------------
|
|
4) فتح النوت المستلمة
|
|
--------------------------------------------------
|
|
|
|
عند فتح النوت المستلمة:
|
|
- تعرض النوت الأصلية في الأعلى
|
|
- يظهر اسم المرسل:
|
|
"From: [User Name]"
|
|
- يظهر اللون الذي اختاره المرسل
|
|
- يظهر تاريخ الإرسال
|
|
- أسفلها قسم Replies
|
|
|
|
المتلقي يستطيع:
|
|
- كتابة رد
|
|
- إرسال الرد
|
|
- أرشفة النوت
|
|
- تمييزها كمقروءة
|
|
|
|
بعد الرد:
|
|
- تتغير حالة النوت عند المرسل إلى replied
|
|
- يظهر الرد عند المرسل داخل Sent Notes أو داخل تفاصيل النوت
|
|
|
|
--------------------------------------------------
|
|
5) النسخ والحفظ
|
|
--------------------------------------------------
|
|
|
|
مهم جداً:
|
|
- النوت الأصلية تبقى محفوظة عند المرسل
|
|
- نسخة مستلمة تبقى محفوظة عند المتلقي في Received Notes
|
|
- إذا حذف المرسل النوت من عنده، لا تختفي النسخة من عند المتلقي
|
|
- إذا أرشف المتلقي النوت، لا تتأثر نسخة المرسل
|
|
- الحذف والأرشفة تكون لكل مستخدم بشكل مستقل
|
|
|
|
--------------------------------------------------
|
|
6) الصلاحيات
|
|
--------------------------------------------------
|
|
|
|
- لا يستطيع أي مستخدم فتح Note لم تُرسل له أو لم ينشئها
|
|
- المرسل يرى النوت التي أنشأها والردود الخاصة بها
|
|
- المتلقي يرى فقط النوتات المرسلة له
|
|
- الرد مسموح فقط للمرسل والمتلقي
|
|
- Super Admin يمكنه رؤية كل شيء عند الحاجة من لوحة الإدارة
|
|
|
|
يجب تطبيق الصلاحيات في Backend وليس Frontend فقط.
|
|
|
|
--------------------------------------------------
|
|
7) API المطلوبة
|
|
--------------------------------------------------
|
|
|
|
POST /api/notes
|
|
GET /api/notes/my
|
|
GET /api/notes/sent
|
|
GET /api/notes/received
|
|
GET /api/notes/:id
|
|
|
|
POST /api/notes/:id/send
|
|
Body:
|
|
{
|
|
"recipientUserIds": ["userId1", "userId2"]
|
|
}
|
|
|
|
POST /api/notes/:id/reply
|
|
Body:
|
|
{
|
|
"content": "reply text"
|
|
}
|
|
|
|
POST /api/notes/:id/read
|
|
POST /api/notes/:id/archive
|
|
|
|
--------------------------------------------------
|
|
8) الإشعارات داخل النظام
|
|
--------------------------------------------------
|
|
|
|
عند وصول Note جديدة:
|
|
- يظهر Badge على قائمة Note
|
|
- يظهر Toast notification
|
|
- في Received Notes تظهر كـ Unread
|
|
|
|
عند وصول رد:
|
|
- يظهر تنبيه للمرسل
|
|
- يتم تحديث حالة النوت إلى replied
|
|
|
|
--------------------------------------------------
|
|
9) تجربة المستخدم
|
|
--------------------------------------------------
|
|
|
|
- زر واضح باسم Send Note
|
|
- اختيار المستلمين من قائمة المستخدمين
|
|
- بحث عن المستخدم بالاسم
|
|
- عرض Chips للمستلمين المختارين
|
|
- Confirm قبل الإرسال
|
|
- Toast بعد الإرسال:
|
|
"Note sent successfully"
|
|
|
|
--------------------------------------------------
|
|
10) دعم العربية والإنجليزية
|
|
--------------------------------------------------
|
|
|
|
كل النصوص يجب أن تكون ضمن i18n:
|
|
- العربية RTL
|
|
- الإنجليزية LTR
|
|
|
|
--------------------------------------------------
|
|
11) المطلوب النهائي
|
|
--------------------------------------------------
|
|
|
|
نفّذ الميزة بشكل حقيقي:
|
|
- Database schema
|
|
- Backend routes
|
|
- Frontend UI
|
|
- Authorization
|
|
- Notifications badges
|
|
- Responsive design
|
|
- Clean code
|
|
- Production-ready
|
|
|
|
مهم:
|
|
لا تجعلها مجرد مشاركة عادية.
|
|
أريدها كأنها "مراسلة Note داخل النظام":
|
|
يرسل المستخدم Note، تظهر عند المتلقي، يستطيع الرد عليها، وتبقى نسخة محفوظة عند الطرفين. |