Bedrud التوثيق

يستخدم Bedrud إطار العمل Fiber (واجهة برمجة تشبه Express لـ Go).

منطق التوجيه

تُعرَّف المسارات في internal/server/server.go. نُجمّع المسارات لتطبيق البرمجيات الوسيطة أو البادئات بسهولة.

المجموعات الرئيسية:

  • /api/auth: مسارات عامة ومحمية للمصادقة.
  • /api/room: مسارات محمية لإدارة الغرف.
  • /api/admin: مسارات مقيّدة بالمستخدمين ذوي دور superadmin.
  • /livekit: مجموعة بروكسي خاصة ترسل الطلبات إلى خادم الصوت/الفيديو LiveKit المدمج.

منطق المعالجات المتخصصة

إدارة الغرف (internal/handlers/room.go)

يترجم RoomHandler بين بيانات الغرف الوصفية في Bedrud ومحرك وسائط LiveKit.

١. إنشاء الغرفة

عند إنشاء غرفة عبر POST /api/room/create:

  • التسوية: تُقلم أسماء الغرف وتُحوّل إلى حروف صغيرة.
  • التوليد التلقائي: إذا لم يُقدَّم اسم، يُنشئ Bedrud اسمًا عشوائيًا آمنًا للروابط (مثلاً fancy-blue-whale).
  • الإنشاء المتزامن: تستدعي الخلفية أولاً واجهة برمجة تطبيقات LiveKit الداخلية لإنشاء جلسة الوسائط، ثم تحفظ البيانات الوصفية في قاعدة البيانات المحلية.

٢. الانضمام والرموز

عند انضمام مستخدم عبر POST /api/room/join:

  • التحكم في الوصول: تتحقق الخلفية من وجود الغرفة وكون المستخدم مُصرحًا له.
  • توليد الرمز: يُنشأ JWT مُوقَّع (رمز الانضمام) يحتوي على:
    • Identity: معرّف المستخدم من Bedrud.
    • Name: اسم العرض للمستخدم.
    • Grants: صلاحيات محددة مثل CanJoin، CanPublish، CanSubscribe.
  • مصافحة العميل: تتلقى الواجهة الأمامية كلًا من البيانات الوصفية المحلية للغرفة ورمز LiveKit لبدء اتصال WebRTC.

الإدارة وإدارة المستخدمين (internal/handlers/users.go)

المسارات تحت /api/admin محمية بصرامة بواسطة البرمجية الوسيطة RequireAccess("superadmin").

١. التحكم في المستخدمين

يتيح UsersHandler للمشرفين:

  • عرض جميع المستخدمين: جلب دليل كامل للمستخدمين المسجلين بما في ذلك مزود المصادقة وبيانات آخر تسجيل دخول.
  • تحديث الحالة: تفعيل أو إلغاء تفعيل الوصول للحساب فورًا. إلغاء تفعيل المستخدم يمنعه فورًا من تسجيل الدخول أو تحديث رموزه.

٢. نظرة عامة على الغرف

تسمح مسارات المشرف بعرض جميع الغرف النشطة والتاريخية عبر المنصة بأكملها، بغض النظر عن مَن أنشأها. هذا مُعد للإشراف على المنصة.

دورة حياة الطلب

١. وصول الطلب: يستقبل Fiber طلب HTTP. ٢. البرمجية الوسيطة:

  • recover: تمنع تعطل الخادم عند حدوث خطأ.

  • cors: تتعامل مع مشاركة الموارد عبر الأصول.

  • Protected: (اختياري) تتحقق من JWT صالح في ترويسة Authorization. ٣. المعالج: تُستدعى الدالة في internal/handlers.

  • تحلل جسم JSON (إن وُجد) باستخدام c.BodyParser.

  • تستدعي الخدمة أو المستودع اللازم.

  • تُرجع استجابة JSON باستخدام c.JSON.

مثال: معالج إنشاء الغرفة

func (h *RoomHandler) CreateRoom(c *fiber.Ctx) error {
    var input struct {
        Name string `json:"name"`
    }
    // 1. Parse Input
    if err := c.BodyParser(&input); err != nil {
        return c.Status(400).JSON(fiber.Map{"error": "Invalid input"})
    }
 
    // 2. Business Logic (via Repository)
    room := &models.Room{Name: input.Name}
    if err := h.roomRepo.Create(room); err != nil {
        return c.Status(500).JSON(fiber.Map{"error": "Failed to create room"})
    }
 
    // 3. Response
    return c.Status(201).JSON(room)
}

الملفات الثابتة (الواجهة الأمامية)

الواجهة الأمامية للويب مدمجة في الملف الثنائي Go وقت البناء. يخدم Fiber ملفات React من دليل frontend/ باستخدام filesystem.New.

أي مسار لا يبدأ بـ /api يُعاد توجيهه إلى index.html الخاص بتطبيق React. هذا يفعّل التوجيه من جانب العميل بدون أخطاء 404 عند تحديث الصفحة.