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

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

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

المسار: تطوير نظام إدارة الأعراس ودعوات QR الوحدة: توليد وقراءة رموز QR

مدخل إلى الدرس: توليد صورة QR من قاعدة الدعوة

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

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

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

  • تثبيت مكتبة qrcode واستخدامها بأدق الخيارات.
  • إنتاج صورة QR تحمل الرابط الموقّع كاملاً.
  • دمج التوليد في مسارات API مع قيم errorCorrection وmargin.

مثال

npm install qrcode
npm install --save-dev @types/qrcode

مثال

// app/api/guests/[id]/qr/route.ts
import { QRCodeToDataURLOptions } from "qrcode";
import QRCode from "qrcode";
import { prisma } from "@/lib/prisma";
import { signatureOf } from "@/lib/tsign";

export async function GET(
  req: Request,
  ctx: { params: Promise<{ id: string }> }
) {
  const { id } = await ctx.params;
  const guest = await prisma.guest.findUnique({ where: { id } });
  if (!guest || !guest.tokenHash) {
    return new Response(JSON.stringify({ ok: false, error: "لا ضيف" }), { status: 404 });
  }

  // ملاحظة: الرمز الصريح لا يُخزَّن في قاعدة البيانات،
  // بل نمرّره إلى هذه الواجهة من مكوّن الإنشاء لحظة ولادته فقط.
  // أما هنا فنحتفظ للمستقبل: قراءة رابطٍ من مخزن آمن أو من prop.

  const opts: QRCodeToDataURLOptions = {
    errorCorrectionLevel: "M",
    margin: 2,
    width: 384,
  };

  return NextResponse.json({ ok: true, qr: url, url });
}

المخطط: مجرى إنشاء QR من بيانات الضيف

flowchart TD
    G["ضيف (id, tokenHash)"] --> L["الرابط: /i/{token}?sig=..."]
    L --> QR["QRCode.toDataURL(url)
errorCorrectionLevel: M
margin 2 · width 384"] QR --> S["تحفظ dataURL/path في qrPath
جاهز للمسح"]

لماذا M لا H؟

مستوى التصحيح H يزيد الكثافة ويصعب على الكاميرا القديمة القراءة. مستوى M (15%) يوازن حجم المكتوب مع الخط المطبعي؛ تكفي احتياجاتنا لمسح شاشة أو ورقة.

أمان مستقبلي

قرار معياري: لا تجلب الرمز الصريح من قاعدة البيانات لاحقاً — تُنمّراته إلى واجهة توليد QR لحظة ولادته فقط، حتى لا تتحول قاعدة مُساربة إلى مفتاح روابط صحيحة.

تمرين تطبيقي: نفّذ توليد QR لضيف حقيقي وامسحه من شاشة هاتفك — تحقق أنه يفتح الدعوة ويستقبل التوقيع بنجاح دون أي خطأ إصدار.

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

  • اختيار مستوى تصحيح مرتفع للغاية (H) فيزيد الكثافة ويصعب المسح.
  • استخدام margin 0 فيعجز الماسح عن تمييز الحدود.
  • توليد QR في كل طلب بدل الكاشف المحفوظ في qrPath.

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

قابلية الخطأ
قدرة رمز القراءة واستعادته للبيانات عند تلفه.
toDataURL
تحويل محتوى QR إلى سلسلة صورة قاعدة بيانات.
qrcode
مكتبة Node منخفضة تعتمد إعدادات تشفير قوالب.

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

اختبار سريع: اشرح بعبارتك معنى «توليد صورة QR من قاعدة الدعوة»، ثم بيّن أين ستستخدمه داخل نظام تسجيل حضور دعوات مناسبة عبر رمز 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

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