الاصطلاحات

هذه القواعد تسري في كل مكان، ولا يرفع أي منها خطأً حين تخالفه — بل ينتج بيانات معقولة الشكل وخاطئة. تستحق عشر دقائق الآن.

المبلغ عدد صحيح

كل قيمة مالية عدد صحيح بالوحدات الصغرى للعملة. فالمجموع 185000 بالليرة السورية يعني 1,850.00 لا مئة وخمسة وثمانين ألفاً. لا تُحوّل المبالغ إلى أعداد عشرية أبداً: اقسم على معامل الوحدة الصغرى لحظة العرض فقط، وأجرِ كل العمليات الحسابية على الأعداد الصحيحة.

شرائح أسعار الجملة وغيرها من حقول العملة الأساسية بالوحدات الصغرى للدولار، وتُحوَّل للمشتري عند العرض. أرسل السعر الأساسي؛ فالتحويل قبل الإرسال ينتج رقماً ينحرف مع سعر الصرف.

التواريخ بصيغة ISO 8601 وبتوقيت UTC

كل طابع زمني بصيغة ISO 8601 وينتهي بحرف Z. حوّله إلى التوقيت المحلي للتاجر عند العرض إن شئت، لكن خزّنه وقارنه بتوقيت UTC — ففارق التوقيت في سوريا ليس ثابتاً طوال العام، و«طلبات اليوم» المحسوبة بالتوقيت المحلي ستضم أو تسقط ساعةً كاملة بصمت.

المعرّفات مبهمة

تعامل مع كل معرّف كنص مبهم. صحيح أنها تبدو رقمية اليوم، لكن لا تحوّلها إلى أعداد، ولا تفترض أنها مرتّبة، ولا تولّد واحداً بنفسك. وحيث يوجد للكيان مفتاح مفهوم للبشر أيضاً — رمز الطلب، أو رمز مجموعة الزبائن، أو معرّف المنتج النصي — فهو ما تعرضه للناس وتطابق عليه في نظامك.

القوائم تأخذ وسيط options

تتشارك استعلامات القوائم شكلاً واحداً: وسيط `options` يضم `take` و`skip` و`sort` و`filter`، ويعيد `items` و`totalItems`. تصفَّح بـ take و skip، واقرأ totalItems لتعرف متى تتوقف بدل أن تطلب حتى تصلك صفحة فارغة.

graphql
query {
  products(options: {
    take: 50,
    skip: 100,
    sort: { updatedAt: DESC },
    filter: { enabled: { eq: true } }
  }) {
    totalItems            # page until skip + take >= totalItems
    items { id name slug }
  }
}
اطلب حجم صفحة معقولاً. فهناك حد استخدام لكل مفتاح، ومئة صفحة صغيرة تكلّف مئة طلب من حصتك حيث تكلّف عشر صفحات أكبر عشرة.

الزبائن يخصون متجراً واحداً

هوية المشتري مرتبطة بالمتجر. فالشخص نفسه إذا تسوّق من متجرين على eMatjarak كان له سجلّا زبون منفصلان، والبريد الإلكتروني فريد داخل المتجر الواحد فقط. فإن تكاملت مع عدة تجار، فاجعل مفتاح سجلاتك المتجر مع الزبون — لا البريد وحده.

كل شيء مقيّد بمتجر واحد

رمز المتجر في طلبك هو ما يحدد ما هو موجود. ومعرّف يخص تاجراً آخر لا يعيد خطأ صلاحيات — بل ببساطة لا يوجد، لأنه من منظور مفتاحك غير موجود. يفرض الخادم هذا على كل طلب، فلا حاجة لأن ترشّح النتائج احترازياً.