# دليل تعلم NestJS: المفاهيم الأساسية والعملية # NestJS Learning Guide: Core Concepts and Implementation مرحباً بك في هذا الدليل التعليمي المخصص لمشروع **Ads Analytics Platform**. سنقوم هنا بشرح بنية البرنامج وكيفية تداخل مكوناته بأسلوب مبسط وموجه للمطورين. --- ## 🏗️ 1. البنية العامة (General Architecture) تعتمد NestJS على بنية **النماذج (Modules)**. كل ميزة في التطبيق (مثل الإعلانات أو التحليلات) يتم فصلها في "موديول" مستقل. - **AppModule**: هو الجذر (Root) الذي يربط كل الموديولات ببعضها. - **Controller**: هو المسؤول عن استقبال الطلبات (HTTP Requests) وإرجاع الردود. - **Service (Provider)**: هنا يكمن "المنطق" (Logic)، مثل حساب الأرباح أو جلب البيانات من Meta API. --- ## 💉 2. حقن التبعيات (Dependency Injection) يعتبر "حقن التبعيات" من أهم ميزات NestJS. بدلاً من أن يقوم الكائن بإنشاء تبعياته بنفسه (مثل استخدام `new AnalyticsService()`)، يقوم المحرك (Nest IoC Container) بتمريرها له. **لماذا نستخدمه؟** 1. **سهولة الاختبار (Testing)**: يمكننا بسهولة استبدال الخدمة الحقيقية بواحدة وهمية (Mock) أثناء الاختبار. 2. **برمجة نظيفة**: فصل المهام وجعل الكود أقل تشابكاً. **مثال من المشروع:** في `MetaAdsController` نقوم بحقن الـ `MetaAdsService` عبر الـ `constructor`: ```typescript constructor(private readonly metaAdsService: MetaAdsService) {} ``` --- ## 📦 3. الكبسلة (Encapsulation) في NestJS، كل موديول هو "صندوق مغلق" افتراضياً. إذا أردت استخدام خدمة من موديول في موديول آخر، يجب عليك: 1. **تصديرها (Export)** من الموديول الأصلي. 2. **استيرادها (Import)** في الموديول الجديد. هذا يضمن أن المكونات لا تتداخل بشكل عشوائي، مما يسهل صيانة النظام الكبير. --- ## 🧬 4. الوراثة (Inheritance) نستخدم الوراثة لتقليل تكرار الكود. على سبيل المثال، قد يكون لدينا "خطأ مخصص" يرث من `HttpException` الأساسي في NestJS. **مثال:** مراقب الاستثناءات (Exception Filter) قد يرث ميزات معينة أو نستخدم الوراثة في DTOs (Data Transfer Objects) لمشاركة الحقول بين طلبات الإضافة والتعديل. --- ## 🔍 5. كيف يعمل المشروع الحالي؟ عندما تطلب المسار `/api/meta/insights`: 1. الطلب يمر عبر **Middlewares** (إن وجدت). 2. يصل إلى **MetaAdsController**. 3. الـ Controller ينادي الوظيفة المطلوبة في **MetaAdsService**. 4. الـ Service تقوم بالتواصل مع Meta API وتجري الحسابات. 5. النتيجة تعود كـ JSON للمستخدم. --- > [!TIP] > **نصيحة**: دائماً ابدأ بتصميم موديول مستقل لكل ميزة جديدة لضمان قابلية التوسع (Scalability).