مرحباً بالجميع! 👋 مؤخرًا، عملت على منصة تصويت عبر الإنترنت بسيطة وآمنة online voting platform لمشروعي الصغير في الكلية، وأردت مشاركة كيف قمت بذلك. من إدارة تسجيلات المستخدمين إلى إعداد نظام موافقة إدارية، علمني هذا المشروع الكثير عن بناء تطبيقات ويب وظيفية باستخدام JavaScript و localStorage. في هذه المقالة على المدونة، سأرشدكم خلال تطوير المنصة والتحديات التي واجهتها وكيف التغلب عليها.
🎯 نظرة عامة على المشروع: ما الذي كنت أهدف إلى بنائه
الهدف كان إنشاء منصة تصويت بسيطة يمكنها التعامل مع:
-
تسجيلات المستخدم: السماح للمستخدمين بالتسجيل بناءً على تفاصيلهم.
-
التصويت: السماح للمستخدمين بالتصويت بشكل آمن على الاستفتاءات.
-
التحكم الإداري: تمكين الإدارة من إدارة الاستفتاءات وموافقة/رفض تسجيلات المستخدمين والإشراف على عملية التصويت.
في البداية، كنت أفكر في استخدام خلفية كاملة مع MongoDB، لكني أردت الحفاظ على بساطة الأمور، لذلك استخدمت localStorage لإدارة البيانات لهذه الإصدار الأولى من المشروع.
🌟 الميزات الرئيسية:
-
صفحات تسجيل الدخول والتحقق: يمكن للمستخدمين إنشاء حساب أو تسجيل الدخول.
-
موافقة المشرف: يتطلب تسجيل المستخدم موافقة المشرف قبل أن يتمكن من التصويت.
-
نظام التصويت: يمكن للمستخدمين المسجلين التصويت في الاستطلاعات النشطة.
-
لوحة الإدارة: يمكن للمشرف إنشاء وإدارة الاستطلاعات، وعرض طلبات المستخدمين، والتحكم في من يحق له التصويت.
🛠️ عملية التطوير: كيف قمت ببناء المنصة
1. إعداد المشروع
بدأت ببناء نظام بسيط لتسجيل الدخول والتسجيل باستخدام HTML وCSS وJavaScript وlocalStorage للتعامل مع بيانات المستخدم. تم تعيين حساب المشرف مسبقًا، ولكن يمكن للمستخدمين التسجيل من خلال تقديم اسمهم الكامل ورقم هوية الناخب وكلمة المرور. ومع ذلك، أدركت سريعًا أن السماح لأي شخص بالتسجيل والتصويت دون موافقة المشرف لم يكن الفكرة الأفضل.
2. إضافة موافقة المشرف للتسجيلات
لجعل المنصة أكثر أمانًا، قمت بإدخال نظام موافقة المشرف. عندما يقوم المستخدم بالتسجيل، يتم تخزين طلبه في localStorage ويتم وضع علامة “قيد الانتظار” عليه. يمكن للمشرف بعد ذلك مراجعة هذه الطلبات والموافقة عليها أو رفضها.
🚧 التحديات مع موافقة المشرف:
-
تتبع الطلبات المعلقة: كنت بحاجة إلى التأكد من أن المستخدمين الذين ينتظرون الموافقة لن يتمكنوا من التصويت بعد ذلك.
-
الموافقة على المستخدمين: بمجرد الموافقة، كان يجب نقل بيانات المستخدم من قائمة “المعلقة” إلى قائمة “المستخدمين المسجلين” في localStorage.
✅ الحل:
قمت بإنشاء نظام بسيط حيث:
-
تم تخزين طلبات التسجيل في localStorage تحت مفتاح خاص (
accountRequests
). -
عندما وافق المسؤول على مستخدم، تم نقل تفاصيله إلى قائمة
users
، مما يمنحه الوصول إلى نظام التصويت. -
إذا تم رفضه، ظل الطلب في localStorage للرجوع إليه في المستقبل، حتى يتمكن المسؤول من تتبع جميع القرارات.
3. إنشاء وإدارة الاستطلاعات
الصفحة الإدارية سمحت بإنشاء استطلاعات ديناميكية، حيث كان المسؤول يمكنه إضافة خيارات تصويت متعددة. تم تخزين بيانات الاستطلاع في localStorage وعرضها على المستخدمين بمجرد تسجيل دخولهم والموافقة عليهم.
📝 إنشاء الاستطلاعات:
-
يتم إنشاء الاستطلاعات بواسطة المسؤول باستخدام نموذج يسمح بخيارات ديناميكية. يسمح النموذج للمسؤول بإضافة أي عدد من الخيارات اللازمة لكل استطلاع.
-
ثم يمكن للمستخدمين عرض هذه الاستطلاعات والتصويت عليها.
4. التعامل مع التصويت والنتائج
تم تصميم نظام التصويت ليكون بسيطًا: بمجرد تسجيل المستخدمين الدخول والموافقة عليهم من قبل المسؤول، يمكنهم رؤية الاستطلاعات النشطة والتصويت عليها.
🗳️ تحديات التصويت:
-
منع التصويت المتكرر: كان علي التأكد من أن المستخدمين يمكنهم التصويت مرة واحدة فقط في كل استطلاع.
-
تخزين النتائج: تم حفظ الأصوات في localStorage، مرتبطة بالمستخدم المحدد والاستطلاع.
✅ الحل:
هذا هو الترجمة إلى اللغة العربية:
كان كل صوت مرتبطًا بمعرف المستخدم والاستطلاع المحدد. وهذا ضمن أن كل مستخدم يمكنه التصويت مرة واحدة فقط ، وتم تخزين النتائج بأمان في localStorage.
5. عرض حالة تسجيل المستخدم
أردت التأكد من أن المستخدمين يعرفون ما إذا كان تسجيلهم قد تمت الموافقة عليه أو رفضه أو لا يزال قيد الانتظار. لفعل ذلك ، أضفت صفحة “فحص الحالة” حيث يمكن للمستخدمين إدخال معرف التسجيل الخاص بهم للتحقق من حالة الموافقة.
📋 تحديات الحالة:
- الحفاظ على حالة المستخدم: كان من الصعب متابعة كل طلب تسجيل وربطه بالحالة الصحيحة.
✅ الحل:
تم تعيين معرف فريد لكل طلب تسجيل ، ويمكن للمستخدمين إدخال هذا المعرف للتحقق مما إذا كان طلبهم قد تمت الموافقة عليه أو رفضه أو لا يزال قيد الانتظار. ساعدت هذه الصفحة البسيطة للحالة في تحسين تجربة المستخدم من خلال تقديم ملاحظات فورية بشأن طلبهم.
🔑 التحديات الرئيسية وكيف حللتها
1. إدارة طلبات المستخدمين والموافقات الإدارية
في البداية ، لم أكن متأكدًا من كيفية هيكلة نظام الموافقة. بعد بعض المحاولات والأخطاء ، قررت استخدام localStorage لإدارة عملية موافقة المستخدم. حافظ هذا على بساطة النظام وسمح بتحديثات سريعة من قبل المسؤول.
2. التعامل مع الاستطلاعات الديناميكية
السماح للمسؤول بإضافة خيارات تصويت متعددة بشكل ديناميكي كان تحديًا ولكنه مرضٍ. طبقت هذا من خلال السماح للمسؤول بإنشاء استطلاعات بأي عدد من الخيارات المطلوبة ، والتي تم حفظها كمصفوفات في localStorage.
3. تخزين الأصوات ومنع التصويت المزدوج
كانت إحدى التحديات هي التأكد من أن المستخدمين يمكنهم التصويت مرة واحدة فقط لكل استطلاع. حليت هذه المشكلة بربط الأصوات بمعرف المستخدم ومعرف الاستطلاع، لضمان أن كل مستخدم يمكنه التصويت مرة واحدة فقط.
💡 ما تعلمته
بناء هذه المنصة للتصويت علمني الكثير عن التعامل مع بيانات المستخدم، وإنشاء سير عمل الموافقة، وإدارة المحتوى الديناميكي باستخدام localStorage. إليك بعض الدروس المستفادة:
-
إدارة المستخدمين: تعلمت كيفية إدارة حسابات المستخدمين، بما في ذلك التعامل مع التسجيلات المعلقة والموافقات.
-
localStorage للحفاظ على البيانات: كانت هذه المرة الأولى التي أستخدم فيها localStorage بشكل مكثف لمشروع، وكانت تجربة تعليمية رائعة. يعمل بشكل جيد للمشاريع الصغيرة ولكنه قد يحتاج إلى استبداله بقاعدة بيانات مثل MongoDB للتوسع.
-
بناء لوحة إدارة: إنشاء صفحة إدارية لإدارة المستخدمين والاستطلاعات أعطاني نظرة ثاقبة على تعقيدات التحكم الإداري في النظام.
🌟 التحسينات المستقبلية
على الرغم من أن الإصدار الحالي من المنصة يعمل بشكل جيد للتصويت على نطاق صغير، إلا أنني أفكر في نقله إلى حل أكثر رسوخية في المستقبل:
-
دمج MongoDB: في المشاريع الكبيرة، يمكن أن يوفر الانتقال إلى MongoDB استمرارية بيانات أفضل وقابلية للتوسع.
-
تنفيذ الواجهة الخلفية: استخدام Express.js للواجهة الخلفية سيتيح معالجة بيانات أكثر أماناً وإدارة أسهل لحسابات المستخدمين والاستطلاعات.
في الوقت الحاضر، أنا سعيد بكيفية تحقيق المنصة. إنها بسيطة وآمنة ووظيفية لنطاق المشروع.
تفقد المنصة الحية: منصة التصويت عبر الإنترنت
استكشف الكود على GitHub: مستودع نظام التصويت
باختصار 🥜
بناء هذا المنصة التصويت عبر الإنترنت كان تجربة تعلم رائعة. من التعامل مع تسجيل المستخدمين والموافقات الإدارية إلى إنشاء استطلاعات ديناميكية وضمان أمن البيانات، ساعدني كل تحدٍ على النمو كمطوّر. أنا متحمس لتطبيق هذه الدروس في المشاريع المستقبلية، وآمل أن يلهمك هذا المنشور لبناء شيء مماثل!
شكرًا لقراءتك، ولا تتردد في مشاركة أفكارك أو أسئلتك أدناه! 😄