Firebase పై కస్టమ్ ఈ-కామర్స్ (Custom E-commerce on Firebase)

నేను మొదటి నుండి ఒక కస్టమ్ ఈ-కామర్స్ సైట్‌ను రూపొందించాను. నేను ముందుగానే సిద్ధంగా ఉన్న (off-the-shelf) ప్లాట్‌ఫారమ్‌లను ఉపయోగించలేదు. దానికి బదులుగా, Firebase Realtime Database మరియు Netlify ఉపయోగించాను.

క్లయింట్‌కు ఒక ప్రత్యేకమైన సెటప్ అవసరమైంది. వారికి ధరల వైవిధ్యాలతో (pricing variants) కూడిన ప్రొడక్ట్ క్యాటలాగ్ మరియు ఒక అడ్మిన్ ప్యానెల్ కావాలి. అలాగే, వారి సేల్స్ టీమ్ నేరుగా సైట్ నుండి ఆర్డర్‌లను ప్లేస్ చేసేలా ఉండాలి.

ప్రధాన సాంకేతిక సవాళ్లను నేను ఎలా పరిష్కరించానో ఇక్కడ చూడండి.

డేటా విభజన (Data Separation)

నేను ఈ-కామర్స్ డేటాబేస్‌ను అంతర్గత మేనేజ్‌మెంట్ డేటాబేస్ నుండి వేరుగా ఉంచాను. దీనివల్ల వాణిజ్య డేటా (commercial data), ఉద్యోగుల జీతాలు లేదా బడ్జెట్‌ల వంటి సున్నితమైన ఫైళ్లతో కలవకుండా ఉంటుంది.

ధరల కోసం డేటా మోడలింగ్ (Data Modeling for Pricing)

ధరల ప్లాన్‌లు తరచుగా వివిధ ఉత్పత్తులలో పునరావృతమవుతుంటాయి. ప్రతి ఉత్పత్తిలో ప్లాన్ డేటాను డూప్లికేట్ చేస్తే, అప్‌డేట్‌లు చేయడం చాలా కష్టమవుతుంది.

  • నేను అన్ని ప్లాన్‌ల కోసం ఒక గ్లోబల్ ఆర్కైవ్‌ను సృష్టించాను.
  • ప్రతి ఉత్పత్తిలో కేవలం ప్లాన్ IDల యొక్క అర్రే (array) మాత్రమే ఉంటుంది.
  • ఇది అప్‌డేట్‌లను వేగవంతం చేస్తుంది మరియు డేటా లోపాలను నివారిస్తుంది.

అటామిక్ ఆర్డర్ నంబరింగ్ (Atomic Order Numbering)

ఒకే సమయంలో చాలా మంది ఆర్డర్‌లు చేసినప్పుడు, 'రేస్ కండిషన్' (race condition) ఎదురవుతుంది. ఇద్దరు వినియోగదారులు ఒకే చివరి ఆర్డర్ నంబర్‌ను చదివితే, ఒక ఆర్డర్ మరొక దానితో ఓవర్‌రైట్ అవుతుంది.

  • దీనిని పరిష్కరించడానికి నేను Firebase transactions ఉపయోగించాను.
  • runTransaction ఫంక్షన్, చాలా మంది వినియోగదారులు ఒకేసారి ఉన్నప్పటికీ, నంబర్ సరిగ్గా పెరుగుతుందని నిర్ధారిస్తుంది.
  • దీనివల్ల ప్రతి ఆర్డర్‌కు ఒక ప్రత్యేకమైన నంబర్ ఉంటుందని గ్యారెంటీ ఉంటుంది.

సురక్షితమైన అడ్మిన్ యాక్సెస్ (Secure Admin Access)

నేను సోర్స్ కోడ్‌లో పాస్‌వర్డ్‌లను నిల్వ చేయకూడదని అనుకున్నాను. అలాగే MD5 వంటి సాధారణ హాష్‌లను కూడా నివారించాను.

  • నేను Web Crypto API ద్వారా PBKDF2ని ఉపయోగించాను.
  • ఇది హాష్‌పై వేలకొద్దీ ఇటరేషన్లను (iterations) వర్తింపజేస్తుంది.
  • ఇది హ్యాకర్లకు బ్రూట్-ఫోర్స్ దాడులను (brute-force attacks) చాలా కష్టతరం చేస్తుంది.
  • నేను కోడ్‌లో కేవలం salt మరియు hash మాత్రమే నిల్వ చేస్తాను.

'Zero' బగ్‌ను సరిదిద్దడం (Correcting the 'Zero' Bug)

ధర 0 ఉన్న ఉత్పత్తులు "price to be defined" అని చూపిస్తున్నట్లు ఒక బగ్ కనుగొన్నాను.

  • JavaScript 0ను "falsy"గా పరిగణిస్తుంది కాబట్టి ఇది జరిగింది.
  • నా లాజిక్‌ను మార్చడం ద్వారా దీనిని సరిదిద్దాను.
  • "price || null" ఉపయోగించాలకు బదులుగా, "price != null" ఉపయోగించాను.
  • దీనివల్ల సిస్టమ్ 0ను సరైన సంఖ్యగా గుర్తిస్తుంది.

CSP కాన్ఫిగరేషన్ (CSP Configuration)

Firebase డైనమిక్ సబ్‌డొమైన్‌లను ఉపయోగిస్తుంది. కంటెంట్ సెక్యూరిటీ పాలసీ (CSP) కోసం ఉపయోగించే సాధారణ HTML meta ట్యాగ్ ఈ వైల్డ్‌కార్డ్‌లను (wildcards) హ్యాండిల్ చేయలేదు.

  • నేను CSPని HTML నుండి Netlify HTTP హెడర్‌లకు మార్చాను.
  • దీనివల్ల Firebase సర్వీసులు సరిగ్గా పనిచేయడానికి వైల్డ్‌కార్డ్‌లను ఉపయోగించడానికి వీలైంది.

కస్టమ్ సిస్టమ్‌లను నిర్మించడం అంటే కేవలం కోడ్ రాయడం మాత్రమే కాదు. ప్రొడక్షన్ వైఫల్యాలను నివారించే ఆర్కిటెక్చరల్ ఎంపికలను (architectural choices) తీసుకోవడం కూడా అవసరం.

మూలం: https://dev.to/androve2k/custom-e-commerce-on-firebase-catalog-atomic-orders-and-admin-panel-42ec