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

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

صفحة قائمة الضيوف والفرز — نظام إدارة الأعراس والمناسبات ودعوات QR | Next.js وPrisma | أديب الصلوي
وقت الدراسة
12 دقيقة

المسار: تطوير نظام إدارة الأعراس ودعوات QR الوحدة: صفحات الدعوة والواجهة الأمامية

مدخل إلى الدرس: صفحة قائمة الضيوف والفرز

صفحة قائمة الضيوف والفرز — نظام إدارة الأعراس والمناسبات ودعوات QR | Next.js وPrisma | أديب الصلوي

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

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

  • عرض قائمة ضيوف مناسبة مع حالات ردّهم وحضورهم.
  • إضافة فلاتر بحث و (الكل/قبول/اعتذار/لم يرد).
  • إدراج زر 'توليد QR' لكل ضيف لاحقاً.

مثال

// app/admin/guests/page.tsx (Server Component يقرأ query)
import { prisma } from "@/lib/prisma";

export default async function GuestListPage({
  searchParams,
}: { searchParams: Promise<{ q?: string; status?: string }> }) {
  const { q, status } = await searchParams;

  const guests = await prisma.guest.findMany({
    where: {
      eventId: "EVENT_ID_HERE",
      ...(q ? { name: { contains: q, mode: "insensitive" } } : {}),
      ...(status === "accepted"
        ? { rsvp: { is: { status: "accepted" } } }
        : status === "declined"
          ? { rsvp: { is: { status: "declined" } } }
          : {}),
    },
    include: { rsvp: true, checkIns: true },
    orderBy: { createdAt: "asc" },
  });

  const count = {
    all: guests.length,
    checked: guests.filter((g) => g.checkIns.length > 0).length,
  };

  const simple = guests.map((g) => ({
    id: g.id, name: g.name, tableNo: g.tableNo, category: g.category,
    rsvp: g.rsvp?.status ?? null,
    checkedIn: g.checkIns.length > 0,
  }));

  return /* JSX يمرر simple فقط لمكوّن جدول عميل */ null;
}

المخطط: تدفق فرز جدول الضيوف

flowchart TD
    A["searchParams (q, status)"] --> F["findMany with where
contains name
rsvp is: status"] F --> FO["format → مصفوفات بسيطة
بلا hash/secret"] FO --> C["مكوّن جدول client
يعرض ويعيد الفلترة"]

تلميح أداء

استعمال contains + mode insensitive بحث نصي بسيط؛ للمقاييس الضخمة نوكل فهارس PG-Text أو بحثا خارجياً. في دورة بحجمنا يكفي contains مع فهرس eventId.

تمرين تطبيقي: أضف عداد «المقبولون» و«الحاضرون» في رأس الجدول، ثم نفّذ البحث عن اسم بحرفين وراقب الاستعلام في الصفحة.

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

  • تمرير عنصر guest كاملا للمكوّن client فيتسرّب tokenHash.
  • استخدام مضاعفة where بلا نعم تجريبي becomes بعدد فلاتر.
  • إجراء فلترة في JS بدل قاعدة البيانات يبطئ القائمة الكبيرة.

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

contains
عامل LIKE في Prisma للبحث الفرعي في النص.
mode insensitive
جعل البحث لا يميز كبيس/صبيس.
حقل متسلسل
تمثيل صف القائمة بصافي حقول جاهز للعرض.

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

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

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

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

دروس نصية

#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

عرض الدروس كاملة تحقق من صفحة تعلم الدورة
درس نصي 4/36
أنت تشاهد
صفحة قائمة الضيوف والفرز