نموذج المدعو Guest مع الرمز الموقّع
المسار: تطوير نظام إدارة الأعراس ودعوات 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 ومنع التكرار. من الأفضل إنهاء التجربة الحالية قبل متابعة الدرس التالي.