Firebase पर कस्टम ई-कॉमर्स

मैंने शुरुआत से ही एक कस्टम ई-कॉमर्स साइट बनाई। मैंने किसी रेडीमेड (off-the-shelf) प्लेटफॉर्म का उपयोग नहीं किया। इसके बजाय, मैंने Firebase Realtime Database और Netlify का उपयोग किया।

क्लाइंट को एक विशिष्ट सेटअप की आवश्यकता थी। वे प्राइसिंग वेरिएंट्स के साथ एक प्रोडक्ट कैटलॉग और एक एडमिन पैनल चाहते थे। उन्हें यह भी चाहिए था कि उनकी सेल्स टीम सीधे साइट से ऑर्डर दे सके।

यहाँ बताया गया है कि मैंने मुख्य तकनीकी चुनौतियों को कैसे हल किया।

डेटा सेपरेशन (Data Separation)

मैंने ई-कॉमर्स डेटाबेस को इंटरनल मैनेजमेंट डेटाबेस से अलग रखा। इससे कमर्शियल डेटा, कर्मचारियों के वेतन या बजट जैसी संवेदनशील फाइलों के साथ मिक्स होने से बच जाता है।

प्राइसिंग के लिए डेटा मॉडलिंग (Data Modeling for Pricing)

प्राइसिंग प्लान अक्सर अलग-अलग प्रोडक्ट्स में दोहराए जाते हैं। यदि आप हर प्रोडक्ट के अंदर प्लान डेटा को डुप्लिकेट करते हैं, तो अपडेट करना एक दुस्वप्न (nightmare) बन जाता है।

  • मैंने सभी प्लान्स के लिए एक ग्लोबल आर्काइव बनाया।
  • प्रत्येक प्रोडक्ट में केवल प्लान IDs का एक ऐरे (array) होता है।
  • इससे अपडेट तेज़ हो जाते हैं और डेटा एरर से बचाव होता है।

एटॉमिक ऑर्डर नंबरिंग (Atomic Order Numbering)

जब कई लोग एक ही समय में ऑर्डर देते हैं, तो आपको 'रेस कंडीशन' (race condition) का सामना करना पड़ता है। यदि दो उपयोगकर्ता एक ही अंतिम ऑर्डर नंबर को पढ़ते हैं, तो एक ऑर्डर ओवरराइट हो जाता है।

  • मैंने इसे हल करने के लिए Firebase transactions का उपयोग किया।
  • runTransaction फंक्शन यह सुनिश्चित करता है कि कई समवर्ती (concurrent) उपयोगकर्ताओं के होने पर भी नंबर सही ढंग से बढ़े।
  • यह गारंटी देता है कि प्रत्येक ऑर्डर का नंबर यूनिक हो।

सुरक्षित एडमिन एक्सेस (Secure Admin Access)

मैं सोर्स कोड में पासवर्ड स्टोर नहीं करना चाहता था। मैंने MD5 जैसे साधारण हैश (hashes) से भी परहेज किया।

  • मैंने Web Crypto API के माध्यम से PBKDF2 का उपयोग किया।
  • यह हैश पर हजारों इटरेशन (iterations) लागू करता है।
  • यह ब्रूट-फोर्स हमलों (brute-force attacks) को हैकर्स के लिए बहुत महंगा बना देता है।
  • मैं कोड में केवल साल्ट (salt) और हैश स्टोर करता हूँ।

'Zero' बग को ठीक करना

मुझे एक बग मिला जहाँ 0 कीमत वाले प्रोडक्ट्स "price to be defined" के रूप में दिखाई दे रहे थे।

  • ऐसा इसलिए हुआ क्योंकि JavaScript 0 को "falsy" मानता है।
  • मैंने अपने लॉजिक को बदलकर इसे ठीक किया।
  • "price || null" का उपयोग करने के बजाय, मैंने "price != null" का उपयोग किया।
  • यह सुनिश्चित करता है कि सिस्टम 0 को एक वैध नंबर के रूप में पहचाने।

CSP कॉन्फ़िगरेशन (CSP Configuration)

Firebase डायनेमिक सबडोमेन का उपयोग करता है। Content Security Policy (CSP) के लिए एक स्टैंडर्ड HTML meta tag इन वाइल्डकार्ड्स (wildcards) को हैंडल नहीं कर सकता।

  • मैंने CSP को HTML से हटाकर Netlify HTTP headers में स्थानांतरित कर दिया।
  • इससे मुझे Firebase सेवाओं को सही ढंग से काम करने के लिए वाइल्डकार्ड्स का उपयोग करने की अनुमति मिली।

कस्टम सिस्टम बनाने के लिए केवल कोड लिखने से कहीं अधिक की आवश्यकता होती है। इसके लिए ऐसे आर्किटेक्चरल निर्णय लेने की आवश्यकता होती है जो प्रोडक्शन फेलियर (production failures) को रोक सकें।

स्रोत: https://dev.to/androve2k/custom-e-commerce-on-firebase-catalog-atomic-orders-and-admin-panel-42ec