تجارت الکترونیک سفارشی روی Firebase

من یک سایت تجارت الکترونیک سفارشی را از صفر ساختم. از پلتفرم‌های آماده استفاده نکردم. از Firebase Realtime Database و Netlify استفاده کردم.

هدف، خدمت‌رسانی به یک بازفروش ترمینال POS بود. آن‌ها به یک کاتالوگ، انواع قیمت‌گذاری و یک پنل مدیریت نیاز داشتند. تیم فروش نیز نیاز داشت تا سفارش‌ها را مستقیماً از طریق سایت ثبت کند.

در اینجا نحوه ساخت آن و درس‌هایی که آموختم را آورده‌ام.

تکنولوژی‌های مورد استفاده

• HTML، CSS و JS خام (Vanilla). • Firebase Realtime Database برای داده‌ها. • Firebase Storage برای فایل‌ها. • Netlify برای میزبانی و توابع (functions).

تصمیمات کلیدی

  1. جداسازی پایگاه داده من پایگاه داده تجارت الکترونیک را از پایگاه داده مدیریت داخلی جدا نگه داشتم. این کار از ترکیب داده‌های تجاری با داده‌های حساس مدیریتی مانند حقوق‌ها یا بودجه‌ها جلوگیری می‌کند.

  2. آرشیو قیمت‌گذاری سراسری به جای قرار دادن طرح‌های قیمت‌گذاری در هر محصول، یک پوشه تعرفه‌های سراسری ایجاد کردم. محصولات فقط شامل آرایه‌ای از IDها هستند. این کار از تکرار داده‌ها جلوگیری می‌کند. اگر طرحی تغییر کند، فقط یک بار آن را به‌روزرسانی می‌کنم.

  3. سفارش‌های اتمیک (Atomic) وقتی چندین نفر همزمان سفارش ثبت می‌کنند، با شرایط رقابتی (race conditions) مواجه می‌شوید. اگر دو نفر یک شماره سفارش یکسان را بخوانند، ممکن است یک سفارش ناپدید شود. من از runTransaction() در Firebase استفاده کردم تا مطمئن شوم هر سفارش یک شماره منحصربه‌فرد و متوالی دریافت می‌کند.

  4. دسترسی امن مدیریت من رمزهای عبور را در کد منبع ذخیره نکردم. از PBKDF2 از طریق Web Crypto API استفاده کردم. این کار حملات brute-force را بسیار دشوار می‌کند. کد فقط شامل یک salt و یک hash است.

درس‌های آموخته شده

• مراقب مقادیر falsy باشید. در JavaScript، عدد 0 یک مقدار falsy است. اگر قیمت محصول 0 باشد، یک بررسی ساده مانند "price || null" قیمت را حذف می‌کند. همیشه از "price != null" استفاده کنید تا عدد صفر نیز لحاظ شود.

• CSP را در هدرهای HTTP پیکربندی کنید. تگ‌های Meta برای Content Security Policy از wildcardها برای زیردامنه‌ها (subdomains) پشتیبانی نمی‌کنند. Firebase از زیردامنه‌های پویا استفاده می‌کند. من برای کارکرد صحیح، CSP را به netlify.toml منتقل کردم.

• برای محافظت واقعی از Security Rules استفاده کنید. هرگز به مخفی کردن دکمه‌ها در رابط کاربری (UI) تکیه نکنید. از قوانین Firebase برای محدود کردن کسانی که می‌توانند داده‌ها را بخوانند یا بنویسند، استفاده کنید.

ساخت راهکارهای سفارشی نیازمند انتخاب‌های معماری دقیق است. جزئیات کوچک مانند مدیریت تراکنش‌ها و پیکربندی هدرها، از شکست‌های بزرگ در محیط عملیاتی (production) جلوگیری می‌کنند.

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