تخطَّ إلى المحتوى
Victor Ly

الطلبات والمدفوعات لدى Balobrador

نظام الطلبات والدفع بالبطاقة وراء balobrador.es، وهو متجر تشيز كيك قرب مدريد: كتالوج، وسلة مشتريات، وجدولة الاستلام، وStripe Checkout. بنيتُه بمفردي، ويتلقى مدفوعات حقيقية منذ أكتوبر 2025، وما زلت أشغّله.

زيارة balobrador.es
  • Stripe
  • Astro
  • React
  • TypeScript
  • Netlify Functions
  • Node.js
  • Zustand
  • Tailwind

ما الذي يفعله

تبيع Balobrador كعكات التشيز كيك بثلاثة أحجام، والكوكيز، للاستلام من متجرها في Rivas-Vaciamadrid. ويتولى الموقع الطلب كاملًا: كتالوج، وسلة مشتريات تبقى محفوظة بعد إغلاق التبويب، وتقويم استلام لا يعرض إلا التواريخ التي يستطيع المطبخ الالتزام بها، وصفحة دفع بالبطاقة تستضيفها Stripe، ورسائل تأكيد بالبريد الإلكتروني إلى العميل وإلى المتجر فور اكتمال الدفع. الصفحات ثابتة مبنية بـ Astro، ولا يُستخدم React إلا حيث يلزم أن يستجيب شيء ما؛ أما جانب الخادم فبضع دوال على Netlify Functions. لا توجد قاعدة بيانات: ملفات المنتجات في المستودع هي المرجع المعتمد، وكل تغيير في سعر أو نكهة جديدة أو إغلاق يصدر كإيداع (commit) يُنشر تلقائيًا عند رفعه.

الخادم يقرر كم يكلّف كل شيء

لا تثق عملية الدفع بالسلة التي يرسلها المتصفح. فخطوة في مرحلة البناء تحوّل ملفات المنتجات إلى كتالوج أسعار مفهرس بحسب المنتج والحجم، وتعيد دالة الدفع بناء كل بند من بنود Stripe انطلاقًا منه: السعر والاسم والفئة تأتي من الخادم، والكميات أعداد صحيحة مقيَّدة بحدود، والحد الأدنى للطلب يُفحص مقابل أسعار الكتالوج، ويُرفض أي تاريخ استلام يقع ضمن فترة إغلاق قبل أن تُنشأ أي جلسة دفع. الأسعار شاملة ضريبة القيمة المضافة بنسبة 10%، وتتحول بدقة إلى السنتات الصحيحة التي تحصّلها Stripe. ويتحقق خطاف الويب (webhook) من توقيع Stripe، ولا يبني رسائل الطلب إلا من الجلسة التي تحقق منها.

قواعد الاستلام بوصفها شيفرة

يُحضّر المطبخ طلبات عطلة نهاية الأسبوع دفعةً واحدة بدءًا من يوم الجمعة، لذا تشترك طلبات الاستلام أيام السبت والأحد والاثنين في موعد نهائي واحد: الخميس الساعة 18:30 بتوقيت مدريد. وتحتاج طلبات الاستلام من الثلاثاء إلى الجمعة إلى إشعار مسبق بيومين، مع الموعد النهائي نفسه عند 18:30. كتبتُ القاعدة بعدد أيام الإشعار المسبق لا بأسماء أيام الأسبوع، كي تصمد عبر حدود الأسابيع. والإغلاق مُدخل واحد مؤرَّخ في ملف بيانات: يعطّل تلك الأيام في التقويم، ويضع تنبيهًا في كل صفحة وفي رسالة التأكيد، ويجعل دالة الدفع ترفض تلك التواريخ، وينشر ساعات عمل استثنائية في البيانات المنظَّمة. وأي نطاق مكتوب بصيغة خاطئة يُفشل عملية البناء.

تشغيله

أشغّله منذ إطلاقه، عبر زيادة في الأسعار ونكهات موسمية وإغلاق صيفي لمدة أسبوعين، وقد صار درسان جزءًا من طريقة العمل. تُحفظ السلال في المتصفح مع لقطة من الأسعار، لذا فإن أي زيادة في الأسعار ترفع أيضًا رقم إصدار مخطط البيانات (schema) فتُفرَّغ السلال المحفوظة، بدل عرض سعر وتحصيل سعر آخر. وبعد أن فشلت ثلاث عمليات نشر بصمت، بينما ظلت Netlify تقدّم البناء السابق، لأن الحزم المثبّتة لديّ كانت قد سبقت ملف القفل (lockfile) واستخدمتُ نوعًا (type) لا تحتويه النسخة المحدَّدة فيه، صارت التغييرات على مستوى الأنواع تبدأ الآن من تثبيت نظيف. ويجب أن ينتهي فحص البناء دون أي أخطاء أو تحذيرات أو تلميحات.