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

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

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

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

مدخل إلى الدرس: نموذج المدعو Guest مع الرمز الموقّع

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

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

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

  • تصميم جدول الضيوف بفهرس وقيد token_hash الفريد.
  • ضبط العلاقة الضعيفة PlayerEvent من جهة ال Guest فقط.
  • فهم لماذا نفحص الحقول content الجسمي للحضور في نموذج أبعد (CheckIn).

مثال

model Guest {
  id        String   @id @default(cuid())
  eventId   String
  name      String
  phone     String?
  category  String   @default("general")
  tableNo   String?
  tokenHash String   @unique
  qrPath    String?
  createdAt DateTime @default(now())

  event     Event    @relation(fields: [eventId], references: [id], onDelete: Cascade)
  rsvp      Rsvp?
  checkIns  CheckIn[]

  @@index([eventId])
}

المخطط: آلية تخزين الـ token (رمز سريّ) عند الضيف

flowchart LR
    A["إنشاء ضيف"] -->|"token = randomBytes(24) base64url (لحظية)"| T["لا نُخزّن token"]
    A -->|"tokenHash = HMAC(SECRET, token)"| H["نخزّن الهاش فقط
عمود UNIQUE"] A -->|"signature = HMAC(SECRET, guest:token)"| S["الرابط الموقّع"]

لماذا الحقلان مختلفان؟

  • tokenHash — هوية نسخة العرض؛ يُخزَّن في قاعدة ولا يُرسل للمتصفح إلا عبر الرابط حيث يكون التوقيع مقيداً.
  • qrPath — مسار تخزين صورة QR المتولدة على القرص (اختياري).

الأمان

لا تقم بتخزين الـ token الصريح. استعمال HMAC-SHA256 في التوقيع والحفظ في hash معاً يجعل السر والرمز يختفيان عن أي نسخة من الجدول مهما تسربت.

تمرين تطبيقي: أعد تسمية أنواع الهواتف إلى (رقم خلية) وتأكد أن Schema.prisma يحفظ category يُعدّل stat سواء 'general' | 'vip' | 'sponsor'.

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

  • وضع token صريح في عمود يدخل في أي dump — كشف تام.
  • عدم وجود فهرس على eventId فيبطئ تحميل أحداث ضخمة.
  • جعل tableNo إجباري ويمنع إضافة ضيف بلا رقم طاولة.

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

base64url
ترميز بلا أحرف مهددة في الروابط (+/).
HMAC
دالة توقيع تعتمد سراً ورسالة (guest:token).
كاب أحداث
إضافة فهرس لسيناريو تحميل مناسبة مع ضيوفها.

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

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

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

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

دروس نصية

#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

عرض الدروس كاملة تحقق من صفحة تعلم الدورة
درس نصي 3/36
أنت تشاهد
نموذج المدعو Guest مع الرمز الموقّع