Sendy
منصة عمليات توصيل وتجارة إلكترونية متعددة المستأجرين
- ASP.NET Core .NET 8
- PostgreSQL
- EF Core
- SignalR
- Hangfire
- React 19
- TypeScript
- Claude & OpenAI
- MCP
- Cloudflare
- معمارية طبقية نظيفة على نطاق واسع — 163 متحكمًا، و90 كيان نطاق، و55 ترحيلًا، مدعومة بـ676 اختبار xUnit.
- كل قدرة في المتجر تُطلَق على واجهتين: JWT للوحات التحكم، وواجهة موازية بمفاتيح API للأنظمة الخارجية، محميّة بـ231 صلاحية عبر 679 فحصًا عند نقاط النهاية مع تحديد معدّل الطلبات لكل مفتاح.
- إطار مزوّدين قابل للتوسيع يدمج ثلاث شركات توصيل (Al-Waseet وBoxy وHi-Express) وخمس بوابات دفع (QiCard وAsiaPay وZainCash وWayl وSwiftPayIQ) مع webhooks مُتحقَّق منها بـ HMAC ومزامنة تلقائية للطلبات عبر معترضات EF Core.
- تتبّع لحظي للطلبات ومحادثة مع العملاء عبر ثلاثة مراكز SignalR، وروابط تتبّع عامة مؤمّنة برموز، ومتاجر على نطاقات فرعية ونطاقات مخصّصة موثّقة عبر Cloudflare.
- مراسلة متعددة القنوات — WhatsApp وInstagram وMessenger ومحادثة الموقع تصبّ جميعها في نموذج محادثة واحد يردّ عليه وكيل الذكاء الاصطناعي الذي يختاره المتجر (Anthropic أو OpenAI)، مع قياس الاستهلاك لكل متجر لأغراض الفوترة.
- خادم MCP مؤمَّن بـ OAuth مع تسجيل ديناميكي للعملاء ورموز محدودة النطاق، يتيح عمليات المتجر لوكلاء الذكاء الاصطناعي.
- عمليات تجزئة كاملة تتجاوز التوصيل: المخزون، وأوامر الشراء، والمورّدون والمخازن، ونقطة بيع مع طباعة حرارية للملصقات والإيصالات، والتحقق من الهوية (KYC)، وتذاكر الدعم، والتقييمات، وتتبّع المصروفات.
- مسارات مالية متكاملة — المحافظ، والعمولات، وتسليم النقد، والتسويات، والفواتير، وفوترة الاشتراكات.
- خمس واجهات أمامية بـ React 19 وTypeScript — لوحة الإدارة، وتطبيق السائق، والصفحة التعريفية والمتجر، والتطبيق المصغّر للعملاء، وموقع توثيق المطوّرين بـ Next.js — جميعها عربية/إنجليزية.
المعمارية والقرارات
القيد
ثلاث شركات توصيل وخمس بوابات دفع، لكل منها عقدها الخاص ونموذج بيانات اعتمادها ومفرداتها لحالات الطلب — وستة أنواع من المستخدمين (الإدارة، والمتجر، والفرع، وشركة التوصيل، ومنصة التجارة الإلكترونية، والسائق) يرى كلٌّ منهم الطلب نفسه بشكل مختلف. وفوق ذلك، يجب أن تكون كل قدرة في المتجر متاحة مرتين: مرة للوحات التحكم لدينا، ومرة لنظام ERP أو متجر يملكه التاجر أصلًا.
المقاربة
واجهة مزوّد واحدة ببيانات اعتماد لكل متجر، فتصبح إضافة شركة توصيل
رابعة مجرّد محوّل جديد لا تفرّعًا داخل كود مشترك. والتخويل قائم على
الصلاحيات عند نقطة النهاية لا على الأدوار عند المتحكم — 231 صلاحية
مُسمّاة تُفحص في 679 موضعًا — فلا يستلزم نوع مستخدم جديد إعادة تدقيق
كل إجراء. وواجهة التكامل مجموعة ثانية حقيقية من المتحكمات فوق الخدمات
نفسها، لا نقاط النهاية ذاتها بحارس أضعف، حتى لا يرث مفتاح API صلاحيات
لوحة التحكم عن غير قصد. أما تسجيل التدقيق فمعلّق على معترض
SaveChanges في EF Core بدل كل موضع نداء — فلا يمكن إضافة
عملية كتابة تنسى أن تسجّل نفسها.
المفاضلة
واجهتان فوق طبقة خدمات واحدة تعنيان زيادة تقارب الثلث في عدد المتحكمات الواجب إبقاؤها متوافقة، ولا تُعتبر القدرة مُنجَزة حتى تكتمل الواجهتان. وهذه كلفة حقيقية ومتكرّرة. لكنها تشتري القدرة على تغيير لوحات التحكم دون كسر تكامل أي تاجر، وهو ما يستحق أكثر من كلفته على منصة تبني عليها أعمال أخرى. ويقوم التدقيق عبر المعترضات بمفاضلة من النوع نفسه: مسار الكتابة لم يعد ظاهرًا عند موضع النداء، لكن التغطية مضمونة بدل أن تكون رهن التذكّر.
النتيجة
163 متحكمًا فوق 90 كيانًا و55 ترحيلًا، مدعومة بـ676 اختبار xUnit، تعمل في الإنتاج مع ثمانية تكاملات مع مزوّدين، ومتاجر على نطاقات مخصّصة، وتتبّع لحظي، ومراسلة متعددة القنوات، وخمس واجهات أمامية بـ React.