Bedrud التوثيق

خادم بدرود هو تطبيق Go يوفر REST API، ويخدم واجهة الويب المدمجة، ويدير خادم وسائط LiveKit.

حزمة التقنيات

التقنيةالغرض
Go 1.24اللغة الأساسية
Fiber v2إطار عمل الويب (مشابه لـ Express)
GORMORM لـ SQLite وPostgreSQL
LiveKit Protocol SDKإدارة غرف WebRTC والرموز
Zerologتسجيل JSON منظم
GothOAuth2 متعدد المزودين
go-passkeysدعم FIDO2/WebAuthn
golang-jwtإنشاء رموز JWT والتحقق منها
gocronجدولة المهام في الخلفية
Swagger (swaggo)توليد توثيق API

هيكل المجلدات

server/
├── cmd/
│   ├── server/main.go        # Development entry point
│   └── bedrud/main.go        # Production entry point (with install/livekit flags)
├── internal/
│   ├── auth/                  # Authentication services
│   │   ├── auth.go            # Core auth service (register, login, OAuth)
│   │   ├── jwt.go             # JWT token creation and validation
│   │   └── session_store.go   # Gorilla session store for OAuth state
│   ├── database/              # Database initialization and migrations
│   ├── handlers/              # HTTP request handlers (controller layer)
│   │   ├── auth_handler.go    # Auth endpoints
│   │   ├── room.go            # Room endpoints
│   │   └── users.go           # User management endpoints
│   ├── middleware/             # Fiber middleware
│   │   └── auth.go            # JWT validation, permission checks
│   ├── models/                # GORM models (database schemas)
│   │   ├── user.go            # User model
│   │   ├── room.go            # Room model
│   │   └── passkey.go         # Passkey model
│   ├── repository/            # Data access layer (SQL via GORM)
│   │   ├── user_repository.go
│   │   ├── room_repository.go
│   │   └── passkey_repository.go
│   ├── livekit/               # Embedded LiveKit server management
│   ├── scheduler/             # Background job scheduling
│   └── utils/                 # TLS and other utilities
├── frontend/                  # Embedded web frontend (populated at build time)
├── config.yaml                # Development configuration
├── livekit.yaml               # Development LiveKit configuration
├── go.mod
└── go.sum

بنية الطبقات

يتبع الخادم بنية ثلاثية الطبقات:

flowchart TB
    HTTP[HTTP Request] --> Middleware
    Middleware["Middleware<br/>JWT validation, CORS, logging"] --> Handlers
    Handlers["Handlers<br/>Parse requests, call services, format responses"] --> Services
    Services["Services<br/>Business logic (auth, room management)"] --> Repository
    Repository["Repository<br/>Database queries via GORM"] --> Database
    Database["Database<br/>SQLite (dev) or PostgreSQL (production)"]

الأنماط الرئيسية

الواجهة المدمجة

تُجمَّع واجهة الويب كملفات ثابتة وتُدمَج في الملف الثنائي Go باستخدام //go:embed:

//go:embed frontend/*
var frontendFS embed.FS

في وقت البناء، يقوم bun run build:embed بالعرض المسبق SSR لتطبيق React وينسخ dist/client/ إلى server/frontend/. ثم يقوم مترجم Go بحزمها في الملف الثنائي. يخدم خادم Fiber هذه الملفات لأي مسار غير API.

مصادقة JWT

يستخرج الوسيطة رمز JWT من ترويسة Authorization: Bearer <token>، ويتحقق منه، ويربط سياق المستخدم بالطلب. تستخدم المسارات المحمية وسيطة RequireAccess للتحقق من أدوار المستخدم.

توليد رموز LiveKit

عند انضمام مستخدم إلى غرفة، يقوم الخادم بما يلي:

١. التحقق من صلاحيات الغرفة ٢. إنشاء رمز وصول LiveKit موقّع بمفتاح API السري ٣. إرجاع الرمز للعميل ٤. يتصل العميل مباشرة بـ LiveKit باستخدام الرمز

توثيق Swagger

يُولَّد توثيق API تلقائيًا من التعليقات التوضيحية في الكود باستخدام swaggo. في بيئة التطوير، يتوفر على /api/swagger/.

قاعدة البيانات

SQLite (الافتراضي)

للتطوير والنشر الصغير، يستخدم بدرود SQLite. يُخزَّن ملف قاعدة البيانات في المسار المُهيأ database.path (الافتراضي: data.db).

PostgreSQL

للإنتاج مع متطلبات تزامن أعلى، اضبط سلسلة اتصال PostgreSQL. يتعامل GORM مع اللهجتين بشفافية.

الترحيلات

يقوم GORM بالترحيل التلقائي للمخطط عند البدء بناءً على هياكل النماذج. تُعرَّف النماذج في internal/models/.

المهام في الخلفية

يقوم مجدول gocron بتشغيل مهام دورية مثل:

  • تنظيف رموز التحديث المنتهية الصلاحية
  • إزالة المشاركين غير النشطين في الغرف

انظر أيضًا