Firebase वर कस्टम ई-कॉमर्स (Custom E-commerce on Firebase)

मी शून्यापासून एक कस्टम ई-कॉमर्स साइट तयार केली. मी तयार प्लॅटफॉर्म्सचा (off-the-shelf platforms) वापर केला नाही. त्याऐवजी, मी Firebase Realtime Database आणि Netlify वापरले.

क्लायंटला एका विशिष्ट सेटअपची गरज होती. त्यांना किंमतीच्या विविध पर्यायांसह (pricing variants) प्रॉडक्ट कॅटलॉग आणि एक ॲडमिन पॅनेल हवे होते. तसेच, त्यांच्या सेल्स टीमला थेट साइटवरून ऑर्डर देण्याची सुविधाही हवी होती.

मी मुख्य तांत्रिक आव्हाने खालीलप्रमाणे सोडवली.

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

मी ई-कॉमर्स डेटाबेस आणि अंतर्गत व्यवस्थापन (internal management) डेटाबेस वेगवेगळे ठेवले. यामुळे व्यावसायिक डेटा कर्मचाऱ्यांचे पगार किंवा बजेट यांसारख्या संवेदनशील फाईल्समध्ये मिसळण्यापासून वाचतो.

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

प्राइसिंग प्लॅन्स अनेकदा वेगवेगळ्या उत्पादनांमध्ये पुन्हा पुन्हा येतात. जर तुम्ही प्रत्येक उत्पादनामध्ये प्लॅनचा डेटा कॉपी केला, तर अपडेट करणे खूप कठीण होते.

  • मी सर्व प्लॅन्ससाठी एक ग्लोबल आर्काइव्ह (global archive) तयार केला.
  • प्रत्येक उत्पादनामध्ये फक्त प्लॅन आयडीचा (plan IDs) एक ॲरे (array) असतो.
  • यामुळे अपडेट्स जलद होतात आणि डेटा एरर्स टाळता येतात.

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

जेव्हा एकाच वेळी अनेक लोक ऑर्डर देतात, तेव्हा 'रेस कंडिशन' (race condition) निर्माण होऊ शकते. जर दोन वापरकर्त्यांनी शेवटचा ऑर्डर नंबर सारखाच वाचला, तर एक ऑर्डर दुसऱ्याने ओव्हरराईट केली जाऊ शकते.

  • हे सोडवण्यासाठी मी Firebase transactions वापरले.
  • runTransaction फंक्शन हे सुनिश्चित करते की अनेक युजर्स एकाच वेळी असूनही नंबर योग्यरित्या वाढतो.
  • यामुळे प्रत्येक ऑर्डरला एक युनिक नंबर मिळण्याची खात्री मिळते.

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

मला सोर्स कोडमध्ये पासवर्ड साठवायचे नव्हते. मी MD5 सारखे साधे हॅश (hashes) देखील टाळले.

  • मी Web Crypto API द्वारे PBKDF2 वापरले.
  • हे हॅशवर हजारो वेळा प्रक्रिया (iterations) करते.
  • यामुळे हॅकर्ससाठी ब्रूट-फोर्स अटॅक (brute-force attacks) करणे खूप खर्चिक आणि कठीण होते.
  • मी कोडमध्ये फक्त सॉल्ट (salt) आणि हॅश साठवतो.

'Zero' बग दुरुस्त करणे (Correcting the 'Zero' Bug)

मला एक बग आढळला जिथे 0 किंमत असलेल्या उत्पादने "price to be defined" अशी दिसत होती.

  • हे घडले कारण JavaScript 0 ला "falsy" मानतो.
  • मी माझी लॉजिक बदलून हे दुरुस्त केले.
  • "price || null" वापरण्याऐवजी, मी "price != null" वापरले.
  • यामुळे सिस्टम 0 ला एक वैध नंबर म्हणून ओळखते.

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

Firebase डायनॅमिक सबडोमेन्स (subdomains) वापरते. 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