الفصل 1: البدء مع GitHub Codespaces
الأهداف
- إعداد بيئة تطوير سحابية باستخدام GitHub Codespaces
- تشغيل مشروع e-contact-backend
- فهم هيكل المشروع
- إجراء الاختبارات الأولى لـ API
🌐 ما هو GitHub Codespaces؟
GitHub Codespaces هو بيئة تطوير سحابية تتيح لك:
- التطوير مباشرة من المتصفح
- الحصول على بيئة مُعدة مسبقًا
- تجنب مشاكل التثبيت المحلي
- التعاون بسهولة
الميزة الرئيسية
لا حاجة لتثبيت Java أو Maven أو PostgreSQL أو أي أداة أخرى على جهازك!
المتطلبات الأساسية
- حساب GitHub (مجاني)
- متصفح ويب حديث
خطوات الإعداد
الخطوة 1: الوصول إلى المستودع
- افتح المستودع الرئيسي:
المستودع
الخطوة 2: إنشاء Codespace
- انقر على الزر الأخضر Code
- اختر علامة التبويب Codespaces
- انقر على Create codespace on main
┌─────────────────────────────────────────┐
│ Code ▼ │
├─────────────────────────────────────────┤
│ Local │ Codespaces │
│ │ │
│ │ ┌──────────────────────┐ │
│ │ │ + Create codespace │ │
│ │ │ on main │ │
│ │ └──────────────────────┘ │
└─────────────────────────────────────────┘
الخطوة 3: انتظار التهيئة
سيقوم Codespace بـ:
- إنشاء آلة افتراضية
- استنساخ المستودع
- تثبيت التبعيات
- فتح VS Code في المتصفح
⏱️ الوقت المقدر: 2-3 دقائق
الخطوة 4: التحقق من البيئة
بمجرد أن يكون Codespace جاهزًا، افتح الطرفية وتحقق:
# التحقق من Java
java -version
# المتوقع: openjdk 17.x.x أو أعلى
# التحقق من Maven
./mvnw -version
# المتوقع: Apache Maven 3.x.x
🏃 تشغيل التطبيق
أمر التشغيل
في طرفية Codespace:
./mvnw spring-boot:run
المخرجات المتوقعة
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.x)
...
Started EContactApplication in X.XXX seconds
الوصول إلى التطبيق
عند بدء التطبيق، يعرض Codespaces إشعارًا:
┌──────────────────────────────────────────────────┐
│ Your application running on port 8080 is │
│ available. │
│ │
│ [Open in Browser] [Make Public] │
└──────────────────────────────────────────────────┘
انقر على Open in Browser للوصول إلى الـ API.
🔍 استكشاف هيكل المشروع
inskillflow-docs-formation-spring-boot-projet-e-contact-backend/
│
├── 📁 src/main/java/com/example/econtact/
│ │
│ ├── 📄 EContactApplication.java # نقطة الدخول
│ │
│ ├── 📁 config/
│ │ ├── SecurityConfig.java # تكوين الأمان
│ │ └── CorsConfig.java # تكوين CORS
│ │
│ ├── 📁 controller/
│ │ ├── ContactController.java # نقطة النهاية العامة /api/contact
│ │ ├── AuthController.java # نقاط نهاية المصادقة
│ │ └── AdminController.java # نقاط نهاية الإدارة المحمية
│ │
│ ├── 📁 model/
│ │ ├── Lead.java # كيان الاتصال/العميل المحتمل
│ │ ├── User.java # كيان المستخدم
│ │ └── enums/ # RequestType, LeadStatus, Role
│ │
│ ├── 📁 dto/
│ │ ├── ContactRequest.java # DTO نموذج الاتصال
│ │ ├── LoginRequest.java # DTO المصادقة
│ │ └── LeadResponse.java # DTO استجابة العميل المحتمل
│ │
│ ├── 📁 repository/
│ │ ├── LeadRepository.java
│ │ └── UserRepository.java
│ │
│ ├── 📁 service/
│ │ ├── LeadService.java
│ │ ├── UserService.java
│ │ └── EmailService.java
│ │
│ └── 📁 security/
│ ├── JwtService.java # توليد/تحقق JWT
│ ├── JwtAuthenticationFilter.java # فلتر المصادقة
│ └── UserDetailsServiceImpl.java
│
├── 📁 src/main/resources/
│ └── application.yml # التكوين
│
├── 📁 frontend/ # واجهة اختبار
│
├── 📁 troubleshooting/ # أدلة استكشاف الأخطاء
│
└── 📁 cours/ # الوثائق والدروس
الاختبارات الأولى لـ API
الاختبار 1: التحقق من أن الـ API متاح
curl http://localhost:8080/api/health
الاستجابة المتوقعة:
{"status": "UP"}
الاختبار 2: إرسال اتصال (نقطة نهاية عامة)
curl -X POST http://localhost:8080/api/contact \
-H "Content-Type: application/json" \
-d '{
"fullName": "Jean Dupont",
"email": "jean.dupont@example.com",
"company": "Ma Société",
"phone": "514-555-1234",
"requestType": "INFO",
"message": "Je voudrais plus d'\''informations sur vos services."
}'
الاستجابة المتوقعة:
{
"id": 1,
"fullName": "Jean Dupont",
"email": "jean.dupont@example.com",
"status": "NEW",
"createdAt": "2025-02-02T12:00:00"
}
الاختبار 3: الوصول إلى نقطة نهاية محمية (بدون رمز)
curl http://localhost:8080/api/admin/leads
الاستجابة المتوقعة:
{
"status": 401,
"error": "Unauthorized"
}
⚠️ المشاكل الشائعة
المنفذ 8080 مستخدم بالفعل
# تحديد العملية
lsof -i :8080
# أو استخدام منفذ آخر
./mvnw spring-boot:run -Dspring-boot.run.arguments="--server.port=8081"
خطأ في قاعدة البيانات
تحقق من أن تكوين H2 نشط للتطوير في application.yml.
انقطاع الاتصال بـ Codespace
الـ Codespaces المجانية لها حد زمني. أعد التشغيل إذا لزم الأمر.
موارد استكشاف الأخطاء
لمزيد من التفاصيل حول خطوات التنفيذ واستكشاف الأخطاء:
أدلة مفصلة
قائمة التحقق من التحقق
قبل الانتقال إلى الفصل التالي، تحقق من أنك قد:
- أنشأت Codespace بنجاح
- شغلت تطبيق Spring Boot
- اختبرت نقطة النهاية
/api/contact - فهمت هيكل المشروع