Firebase-இல் தனிப்பயனாக்கப்பட்ட இ-காமர்ஸ்

நான் ஒரு தனிப்பயனாக்கப்பட்ட இ-காமர்ஸ் தளத்தை ஆரம்பத்திலிருந்து உருவாக்கினேன். நான் ஏற்கனவே உள்ள தளங்களைப் (off-the-shelf platforms) பயன்படுத்தவில்லை. அதற்குப் பதிலாக Firebase Realtime Database மற்றும் Netlify ஆகியவற்றைப் பயன்படுத்தினேன்.

ஒரு POS டெர்மினல் மறுவிற்பனையாளருக்கான (reseller) தேவையைப் பூர்த்தி செய்வதே இதன் நோக்கமாக இருந்தது. அவர்களுக்கு ஒரு கேட்டலாக் (catalog), விலைப் மாற்றங்கள் (pricing variants) மற்றும் ஒரு நிர்வாகக் கட்டுப்பாட்டுப் பலகை (admin panel) தேவைப்பட்டன. விற்பனைத் குழுவினர் நேரடியாகத் தளத்திலிருந்தே ஆர்டர்களைச் செய்ய வேண்டியிருந்தது.

நான் இதை எவ்வாறு உருவாக்கினேன் மற்றும் இதிலிருந்து நான் கற்றுக்கொண்ட பாடங்கள் இதோ.

The Stack

• Vanilla HTML, CSS, மற்றும் JS. • தரவுகளுக்காக Firebase Realtime Database. • கோப்புகளுக்காக Firebase Storage. • ஹோஸ்டிங் மற்றும் செயல்பாடுகளுக்காக (functions) Netlify.

Key Decisions

1. Database Separation

இ-காமர்ஸ் தரவுத்தளத்தை உள் நிர்வாகத் தரவுத்தளத்திலிருந்து (internal management database) நான் தனித்தனியாக வைத்திருந்தேன். இது வணிகத் தரவுகள், சம்பளம் அல்லது பட்ஜெட் போன்ற முக்கியமான நிர்வாகத் தரவுகளுடன் கலப்பதைத் தடுக்கிறது.

2. Global Pricing Archive

ஒவ்வொரு பொருளுக்குள்ளும் விலைத் திட்டங்களைச் சேர்ப்பதற்குப் பதிலாக, ஒரு உலகளாவிய கட்டணக் கோப்புறையை (global tariffs folder) உருவாக்கினேன். தயாரிப்புகள் அவற்றின் ID-களின் வரிசையை (array of IDs) மட்டுமே கொண்டிருக்கும். இது தரவுத் திரும்பத் திரும்ப வருவதைத் (data duplication) தவிர்க்கிறது. ஒரு திட்டம் மாறினால், நான் அதை ஒருமுறை மட்டும் புதுப்பித்தால் போதும்.

3. Atomic Orders

ஒரே நேரத்தில் பல நபர்கள் ஆர்டர்களைச் செய்யும்போது, 'race conditions' போன்ற சிக்கல்கள் ஏற்படலாம். இரண்டு பேர் ஒரே ஆர்டர் எண்ணைப் படித்தால், ஒரு ஆர்டர் காணாமல் போக வாய்ப்புள்ளது. ஒவ்வொரு ஆர்டருக்கும் ஒரு தனித்துவமான, வரிசைமுறை எண்ணைப் பெறுவதை உறுதி செய்ய நான் Firebase runTransaction() முறையைப் பயன்படுத்தினேன்.

4. Secure Admin Access

நான் கடவுச்சொற்களை மூலக் குறியீட்டில் (source code) சேமிக்கவில்லை. Web Crypto API மூலம் PBKDF2 முறையைப் பயன்படுத்தினேன். இது 'brute-force' தாக்குதல்களை மிகவும் கடினமாக்குகிறது. குறியீட்டில் ஒரு salt மற்றும் ஒரு hash மட்டுமே இருக்கும்.

Lessons Learned

• 'falsy' மதிப்புகளைக் கவனமாகக் கையாளவும். JavaScript-இல், 0 என்பது 'falsy' ஆகும். ஒரு பொருளின் விலை 0 ஆக இருந்தால், "price || null" போன்ற ஒரு எளிய சரிபார்ப்பு அந்த விலையை நீக்கிவிடும். பூஜ்ஜியத்தையும் சேர்த்துக்கொள்ள எப்போதும் "price != null" என்பதைப் பயன்படுத்தவும்.

• HTTP தலைப்புகளில் (headers) CSP-ஐ உள்ளமைக்கவும் (Configure). Content Security Policy-க்கான மெட்டா டேக்குகள் (Meta tags), துணைப் பெயர்களுக்கான (subdomains) வைல்ட்கார்டுகளை (wildcards) ஆதரிப்பதில்லை. Firebase மாறும் துணைப் பெயர்களைப் (dynamic subdomains) பயன்படுத்துகிறது. எனவே, அது சரியாகச் செயல்பட CSP-ஐ netlify.toml-க்கு மாற்றினேன்.

• உண்மையான பாதுகாப்பிற்கு Security Rules-ஐப் பயன்படுத்தவும். உங்கள் UI-இல் பொத்தான்களை மறைப்பதன் மூலம் பாதுகாப்பளிக்க முயல வேண்டாம். யார் தரவைப் படிக்கலாம் மற்றும் எழுதலாம் என்பதைக் கட்டுப்படுத்த Firebase விதிகளைப் (rules) பயன்படுத்தவும்.

தனிப்பயனாக்கப்பட்ட தீர்வுகளை உருவாக்குவதற்கு கவனமான கட்டமைப்புத் தெரிவுகள் (architectural choices) தேவைப்படுகின்றன. transaction handling மற்றும் header configuration போன்ற சிறிய விவரங்கள், production சூழலில் பெரிய தோல்விகள் ஏற்படுவதைத் தவிர்க்கின்றன.

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