Farcebook هو تطبيق ويب متكامل مستوحى من فيسبوك ومبني على إطار عمل Rails. يستخدم Farcebook قاعدة بيانات PostgreSQL وReact لعرض مكونات الواجهة الأمامية، مع استخدام Redux لإدارة الحالة.
مهزلة لايف
بمجرد قيام المستخدم بالتسجيل للحصول على حساب، يتم إنشاء صفحة الملف الشخصي له. يتضمن كل ملف تعريف رأسًا يخزن صورة الملف الشخصي وصورة الغلاف، وقسم مقدمة، الذي يعرض جميع معلومات المستخدمين الحاليين، وقسم الأصدقاء، الذي يعرض أول 9 أصدقاء للمستخدمين، وخلاصة تعرض جميع المنشورات التي نشرها المستخدم ونشرها على حائط المستخدمين.
تتم استضافة الصور باستخدام مجموعة AWS S3 ويتم رفعها وتخزينها في قاعدة البيانات باستخدام جوهرة paperclip
.
يقوم المستخدمون بمشاركة المعلومات مع الآخرين من خلال مكونات Post
Comment
. يمكن نشر المشاركات مباشرة على حائط مستخدمين آخرين أو نشرها على حائطهم الخاص (حيث تكون المشاركات receiver_id
مساوية id
الخاص بهم). يمكن للمستخدمين أيضًا تحميل صورة لمشاركتها مع كل مشاركة.
بمجرد إنشائها، يمكن تحرير المشاركات وحذفها. يمكن للمؤلف تعديل وحذف جميع منشوراته، بينما يمكن لمتلقي المنشور حذفها فقط.
لإظهار الموافقة، يمكن للمستخدمين اختيار Like
بالمنشور. لا تعرض المنشورات عدد الإعجابات التي تم تلقيها فحسب، بل تظهر أيضًا قائمة المستخدمين الذين أبدوا إعجابهم بها.
يمكن للمستخدمين أيضًا ترك تعليقات على المشاركات. يتم عرض التعليقات بالترتيب بناءً على وقت إنشائها. يمكن أيضًا الرد على التعليقات بتعليقات أخرى، حيث يعرض كل تعليق جميع التعليقات المتداخلة. ترتبط التعليقات بالتعليقات الأخرى من خلال parent_comment_id
الاختياري.
يمكن للمستخدمين أيضًا اختيار Like
بالتعليقات بنفس طريقة المنشورات. يتم ذلك باستخدام جدول واحد من خلال استخدام اقتران متعدد الأشكال، والذي يستخدم نوع likable_type
لتخزين نوع العنصر الذي يتم الإعجاب به.
يتم إنشاء Notification
وإرساله إلى مستخدم آخر عندما ينشر أي مستخدم على حائطه أو يتم الإعجاب/التعليق على أي من منشوراته/تعليقاته. يتم تحقيق ذلك مرة أخرى باستخدام ارتباط متعدد الأشكال يتتبع العنصر الذي يتم إعلامه به.
لدى المستخدمين مؤشر مرئي على شريط التنقل الخاص بهم يظهر عندما يكون لديهم أي إشعارات جديدة غير مرئية وقائمة منسدلة تعرض قائمة بجميع إشعاراتهم الأخيرة. يعرض كل NotificationListItem
اسم المستخدمين الآخرين والإجراء الذي حدث، بالإضافة إلى روابط للعنصر المعني عند النقر عليه.
لقد استخدمت التحميل المتحمس باستخدام ActiveRecord لتحسين استعلامات قاعدة البيانات الخاصة بي وزيادة الأداء. عند جلب الموجز لمستخدم ما، يتم أيضًا الاستعلام عن جميع المعلومات ذات الصلة مع كل مشاركة لاستخدامها لاحقًا.
#posts_controller.rb
...
def feed
...
author_ids = @current_user . friend_ids + [ @current_user . id ]
@posts = Post . includes ( comments : [ { likes : :liker } , :child_comments ] , likes : :liker )
. where ( 'author_id IN (?) OR receiver_id = ?' , author_ids , @current_user . id )
. limit ( 10 )
. order ( updated_at : :desc )
. distinct
...
لحماية المستخدمين، تتم حماية الكثير من وظائف التعليق والنشر على الجدران من خلال وجود صداقة بين المستخدمين. يتم ذلك من خلال استخدام العرض الشرطي في React، والتحقق مما إذا كان المستخدم الحالي صديقًا لمؤلف المنشور أو مالك الملف الشخصي أو إذا كان المستخدم الحالي يحاول التفاعل مع منشوراته/ملفه الشخصي.
// post_show.jsx
// Showing comment form on Posts
...
{ ( areFriends || isCurrentUser ) &&
< CommentForm postId = { id } / >
}
...
// post_form.jsx
// Showing Post form on user profiles
...
render ( ) {
if ( ! currentProfileFriends . includes ( currentUserId ) ) {
return null
}
...