دورة تطوير نظام إدارة الأعراس والمناسبات ودعوات QR عمليًا

نموذج المناسبة Event بالعلاقات

نموذج المناسبة Event بالعلاقات — نظام إدارة الأعراس والمناسبات ودعوات QR | Next.js وPrisma | أديب الصلوي
وقت الدراسة
13 دقيقة

المسار: تطوير نظام إدارة الأعراس ودعوات QR الوحدة: نمذجة قاعدة البيانات بـ Prisma

مدخل إلى الدرس: نموذج المناسبة Event بالعلاقات

نموذج المناسبة Event بالعلاقات — نظام إدارة الأعراس والمناسبات ودعوات QR | Next.js وPrisma | أديب الصلوي

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

أهداف هذا الدرس

  • توسيع Event بعلاقات guests و rsvps و checkIns.
  • ربط النماذج ببعضها عبر @relation.
  • استخدام onDelete للتحكم في حذف السجلات الفرعية.

مثال

model Event {
  id        String   @id @default(cuid())
  name      String
  date      DateTime
  location  String
  slug      String   @unique
  coverUrl  String?
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  guests    Guest[]
  rsvps     Rsvp[]
  checkIns  CheckIn[]
}

المخطط: علاقة Event مع جيرانها في قاعدة البيانات

flowchart TD
    EV["Event
id (PK) · name · date
location · slug · coverUrl"] EV -->|"1 ── *"| GU["guests — guests.event_id (FK)"] EV -->|"1 ── *"| RS["rsvps — rsvps.event_id (FK)"] EV -->|"1 ── *"| CI["check_ins — check_ins.event_id (FK)"]

لماذا نحفظ العلاقات في الاتجاهين؟

في Prisma تعريف الحقل في الطرف الفرعي كافٍ فنياً، لكن كتابة المصفوفات في الطرف الأب تعطي إمكانية الجلب (include مع الضيوف) وتوضيح العلاقة في المخطط نفسه.

سياسة الحذف

قاعدة الاختيار: عند الحذف ذهب ترك onDelete: Cascade؛ فحذف مناسبة لا يترك ضيوفاً يتيمين، لكن في حال أردت الاحتفاظ بسجل إحصائيات اختيار Restrict/SET_DEFAULT.

نسبة علاقة Event→Guest هي 1:N قوية (الأبناء بلا ملك). تحديده في schema يمنع وجود ضيف خارج أي مناسبة.

تمرين تطبيقي: أضف إلى Event حقلاً startTime من نوع DateTime عبر schema، ثم انقل بياناته بحقل datetime locale من نوع النص. الحقل يجب أن يكون اختيارياً حتى لا يعطل المناسبات القديمة.

أخطاء شائعة يجب تفاديها

  • حذف على الأصل بلا استراتيجية يترك سجلات يتيمة.
  • نسيان updateAt على النموذج الأب فلا يعكس تغيير الأبناء.
  • استخدام ونصفية: تعريف علاقة بجهة واحدة فقط يمنع include.

معجم مصطلحات الدرس

@relation
يُعرّف العلاقة وربما أسماء الأعمدة الخارجية.
onDelete: Cascade
حذف الأبناء عند حذف الأب تلقائياً.
غمر hydration
جلب الأبناء مع الأب عبر include في قراءة واحدة.

مراجعة وتمرين تثبيت المهارة

اختبار سريع: اشرح بعبارتك معنى «نموذج المناسبة Event بالعلاقات»، ثم بيّن أين ستستخدمه داخل نظام تسجيل حضور دعوات مناسبة عبر رمز QR، وما الخطأ الذي يجب اختباره قبل الاعتماد على الحل.

تحدٍّ إضافي: غيّر شرطًا واحدًا في التطبيق، وتوقع النتيجة، ثم نفّذ الاختبار وفسّر الاختلاف.

الدرس التالي: نموذج المدعو Guest مع الرمز الموقّع. من الأفضل إنهاء التجربة الحالية قبل متابعة الدرس التالي.

دروس نصية

#1

نظرة عامة على الدورة والمخرجات

#2

مقدمة إلى Next.js وأسباب اختياره

#3

أساسيات schema.prisma والنماذج

#4

مقدمة Route Handlers وبنية الاستجابة

#5

فهم Server Components والجلب الآمن

#6

تصميم الرمز Secured والتوقيع HMAC

#7

بناء الإنتاج وتجنّب أخطاء الحالة المربكة

#8

تحليل المتطلبات وتحديد الكيانات

#9

إنشاء مشروع Next.js وتجربته

#10

نموذج المناسبة Event بالعلاقات

#11

واجهة إنشاء المناسبة POST /api/events

#12

تصميم صفحة الدعوة الإلكترونية

#13

توليد صورة QR من قاعدة الدعوة

#14

نشر المشروع على Vercel

#15

تصميم قاعدة البيانات والعلاقات

#16

تجريب PostgreSQL محلياً وإنشاء قاعدة الداتا

#17

نموذج المدعو Guest مع الرمز الموقّع

#18

واجهات الضيوف الإضافة والقائمة

#19

نموذج الرد RSVP التفاعلي

#20

تجربة المسح في بوابة الحفل

#21

قاعدة بيانات إنتاج مُدارة وأمانها

#22

تدفق الدعوة وقراءة QR من التوليد إلى الحضور

#23

تثبيت Prisma والاتصال بالقاعدة

#24

نموذج الرد Rsvp ومنع التكرار

#25

واجهة تسجيل الحضور POST /api/checkin

#26

صفحة قائمة الضيوف والفرز

#27

واجهة تتفهم حالة الحضور والحصر

#28

إدارة المتغيرات السرية بيئة وواجهة

#29

سيناريو المشروع وقواعد العمل

#30

بنية مجلدات المشروع ومسارات الصفحات

#31

الاستعلام والجلب مع العلاقات

#32

التحقق من المدخلات ومعالجة الأخطاء

#33

لوحة الإحصائيات الحية

#34

تأمين الروابط والهجمات الشائعة

#35

قائمة الفحص النهائي قبل الإطلاق

#36

الترحيلات migrations والبذور seed

عرض الدروس كاملة تحقق من صفحة تعلم الدورة
درس نصي 2/36
أنت تشاهد
نموذج المناسبة Event بالعلاقات