نظرة عامة
Zoya Outfits منصة تجارة إلكترونية صممتها وبنيتها بالكامل لمتجر أزياء في السعودية. تدير كتالوج المنتجات وإتمام الشراء عبر OTP بما يلائم تفضيلات تدفق الدفع في المنطقة، وتتبع الطلبات ولوحة إدارة متكاملة للعمليات الخلفية.
الخصائص الرئيسية
نظام خصائص المنتجات
احتاجت Zoya إلى نظام خصائص مرن بدل الاقتصار على متغيرات المقاس واللون. يمكن للمنتجات امتلاك خصائص مخصصة مثل الخامة والقَصّة والمنشأ، تختلف باختلاف الفئة.
model Attribute {
id String @id @default(cuid())
name String
type AttributeType
categoryId String?
values AttributeValue[]
}
model ProductAttribute {
productId String
attributeId String
valueId String
}
إتمام الشراء عبر OTP
تعتمد مسارات الشراء في السوق السعودي كثيرًا على رقم الهاتف ورمز التحقق بدل البريد الإلكتروني. نفذت نظام OTP عديم الحالة باستخدام مدة صلاحية Redis:
- يُدخل العميل رقم الهاتف.
- يُنشأ الرمز ويُخزن في Redis لمدة خمس دقائق.
- تُرسل رسالة SMS عبر واجهة Taqnyat.
- يُصدر رمز جلسة بعد التحقق.
تخزين الوسائط في Cloudflare R2
تُخزن صور المنتجات في Cloudflare R2 مع روابط موقعة للوصول الخاص. تتولى عملية خلفية تحسين الصور عند رفعها باستخدام Sharp.
// Signed URL generation (expires in 1 hour)
const url = await r2.sign(key, { expiresIn: 3600 });
القرارات المعمارية
| القرار | السبب |
|---|---|
| Next.js App Router | تقليل JavaScript في المتصفح باستخدام مكونات الخادم |
| Prisma + PostgreSQL | نموذج منتجات علائقي معقد |
| BetterAuth | إدارة جلسات مرنة وتوسعة سهلة لدعم OTP |
| Cloudflare R2 | عدم فرض رسوم خروج بيانات والتكامل مع شبكة Cloudflare |
| Server Actions | تجنب كشف مفاتيح API للمتصفح |
الدروس المستفادة
فرض بناء منصة إنتاج من الصفر التفكير المبكر في نمذجة البيانات. احتاج نظام الخصائص خصوصًا إلى عدة مراجعات للمخطط حتى أصبح مرنًا بما يكفي للكتالوج دون تعقيد صيانته.
أوضح مسار OTP درسًا مهمًا: أنماط الدفع والمصادقة المحلية مؤثرة. لا تتوافق قوالب التجارة العامة المصممة للأسواق الغربية دائمًا مع سلوك المشترين في الخليج.