مرجع الجداول
هذه الصفحة مولّدة من المخطط الفعلي للقاعدة (information_schema وpg_constraint). القواعد المهنية — القيم المسموح بها، ونوافذ التواريخ، وغياب الإشارة الذاتية — هي قيود CHECK: ترفضها القاعدة حتى لو أخطأ الكود. الطوابع الزمنية بمنطقة زمنية (timestamptz)، والمبالغ بالسنتيم، والإعدادات بصيغة jsonb.
themes — المجالات
Section titled “themes — المجالات”المستوى الأول من التصنيف — « المجال الرئيسي ». ينتمي المنتج وجوبًا إلى مجال.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
title_ar |
نص | لا | — | العنوان بالعربية. |
slug |
نص | لا | — | معرّف URL، فريد. |
subtitle_ar |
نص | نعم | — | العنوان الفرعي بالعربية. |
description_ar |
نص طويل | نعم | — | الوصف بالعربية. |
color |
نص | نعم | — | علامة بصرية. |
position |
عدد صحيح | لا | 0 | ترتيب العرض. |
active |
منطقي | لا | true | يُخفى من الواجهة العامة إن كان خاطئًا. |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
- فريد:
slug
sub_themes — المواضيع الفرعية
Section titled “sub_themes — المواضيع الفرعية”المستوى الثاني من التصنيف — خزّان البيع المتقاطع. اختياري للمسار أو المستوى.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
theme_id |
عدد صحيح | لا | — | المجال (إلزامي). |
title_ar |
نص | لا | — | العنوان بالعربية. |
slug |
نص | لا | — | معرّف URL، فريد. |
description_ar |
نص طويل | نعم | — | الوصف بالعربية. |
position |
عدد صحيح | لا | 0 | ترتيب العرض. |
active |
منطقي | لا | true | يُخفى من الواجهة العامة إن كان خاطئًا. |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
- فريد:
slug theme_id→themes.id(حذف متسلسل)
products — المنتجات
Section titled “products — المنتجات”كل ما يُباع: مقال، كتاب صوتي، برنامج، مسار، حزمة، مستوى. المنتجات المركّبة ليست جداول مستقلة.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
title_ar |
نص | لا | — | العنوان بالعربية. |
slug |
نص | لا | — | معرّف URL، فريد. |
subtitle_ar |
نص | نعم | — | العنوان الفرعي بالعربية. |
description_ar |
نص طويل | نعم | — | الوصف بالعربية. |
author_ar |
نص | نعم | — | المؤلف بالعربية. |
cover_path |
نص | نعم | — | الصورة (مسار خاص). |
theme_id |
عدد صحيح | لا | — | المجال (إلزامي). |
sub_theme_id |
عدد صحيح | نعم | — | الموضوع الفرعي (اختياري). |
position |
عدد صحيح | لا | 0 | ترتيب العرض. |
kind |
نص | لا | — | النوع على سلّم ترقية العرض. |
is_offer |
منطقي | لا | true | قابل للبيع بشكل منفصل. |
is_featured |
منطقي | لا | false | مميّز في الصفحة الرئيسية. |
price_base |
عدد صحيح | نعم | — | السعر الأساسي، بالسنتيم. |
price_promo |
عدد صحيح | نعم | — | السعر الترويجي، بالسنتيم. |
promo_starts_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | بداية النافذة الترويجية. |
promo_ends_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | نهاية النافذة الترويجية. |
currency |
نص | لا | ‘MAD’ | العملة (ISO 4217). |
status |
نص | لا | ‘draft’ | دورة الحياة. |
published_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | تاريخ النشر. |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
kind∈ {article,collection,livre,programme,parcours,pack_specialise,pack_global,presentiel,podcast}CHECK ((price_promo IS NULL) OR (price_base IS NULL) OR (price_promo <= price_base))CHECK ((promo_starts_at IS NULL) OR (promo_ends_at IS NULL) OR (promo_ends_at > promo_starts_at))- فريد:
slug status∈ {draft,published,archived}sub_theme_id→sub_themes.id(يُفرَّغ عند الحذف)theme_id→themes.id
product_compose — التركيب
Section titled “product_compose — التركيب”شجرة انعكاسية: منتج يحتوي منتجات أخرى، بترتيب معيّن. يمكن أن يكون للمنتج الواحد عدة أصول.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
parent_product_id |
عدد صحيح | لا | — | المنتج الحاوي. |
child_product_id |
عدد صحيح | لا | — | المنتج المحتوى. |
position |
عدد صحيح | لا | 0 | ترتيب العرض. |
القيود
child_product_id→products.id(حذف متسلسل)parent_product_id≠child_product_id— لا إشارة ذاتية- فريد:
parent_product_id,child_product_id parent_product_id→products.id(حذف متسلسل)
product_contents — المحتويات
Section titled “product_contents — المحتويات”المقاطع القابلة للاستهلاك في منتج — لا تُباع منفصلة أبدًا، ولذلك بلا سعر.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
product_id |
عدد صحيح | لا | — | المنتج المعني. |
title_ar |
نص | لا | — | العنوان بالعربية. |
type |
نص | لا | — | نوع الوسيط. |
position |
عدد صحيح | لا | 0 | ترتيب العرض. |
duration_s |
عدد صحيح | نعم | — | المدة بالثواني. |
storage_key |
نص | نعم | — | مفتاح الملف على التخزين الخاص — لا يُكشف أبدًا. |
preview |
منطقي | لا | false | مقتطف مجاني. |
status |
نص | لا | ‘draft’ | دورة الحياة. |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
product_id→products.id(حذف متسلسل)status∈ {draft,published,archived}type∈ {audio,article,article_audio,video}
product_prerequisites — المتطلبات السابقة
Section titled “product_prerequisites — المتطلبات السابقة”منتج يتطلب منتجًا آخر، وفق قاعدة. علاقة مستقلة عن التركيب: التطلّب ليس احتواءً.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
product_id |
عدد صحيح | لا | — | المنتج المعني. |
required_product_id |
عدد صحيح | لا | — | المنتج المطلوب. |
rule |
نص | لا | ‘certified’ | ما يستوفي المتطلب السابق: مقتنى، مكتمل، مُصادَق عليه بشهادة. |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
product_id≠required_product_id— لا إشارة ذاتيةproduct_id→products.id(حذف متسلسل)- فريد:
product_id,required_product_id required_product_id→products.id(حذف متسلسل)rule∈ {owned,completed,certified}
users — الحسابات
Section titled “users — الحسابات”المتعلمون والمديرون في جدول واحد. المعرّف هو البريد الإلكتروني أو الهاتف.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
name |
نص | لا | — | الاسم. |
email |
نص | نعم | — | عنوان البريد الإلكتروني، فريد. |
phone |
نص | نعم | — | الهاتف بصيغة E.164، فريد. |
password |
نص | نعم | — | كلمة المرور المجزّأة (hash) — للمديرين فقط. |
role |
نص | لا | ‘learner’ | متعلم أو مدير. |
status |
نص | لا | ‘invited’ | دورة الحياة. |
locale |
نص | لا | ‘ar’ | لغة الواجهة. |
verified_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | أول دخول ناجح. |
last_login_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر دخول. |
invited_by |
عدد صحيح | نعم | — | المدير الذي دعا الحساب. |
remember_token |
نص | نعم | — | جلسة دائمة (إطار عمل Laravel). |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
- فريد:
email CHECK ((email IS NOT NULL) OR (phone IS NOT NULL))invited_by→users.id(يُفرَّغ عند الحذف)- فريد:
phone role∈ {learner,admin}status∈ {invited,active,disabled}
devices — الأجهزة
Section titled “devices — الأجهزة”الأجهزة المتصلة بحساب؛ رمز وصول واحد لكل جهاز.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
user_id |
عدد صحيح | لا | — | الحساب المعني. |
device_key |
نص | لا | — | معرّف ثابت يوفّره التطبيق. |
platform |
نص | لا | — | ios أو android أو web. |
name |
نص | نعم | — | الاسم. |
app_version |
نص | نعم | — | إصدار التطبيق. |
push_token |
نص | نعم | — | رمز الإشعارات (الدفعة L10). |
token_id |
عدد صحيح | نعم | — | رمز وصول API الحالي. |
last_seen_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر طلب مرصود. |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
platform∈ {ios,android,web}- فريد:
user_id,device_key user_id→users.id(حذف متسلسل)
otp_challenges — رموز الدخول
Section titled “otp_challenges — رموز الدخول”رمز لمرة واحدة قيد الانتظار. لا يُخزَّن الرمز أبدًا بشكل صريح.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
identifier |
نص | لا | — | بريد إلكتروني أو هاتف بصيغة موحّدة. |
channel |
نص | لا | — | قناة إرسال الرمز. |
code_hash |
نص | لا | — | بصمة HMAC للرمز. |
expires_at |
تاريخ ووقت (بمنطقة زمنية) | لا | — | موعد الانتهاء. |
attempts |
عدد صحيح | لا | ‘0’ | المحاولات المستهلكة. |
consumed_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | مستهلَك (استُخدم أو أُبطل). |
ip_address |
نص | نعم | — | عنوان الطلب. |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
channel∈ {mail,sms,whatsapp,log}
personal_access_tokens — رموز وصول API
Section titled “personal_access_tokens — رموز وصول API”رموز Sanctum التي يحملها تطبيق الهاتف (جدول إطار عمل Laravel).
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
tokenable_type |
نص | لا | — | نوع الحامل (إطار العمل). |
tokenable_id |
عدد صحيح | لا | — | حامل رمز الوصول. |
name |
نص طويل | لا | — | الاسم. |
token |
نص | لا | — | بصمة رمز الوصول. |
abilities |
نص طويل | نعم | — | الصلاحيات. |
last_used_at |
تاريخ ووقت | نعم | — | آخر استخدام. |
expires_at |
تاريخ ووقت | نعم | — | موعد الانتهاء. |
created_at |
تاريخ ووقت | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت | نعم | — | آخر تعديل. |
القيود
- فريد:
token
access_rights — حقوق الوصول
Section titled “access_rights — حقوق الوصول”« DROIT_ACCES » في ملف الهندسة المعمارية، على مستوى المنتج، مع مصدره.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
user_id |
عدد صحيح | لا | — | الحساب المعني. |
product_id |
عدد صحيح | لا | — | المنتج المعني. |
status |
نص | لا | ‘active’ | دورة الحياة. |
origin |
نص | لا | — | من أين يأتي الحق: شراء، حزمة، مسار، اشتراك، عرض ترويجي، هدية، مدير، ترحيل، شريك. |
source_ref |
نص | نعم | — | مرجع المصدر (طلب، مذكرة منح…). |
granted_by |
عدد صحيح | نعم | — | المدير الذي منح الحق. |
granted_at |
تاريخ ووقت (بمنطقة زمنية) | لا | — | تاريخ المنح. |
expires_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | موعد الانتهاء. |
revoked_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | تاريخ الإلغاء. |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
granted_by→users.id(يُفرَّغ عند الحذف)origin∈ {purchase,pack,pathway,subscription,promotion,gift,admin,migration,partner}product_id→products.id(حذف متسلسل)status∈ {active,revoked,expired}user_id→users.id(حذف متسلسل)
settings — الإعدادات
Section titled “settings — الإعدادات”إعدادات مهنية قابلة للتعديل دون نشر جديد، منمّطة، محفوظة في الذاكرة المؤقتة.
| العمود | النوع | فارغ | الافتراضي | الدور |
|---|---|---|---|---|
id |
عدد صحيح | لا | تسلسل | معرّف تقني. |
group |
نص | لا | — | تبويب شاشة الإعدادات. |
key |
نص | لا | — | المفتاح الذي يقرؤه الكود، فريد. |
type |
نص | لا | — | نوع الوسيط. |
value |
jsonb | نعم | — | قيمة منمّطة (jsonb). |
options |
jsonb | نعم | — | الخيارات الممكنة لقائمة. |
label |
نص | لا | — | التسمية المعروضة (مفتاح ترجمة). |
help |
نص | نعم | — | نص المساعدة المعروض (مفتاح ترجمة). |
unit |
نص | نعم | — | الوحدة المعروضة. |
position |
عدد صحيح | لا | 0 | ترتيب العرض. |
created_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | الإنشاء. |
updated_at |
تاريخ ووقت (بمنطقة زمنية) | نعم | — | آخر تعديل. |
القيود
- فريد:
key type∈ {string,text,integer,boolean,money,select}