E-commerce מותאם אישית על Firebase
בניתי אתר E-commerce מותאם אישית מאפס. לא השתמשתי בפלטפורמות מוכנות (off-the-shelf). במקום זאת, השתמשתי ב-Firebase Realtime Database וב-Netlify.
הלקוח נזקק להגדרה ספציפית. הם רצו קטלוג מוצרים עם וריאציות מחיר ולוח בקרה (admin panel). הם גם היו צריכים שצוות המכירות שלהם יוכל לבצע הזמנות ישירות מהאתר.
הנה הדרך שבה פתרתי את האתגרים הטכניים העיקריים.
הפרדת נתונים
שמרתי על הפרדה בין מסד הנתונים של ה-E-commerce לבין מסד הנתונים של הניהול הפנימי. זה מונע מהנתונים המסחריים להתערבב עם קבצים רגישים כמו משכורות עובדים או תקציבים.
מידול נתונים עבור תמחור
תוכניות תמחור חוזרות לעיתים קרובות על עצמן במוצרים שונים. אם משכפלים את נתוני התוכנית בתוך כל מוצר, עדכונים הופכים לסיוט.
- יצרתי ארכיון גלובלי לכל התוכניות.
- כל מוצר מחזיק רק מערך של מזהי תוכניות (plan IDs).
- זה הופך את העדכונים למהירים ומונע שגיאות בנתונים.
מספור הזמנות אטומי (Atomic Order Numbering)
כאשר מספר אנשים מבצעים הזמנות בו-זמנית, נתקלים בבעיית "מרוץ" (race condition). אם שני משתמשים קוראים את אותו מספר הזמנה אחרון, הזמנה אחת עלולה להידרס.
- השתמשתי ב-Firebase transactions כדי לפתור זאת.
- הפונקציה
runTransactionמבטיחה שהמספר יגדל בצורה נכונה, גם עם משתמשים רבים במקביל. - זה מבטיח שלכל הזמנה יהיה מספר ייחודי.
גישת מנהל (Admin) מאובטחת
לא רציתי לשמור סיסמאות בקוד המקור. כמו כן, נמנעתי משימוש ב-hashes פשוטים כמו MD5.
- השתמשתי ב-PBKDF2 באמצעות ה-Web Crypto API.
- זה מפעיל אלפי איטרציות על ה-hash.
- זה הופך התקפות brute-force ליקרות מדי עבור האקרים.
- אני שומר רק את ה-salt ואת ה-hash בקוד.
תיקון באג ה-"אפס"
מצאתי באג שבו מוצרים עם מחיר של 0 הוצגו כ-"price to be defined".
- זה קרה מכיוון ש-JavaScript מתייחסת ל-0 כ-"falsy".
- תיקנתי זאת על ידי שינוי הלוגיקה שלי.
- במקום להשתמש ב-
price || null, השתמשתי ב-price != null. - זה מבטיח שהמערכת תזהה את 0 כמספר תקף.
הגדרת CSP
Firebase משתמשת בתתי-דומיינים דינמיים. תג HTML meta סטנדרטי עבור Content Security Policy (CSP) אינו יכול לטפל ב-wildcards הללו.
- העברתי את ה-CSP מה-HTML לכותרות ה-HTTP של Netlify.
- זה אפשר לי להשתמש ב-wildcards כדי ששירותי Firebase יעבדו בצורה תקינה.
בניית מערכות מותאמות אישית דורשת יותר מאשר רק כתיבת קוד. היא דורשת קבלת החלטות ארכיטקטוניות שמונעות כשלים בסביבת הייצור (production).
מקור: https://dev.to/androve2k/custom-e-commerce-on-firebase-catalog-atomic-orders-and-admin-panel-42ec
