Firebase પર કસ્ટમ ઈ-કોમર્સ
મેં શૂન્યથી એક કસ્ટમ ઈ-કોમર્સ સાઇટ બનાવી છે. મેં તૈયાર મળતા પ્લેટફોર્મ્સનો ઉપયોગ કર્યો નથી. તેના બદલે, મેં Firebase Realtime Database અને Netlify નો ઉપયોગ કર્યો છે.
ક્લાયન્ટને એક ચોક્કસ સેટઅપની જરૂર હતી. તેઓ કિંમતના વિવિધ વિકલ્પો (pricing variants) સાથે પ્રોડક્ટ કેટલોગ અને એડમિન પેનલ ઈચ્છતા હતા. તેઓ એવું પણ ઈચ્છતા હતા કે તેમની સેલ્સ ટીમ સીધી સાઇટ પરથી ઓર્ડર આપી શકે.
મેં મુખ્ય ટેકનિકલ પડકારોનો ઉકેલ કેવી રીતે લાવ્યો તે અહીં છે.
ડેટાનું વિભાજન (Data Separation)
મેં ઈ-કોમર્સ ડેટાબેઝને આંતરિક મેનેજમેન્ટ ડેટાબેઝથી અલગ રાખ્યો હતો. આનાથી વ્યાપારી ડેટા કર્મચારીઓના પગાર અથવા બજેટ જેવી સંવેદનશીલ ફાઇલો સાથે ભળતો અટકશે.
પ્રાઇસિંગ માટે ડેટા મોડેલિંગ (Data Modeling for Pricing)
પ્રાઇસિંગ પ્લાન્સ ઘણીવાર વિવિધ પ્રોડક્ટ્સમાં પુનરાવર્તિત થાય છે. જો તમે દરેક પ્રોડક્ટની અંદર પ્લાન ડેટાની નકલ કરો છો, તો અપડેટ્સ કરવું મુશ્કેલ બની જાય છે.
- મેં તમામ પ્લાન્સ માટે એક ગ્લોબલ આર્કાઇવ બનાવ્યું.
- દરેક પ્રોડક્ટમાં ફક્ત પ્લાન ID ની એરે (array) હોય છે.
- આનાથી અપડેટ્સ ઝડપી બને છે અને ડેટાની ભૂલો અટકે છે.
એટોમિક ઓર્ડર નંબરિંગ (Atomic Order Numbering)
જ્યારે એકસાથે અનેક લોકો ઓર્ડર આપે છે, ત્યારે 'રેસ કન્ડિશન' (race condition) નો સામનો કરવો પડે છે. જો બે યુઝર્સ એક જ છેલ્લો ઓર્ડર નંબર વાંચે, તો એક ઓર્ડર બીજા દ્વારા ઓવરરાઈટ થઈ જાય છે.
- મેં આનો ઉકેલ લાવવા માટે Firebase transactions નો ઉપયોગ કર્યો.
runTransactionફંક્શન એ સુનિશ્ચિત કરે છે કે ઘણા બધા એકસાથે વપરાશકર્તાઓ હોવા છતાં નંબર સાચી રીતે વધે.- આ દરેક ઓર્ડર માટે એક યુનિક નંબરની ખાતરી આપે છે.
સુરક્ષિત એડમિન એક્સેસ (Secure Admin Access)
હું સોર્સ કોડમાં પાસવર્ડ સ્ટોર કરવા માંગતો ન હતો. મેં MD5 જેવા સાદા હેશ (hashes) નો ઉપયોગ કરવાનું પણ ટાળ્યું.
- મેં Web Crypto API દ્વારા PBKDF2 નો ઉપયોગ કર્યો.
- આ હેશ પર હજારો ઇટરેશન (iterations) લાગુ કરે છે.
- આનાથી હેકર્સ માટે બ્રુટ-ફોર્સ એટેક (brute-force attacks) કરવું ખૂબ જ ખર્ચાળ બની જાય છે.
- હું કોડમાં ફક્ત salt અને hash જ સ્ટોર કરું છું.
'ઝીરો' (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
