متین طیبی نیا
3 سال پیش توسط متین طیبی نیا مطرح شد
2 پاسخ

بهینه سازی کد نوتیفکیشن های تیکت

سلام من تونستم قسمت نوتیفکیشن تیکت پیاده سازی کنم .
ولی کدم به اصطلاح تمیز نیست .
برای نشان دادن نوتیفیکیشن پاسخ جدید برای تیکت من دیتا جدیدی ایجاد نکردم وهمون دیتا قدیدمی فیلد read_at مساوی null کردم .

قبل از پاسخ
before
بعد از پاسخ
after
این کد من هستش

این قسمت برای پیدا کردن ادمین و کارمندانی که دسترسی به تیکت ها دارن 

public function PermissionForTicket()
    {
        return User::whereHas('roles', function ($query) {
            $query->where('name', 'ticket-controller');
        })->orWhere('is_superuser', 1)->get();
    }

این قسمت برای آپدیت نوتیفیکیشن ها 

    public function NotificationCommentForAdmins($id)
    {
        $admins = $this->PermissionForTicket();
        foreach ($admins as $admin) {
            foreach ($admin->notifications[0]->where('data->id', $id)->get() as $notification) {
                $notification->update([
                    'read_at' => null,
                    'updated_at' => Carbon::now(),
                ]);
            }
        }
    }

همانطور که میبینید من برای پیدا کردن نوتیفیکیشن ها از دو تا foreach استفاده کردم (اولی برای پیمایش کارمند ها ، دومی برای پیمایش نوتیفیکیشن ها ).
یک جورایی رو مخه 😅.
چه راهکار دیگه ای پیشنهاد میدین ؟
میخواستم بدونم collection های لاراول متد خاصی برای این کار نداره که کد کمتر و تمیز ترش کنه؟
@juza66
@mohaligateway
@Rp76
@muhammad
@ali.bayat


ثبت پرسش جدید
رضا پارسیان
تخصص : توسعه دهنده Php , Laravel
@Rp76 3 سال پیش مطرح شد
0

سلام وقتتون بخیر!

نظر من این هست که بکوبی از اول بسازی

جدول ها باید به این صورت باشه از نظر من البته

//table conversation
id
user_id
title
status => string bashe
timestamps

این جدولی که همه تیکت ها توش ذخیره میشه
حالا نوبت پیام ها هست

//table messages
id,
user_id -> har ki ino sabt karde [ manzoram ine ke harkas javabi sabt kard ba id khodesh ] 
conversation_id -> in ham bara in ke bedonim bara kodom ticket hast
text -> longtext bashe
attach -> string ke age file khastan upload konan

فکر کنم برای جدول پیام ها بالایی کافی باشه

حالا بریم سراغ نمایش

$conversations=Conversation::where("user_id",Auth::id())->paginate();

ارسالش میکنی به یه blade و تمام
حالا برای قسمت نمایش پیام های یه تیکت

$messagess=Messages::where("conversation_id",$id)->orderBy("id","DESC")->get();

حالا چک میکنی که اگر ارسال کننده این پیام با کسی که conversation رو ساخته یکی هست پس یعنی این پیام برای صاحب تیکت هست در غیر اینصورت یکی از مدیرا هست


متین طیبی نیا
تخصص : nodejs
@MatinTayebi 3 سال پیش مطرح شد
0

@Rp76
سلام
جدول تیکت من دقیقا به شکل جدول conversation شما هستش(با این تفاوت که statusاز نوع bool هستش و یک فیلد دیگه به اسم priorityبرای سطح تیکت وجود داره وcategory_id برای دسته بندی تیکت )
و جدول کامنت ها رو به شکل پالیمورفیک پیاده سازی کردم تا جاهای دیگه مثل نظرات محصولات بتونم پیاده سازی کنم و چیزی که من میگیم اینکه:
شما وقتی داخل تلگرام یا هر پیام رسان دیگه کسی به شما پیام بده یک نوتیفکیشن برای شما فعال میشه . تا شما بفهمید یک نفر پیام داده .
من از جدول نوتیفیکیشن های لاراول برای ایجاد نوتیفیکیشن برای کاربر استفاده میکنم .
که با فیلد 'read_at' مشخص میکنه که کاربر نوتیفیکیشن دیده یا نه
حالا سناریو اینکه که کاربر وقتی پاسخ جدید برای تیکت که ایجاد کرده میده یک نوتیفیکیشن جدید ایجاد نشه همون نوتیفیکیشن قبلی رو آپدیت کنه.
حالا اون دوتا foreach که میبینید برای پیداکردن نوتیفیکیشن هاست و آپادیت اونها با id که از فایل blade ارسال شده .


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام