راکت
حل شده

سبد خرید اپ

8 پاسخ

سلام خدمت برنامه نویس های عزیز . خسته نباشین . یه سوال فوری داشتم لطفا راهنمایی کنید . من یه لیست از محصولات دارم که داخل سبد خرید کلاینتم هست اگر در همین حین صاحب محصول بیاد اون محصول رو در دیتابیس حذف یا تغییر قیمت بده من چطوری در بکند سرور از این اتفاق مطلع بشم و به یوزر خودم اطلاع بدم که تغییر قیمت اتفاق افتاده الان همزمان دارم از مونگو استفاده میکنم . میخوام یه روش بگین که روی سرعت من تاثیر زیادی نداشته باشه من نخوام بیام تمام محصولات داخل لیست خرید رو از دیتابیس تک تک صدا بزنم.... کلا سبد خرید رو چجوری باید مطلع کنم که تغییر یا اتفاقی افتاده و اون محصول رو به روز کنم
@Arshiamohammadei
@Raymond
@MortezaVaezi
@Pouyab
@ossvahid
@FullStack
@hussain2
@Farzadameri

ثبت پرسش جدید

پاسخ‌ها

8
Arshiamohammadei
Arshiamohammadei
@Arshiamohammadei

تخصص: وب و هوش مصنوعی

بهترین پاسخ

سلام خوبی
ببین برای مطلع شدن از تغییرات در دیتابیس MongoDB به طور زنده و بدون نیاز به صدا زدن تک تک محصولات می‌تونی از مکانیزمی که به نام "Change Streams" شناخته می‌شه استفاده کنی Change Streams امکان رصد تغییرات در یک کالکشن MongoDB را برات فراهم میکنه

برای استفاده میتونی از این مثال استفاده کنی اگه بهم هم بگی که زبونت چیه بیشتر راهنمایی میکنیم

  1. در بکند سرورت یک Change Stream برای کالکشن مربوط به سبد خرید ایجاد کن:

    
    
    const pipeline = [{ $match: { 'fullDocument.productId': { $in: [productId1, productId2, ...] } } }];

const changeStream = db.collection('shoppingCart').watch(pipeline);

changeStream.on('change', (change) => {
// تغییر مربوطه را دریافت کنید
const updatedProduct = change.fullDocument;

// کارهای لازم را انجام دهید، مانند به‌روزرسانی قیمت در سبد خرید کاربر
});



ببین اینجا `productId1`، `productId2` و غیره، شناسه‌های محصول های  هستن که توی سبد خرید شما وجود داره خودت می‌توانی شناسه‌های محصولات مورد نظرو به جای آرایه `[productId1, productId2, ...]` قرار بدی

2. بعد توی بکند سرور، زمانی که صاحب محصول تغییری در محصول اعمال کرد و این تغییر در دیتابیس MongoDB ذخیره شدChange Stream فرمان `changeStream.on('change', (change) => { ... })` رو فراخونی کرده باشه و تغییر مربوطه رو دریافت کنه

حالا در دستگاه کلاینت خودت که با سرور ارتباط برقرارکرده خودت می‌تونی تغییرات رو دریافت کنی و سبد خرید کاربر رو به‌روز کنی همین

## لطفاً توجه داشته باشید که برای استفاده از Change Streams، نسخه MongoDB شما باید حداقل 3.6 باشد.
Arnold
Arnold
@idmoted

تخصص: eat sleep

سلام
یک راه هست به نام اخیر
شما باید کاری کنی که هرکسی که آپدیت میکنه طی یک روز بیاد تو یک صفحه ای و تو باید هروز صفحه رو چک کنی بهرحال ممکنه شلوغی هم اتفاق بیفته و راهی فکر نکنم جزء این باشه
صفحه آپدیت:

$conn = (database name)
if (isset($_GET['up'])) {
//    فلان فلانو پشمدان..
//    :اخرش
    $conn->query("INSERT INTO notif (notif) VALUES ('update in id = ". $_GET[up] ."')");
}

تایمر یک روزشو تنظیم کن در php
سپس تو صفحه یوزرت


<?php  
//$time = (23:59:59)<-مثال;  
$conn = new PDO("mysql:local=host;dbname=amir", 'root', '1234');  
$notif = $conn->;query("SELECT notif FROM notif WHERE time = '".$time."'")->fetchAll(PDO::FETCHASSOC);  
?>  
<div><?php echo $notif;?></div>

اینا همش مثاله درحد راهنمایی و کد کامل نیست و میتونی تقریبا بر اساس این یک کاری بکنی
این نمونه کد اگر تایمرش رو درست کنی اینطوری کار میکنه که هرکی آپدیت میکنه قیمت چیزیو تو دایوه نمایشش میده

جواد
جواد
@jojo321

اپلیکشن من موبایلی هستش این روش به کارم نمیاد من دنبال اینم کسی که محصولش رو اپدیت کرد اون مشتری که داخل اپ هست وقتی به سبد خرید مراجعه کنه تنها وقتی که به سبد خرد مراجعه کرد متوجه بشه برخی قیمت ها تغییر کردن منتها این فچ کردن دیتا در مقیاس اینکه کاربران زیاد بشن خیلی سنگینه من باید هر پروداکت رو جدا فچ کنم نمی خوام اینکارو کنم ممکنه هر فرد 20 تا سبد خرید داشته باشه و فعلا قصد خرید نکنه و اینو ضربدر تعداد کاربران کنی واقعا سنگین میشه .یعنی خود مونگو راهی نداره یا صفی تشکیل بدم دقیق نمی دونم چیکار کنم . از ردیس هم نمی خوام استفاده کنم چون سبد خرید اقلامش زیاد میشه بی خودی رم رو درگیر میکنم

شاید پاسخ شما همین‌جا باشد

میکائیل
میکائیل
@FullStack

تخصص: برنامه نویسی سمت سرور و کلاینت

سلام وقت بخیر
دوست عزیز شما میتونید توی اندروید هربار که کاربر وارد سبد خرید شد یه درخواست به سرور بزنه و بیاد ایدی محصولات داخل سبد خرید رو به سرور بفرسته و اونجا اطلاعات جدید براش ارسال بشه و اطلاعات اون محصول براش بیاد اینجوری اگه اون محصول نا موجود هم شد میتونی از سبد خریدش حذف کنی

جواد
جواد
@jojo321

سلام با نود جی اس بکند رو نوشتم رفتم مستنداتش رو خوندم چینج استریم رو روی محصولات می ذارم هر تغییری رخ داد یه متد می نویسم کار اون متد اینه سبد خرید رو چک کنه و تمام ایدی های که در اون سبد خرید هستن با یه حلقه اپدیت بشن روشش اینجوریه؟؟؟.ممنون میشم اگه روش دیگه هست که کارایی بهتر داشته باشه بگی . والا همین روش هم عالیه اگه روی سرعت تاثیر زیادی نذاره

@Arshiamohammadei

جواد
جواد
@jojo321

سلام از بندس ممنون از راهنمایی .بالا عرض کردم نمی خوام دیتابیس رو دائما فچ کنم توی سبد خرید 10 تا محصول باشه و 200 تا کاربر توی مدت کوتاهی بخوان بیان سبد خرید چک کن 2000 هزار دیتا بیس فچ میشه اگه راه بهتری برای فهمیدن تغییرات توسط کاربر باشه ممنون میشم بگین یا حتی دیتابیس دیگه این قابلیت رو داشته باشه یه روش بهینه تر باید باشه
@FullStack

میکائیل
میکائیل
@FullStack

تخصص: برنامه نویسی سمت سرور و کلاینت

دوست عزیز شما برای اینکه قیمت محصول رو بدست بیارید مجبورید اون محصول رو از دیتابیس پیدا کنید من منظورتون از اینکه بدون فچ کردن محصول رو قیمتشو بخوای در بیاری درک نمیکنم هر محصول یک قیمتی داره باید اون محصول رو پیدا کنه بعد قیمتشو در بیاری مگه اینکه بخوای هر کاربری که محصولی به سبد خریدش اضافه میکنه یه سبد خرید براش توی دیتابیس ایجاد بشه با ایدی خودش و قیمت محصول اونجا هم اضافه بشه و اگر قیمت محصول تغییر کرد هم از محصولات و هم اگه توی سبد خرید بود از اونجا قیمتش تغییر کنه

جواد
جواد
@jojo321

یه سبد خرید براش داخل دیتابیس ساختم میخوام تغییراتی که رخ میده برای محصول سبد خرید ازش مطلع بشه و اونجا هم بتونم تغییر بدم.نمی خوام از سمت کلاینت دنبال تغییر برم میخوام بعد از اپدیت یه محصول سرور متوجه بشه و سبد خرید کلاینت رو به روزرسانی کنه و نه همه رو سرچ بزنه فقط دنبال همون محصول مدنظر باشه و فقط هم وقتی قیمت یا موجودی تغییر میکنه این اتفاق بیفته
@FullStack

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

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