Firebase پر کسٹم ای کامرس

میں نے بالکل شروع سے ایک کسٹم ای کامرس سائٹ بنائی۔ میں نے پہلے سے موجود پلیٹ فارمز کا استعمال نہیں کیا۔ اس کے بجائے، میں نے Firebase Realtime Database اور Netlify کا استعمال کیا۔

کلائنٹ کو ایک مخصوص سیٹ اپ کی ضرورت تھی۔ وہ قیمتوں کے مختلف ورژن (pricing variants) کے ساتھ ایک پروڈکٹ کیٹلاگ اور ایک ایڈمن پینل چاہتے تھے۔ انہیں یہ بھی چاہیے تھا کہ ان کی سیلز ٹیم براہ راست سائٹ سے آرڈر دے سکے۔

یہاں بتایا گیا ہے کہ میں نے اہم تکنیکی چیلنجز کو کیسے حل کیا۔

ڈیٹا کی علیحدگی (Data Separation)

میں نے ای کامرس ڈیٹا بیس کو اندرونی مینجمنٹ ڈیٹا بیس سے الگ رکھا۔ یہ تجارتی ڈیٹا کو حساس فائلوں جیسے کہ ملازمین کی تنخواہوں یا بجٹ کے ساتھ ملنے سے روکتا ہے۔

قیمتوں کے لیے ڈیٹا ماڈلنگ (Data Modeling for Pricing)

قیمت کے منصوبے (Pricing plans) اکثر مختلف مصنوعات میں دہرائے جاتے ہیں۔ اگر آپ ہر پروڈکٹ کے اندر پلان کا ڈیٹا ڈپلیکیٹ کرتے ہیں، تو اپ ڈیٹس کرنا ایک مشکل کام بن جاتا ہے۔

  • میں نے تمام پلانز کے لیے ایک گلوبل آرکائیو بنایا۔
  • ہر پروڈکٹ میں صرف پلان آئی ڈیز (plan IDs) کا ایک ایرے (array) ہوتا ہے۔
  • اس سے اپ ڈیٹس تیز ہو جاتی ہیں اور ڈیٹا کی غلطیوں سے بچا جا سکتا ہے۔

ایٹامک آرڈر نمبرنگ (Atomic Order Numbering)

جب ایک ہی وقت میں کئی لوگ آرڈر دیتے ہیں، تو آپ کو 'ریس کنڈیشن' (race condition) کا سامنا کرنا پڑتا ہے۔ اگر دو صارفین ایک ہی آخری آرڈر نمبر پڑھتے ہیں، تو ایک آرڈر دوسرے کے اوپر لکھا (overwrite) جا سکتا ہے۔

  • میں نے اسے حل کرنے کے لیے Firebase transactions کا استعمال کیا۔
  • runTransaction فنکشن اس بات کو یقینی بناتا ہے کہ نمبر صحیح طریقے سے بڑھے، چاہے بہت سے صارفین ایک ساتھ کام کر رہے ہوں۔
  • یہ اس بات کی ضمانت دیتا ہے کہ ہر آرڈر کا نمبر منفرد ہو۔

محفوظ ایڈمن رسائی (Secure Admin Access)

میں سورس کوڈ میں پاس ورڈز اسٹور نہیں کرنا چاہتا تھا۔ میں نے MD5 جیسے سادہ ہیشز (hashes) سے بھی پرہیز کیا۔

  • میں نے Web Crypto API کے ذریعے PBKDF2 کا استعمال کیا۔
  • یہ ہیش پر ہزاروں بار تکرار (iterations) لاگو کرتا ہے۔
  • یہ ہیکرز کے لیے بروٹ فورس (brute-force) حملوں کو بہت مہنگا بنا دیتا ہے۔
  • میں کوڈ میں صرف سالٹ (salt) اور ہیش اسٹور کرتا ہوں۔

'Zero' بگ کی اصلاح (Correcting the 'Zero' Bug)

مجھے ایک بگ ملا جہاں 0 قیمت والی مصنوعات "price to be defined" کے طور پر دکھائی دیتی تھیں۔

  • ایسا اس لیے ہوا کیونکہ JavaScript 0 کو "falsy" سمجھتا ہے۔
  • میں نے اپنے لاجک (logic) کو تبدیل کر کے اسے ٹھیک کیا۔
  • "price || null" کے بجائے، میں نے "price != null" کا استعمال کیا۔
  • اس سے یہ یقینی بنتا ہے کہ سسٹم 0 کو ایک درست نمبر کے طور پر پہچانے۔

CSP کنفیگریشن (CSP Configuration)

Firebase ڈائنامک سب ڈومینز استعمال کرتا ہے۔ Content Security Policy (CSP) کے لیے ایک معیاری HTML meta tag ان وائلڈ کارڈز (wildcards) کو سنبھال نہیں سکتا۔

  • میں نے CSP کو HTML سے ہٹا کر Netlify HTTP headers میں منتقل کر دیا۔
  • اس سے مجھے وائلڈ کارڈز استعمال کرنے کی اجازت ملی تاکہ Firebase سروسز صحیح طریقے سے کام کر سکیں۔

کسٹم سسٹم بنانے کے لیے صرف کوڈ لکھنے سے زیادہ کی ضرورت ہوتی ہے۔ اس کے لیے ایسے آرکیٹیکچرل فیصلے کرنے پڑتے ہیں جو پروڈکشن کی ناکامیوں کو روک سکیں۔

ماخذ: https://dev.to/androve2k/custom-e-commerce-on-firebase-catalog-atomic-orders-and-admin-panel-42ec