سلام دوستان. وقت بخیر. من میخوام تو وبسایتم یه بخشی بذارم که ادمین بتونه به همه کاربرا یه اطلاعیه بفرسته. که در اینصورت روی بخش اطلاعیه ها یه کانتر قرمز قرار میگیره یعنی اطلاعیه جدید اومده. و وقتی کاربر اون اطلاعیه رو خوند کانتر حذف بشه یعنی توسط اون کاربر به حالت "خوانده شده" در بیاد.
چیزی که واضحه من نمیخوام واسه هر کاربر یه اطلاعیه ثبت بشه چون تعداد کاربرا زیادن.
حالا راه حلی هست که بشه این کار رو انجام داد؟ مشکل اصلی همون خونده شدن توسط کاربرا هست.
یه راه حلی که به ذهنم رسیده اینه که بیام توی یه ستون از نوع تکست id کاربرایی که اون اطلاعیه رو خوندن رو ذخیره کنم و موقع نمایش اگه id کاربر بین اون idها بود دیگه کانتر نذارم. این کار اوکیه ؟ باعث نمیشه به سرور فشار بیاد؟ چون هم تعداد کاربرا زیاد هست هم توی هرصفحه ای کوئری باید زده بشه و این کانتر لود بشه.
برای اطلاعیه ها یه جدول به شکل زیر در نظر بگیر (اگه خواستی میتونی فیلد های دیگه ای هم اضافه کنی)
Notifications:
id text created_at
یه جدول هم برای اینکه کاربران پیام رو خوندن یا نه
User_Read_Notification:
user_id notification_id read_at
حالا دوتا سناریو وجود داره، یکیش اینه که برای یوزرهایی که میخوای اطلاعیه براشون بره موقع ذخیره اطلاعیه آیدی کل یوزرهایی که میخوای براشون اطلاعیه ارسال بشه رو هم توی جدول دوم ذخیره کنی. موقع نمایش هم آیدی یوزری که لاگین کرده رو میگیری و بر اساس اون توی جدول دوم چک میکنی که فیلد read_at پر شده یا نه اگه خالی بود یعنی پیام رو نخونده و وقتی پیام رو خوند تاریخ و ساعت خونده شدنش رو روی فیلد read_at اعمال میکنی.
سناریو دوم اینطوریه که اول بیایی کل آیدی های جدول Notifications رو بگیری و همینطور آیدی یوزری که لاگین کرده، و بعد توی جدول دوم چک کنی که آیدی اون یوزر و اون اطلاعیه توی جدول دوم وجود داره یا نه، اگه وجود داشت یعنی اطلاعیه خونده شده اگه نبود یعنی نخونده و موقع خوندن باید آیدی یوزر و اون اطلاعیه و زمان خونده شدن رو ثبت کنی. این نکته رو در مورد این سناریو بگم که دیگه موقع ذخیره اطلاعیه لازم نیست جدول دوم هم مقدار دهی بشه و فقط موقع خونده شدن توی جدول دوم یه رکورد مربوط به اون یوزر ذخیره میشه.
امیدوارم که براتون مفید بوده باشه و متوجه شده باشین
موفق باشید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟