بناء التطبيق

التطبيق المدمج (Embedded)

الـ boilerplate

عند إنشاء تطبيق Embedded، يُجهَّز لك مستودع GitHub جديد فيه:

.github/workflows/partner-module-policy.yml   ← CI policy scan
scripts/partner-policy/                       ← regex Scanner + AST PHPStan rule
app/                                          ← كود تطبيقك
config/<my-module>.php                        ← كل مفاتيحك تحت هذه الـ namespace
database/migrations/                          ← migrations لجداولك الخاصة
manifest.json
module.json
phpstan.neon                                  ← مع PHPStan rule جاهزة

قواعد العزل

التطبيق المدمج يعيش داخل أوكتا، لكنه ممنوع من:

  • ✗ استيراد App\Models\* (نماذج المنصة)
  • ✗ استيراد App\Services\* ما عدا App\Services\PartnerApi\*
  • ✗ قراءة env keys للمنصة (DB_, REDIS_, الخ)
  • ✗ قراءة config المنصة (database.*, services.*، الخ)
  • ✗ قراءة .env مباشرة

الطريقة الصحيحة للوصول للبيانات

استخدم خدمات PartnerApi فقط:

use App\Services\PartnerApi\Education\Students\ListStudents;

class MyController
{
    public function __invoke(ListStudents $list)
    {
        $page = $list(page: 1, perPage: 20);

        return view('my-module::dashboard', [
            'students' => $page->data,  // → list<StudentDto>
            'total'    => $page->total,
        ]);
    }
}

كل خدمة تتحقق من النطاق المطلوب آلياً قبل تنفيذ أي عملية. إذا كان المستأجر لم يُعطِ تطبيقك الـ scope المطلوب، تحصل على MissingScopeException (يتحوّل إلى 403).

الجداول الخاصة بك

أنت تملك schema منفصل تماماً عن أوكتا. اسم الـ schema يُولَّد من slug تطبيقك (m_<my_module>). لا يلامس وصولك جداول المنصة على الإطلاق (PostgreSQL يفرض ذلك على مستوى الـ role).

كيف تصل جداولك إلى ذلك الـ schema — وكيف تصحّح ما أخطأت فيه — في قاعدة بيانات التطبيق (Migrations).


عرض الدليل كاملاً في صفحة واحدة · ↧ Markdown خام