سلام دوستان
توی برنامه هایی که کاربرها شارژ دارند ممکنه پس از اینکه شارژ کاربر کسر گردید و یک خدمت بهش میخوایم بدیم اینترنت قطع بشه و شارژ کسر بشه اما اون مورد براش نمایش داده نشه. حالا یا بخاطر قطع شدن اینترنت یا حتی بخاطر کم شدن سرعت اینترنت
برای اینکه بفهمم که کاربر شارژش که کم شده اون اطلاعات هم بهش داده شده یا نه چیکار باید بکنم؟
چون پیش اومده که شارژ کم شده ولی اطلاعات مورد نظر بهش نمایش نداده باشه
یه جدول برای تراکنشها داشته باشین و کسر شارژ و ثبت تراکنش توی جدول تراکنشها رو توی یه Transaction ثبت کنید. کاربر هم بعد از اینکه اینترنتش وصل شد میاد توی جدول تراکنشها و مواردی که کار کرده و آیتمهایی که بهش اختصاص داده شده رو میبینه. اگه از Transaction استفاده کنید، یا همه با هم ثبت میشن یا همه برگشت میخورن.
یعنی شارژ که کسر شد توی جدول ثبت بشه و وقتی جواب برگشت سمت کاربر و اطلاعات داده شد به کاربر مجدد توی جدول ثبت بشه که تراکنش انجام شد؟
در واقع باید دوبار به وب سرویس درخواست بزنیم یکبار موقع کسر شارژ و ثبت کسر شدن در جدول تراکنشها و دیگری زمانی که اطلاعات به کاربر داده شد و مجدد ثبت کنیم توی جدول تراکنشها که اطلاعات deliver شده.
درست متوجه شدم؟
خیر. شما شارژهای خریداری شده توسط کاربر رو توی یه جدول جداگانه براش ثبت میکنید که با فیلد user_id به جدول کاربر مربوطه وصله. بعد عملیات کمکردن شارژ و ثبت رکورد شارژ توی این جدول رو توی یه تراکنش انجام میدین. اگه رکورد توی جدول ثبت نشد، چیزی هم کسر نمیشه (Transaction رو باید Rollback کنید) و اگه ثبت شد، کل تراکنش رو Commit میکنید. درنهایت کاربر توی پنل کاربریش شارژهای خریداریشده توسط خودش رو میتونه ببینه (از جدول شارژها با کمک user_id استخراج کنید)
یکم که بیشتر فکر کردم دیدم مشکل شما که ناشی از قطع اتصال به سرور ممکنه باشه، با Stored Procedures بهتر جواب داده میشه. به زبان ساده، SP یه تابع هست که توی دیتابیس تعریف میکنید و پارامترها رو براش میفرستین و صداش میزنین. توی این تابع میشه چندین دستور اجرا کرد مثل اصلاح یه جدول و درج یه رکورد توی جدول دیگه و...
مزیت این روش اینه که شما یکبار صداش میزنید (دوبار اتصال به دیتابیس ندارین برای انجام دو کار مختلف) و اگه اتصالتون قطع شد هم سرور کار خودش رو ادامه میده