
ClinicPlus هي منصة متكاملة لإدارة العيادات الطبية مبنية بأحدث تقنيات الويب. تقدم حلاً شاملاً لعمليات العيادة، بما في ذلك إدارة المرضى، وملفات الأطباء، وجدولة المواعيد، وتتبع السجلات الطبية، ولوحات التحكم الإدارية.
graduateion_project/
├── app/ # Next.js App Router
│ ├── (public)/ # الصفحات العامة (لا تتطلب مصادقة)
│ │ ├── page.tsx # الصفحة الرئيسية
│ │ ├── doctors/ # قائمة الأطباء
│ │ ├── doctors/[id]/ # ملف الطبيب التفصيلي
│ │ ├── about/ # صفحة من نحن/الفريق
│ │ └── statics/ # صفحة الإحصائيات والتحليلات
│ │
│ ├── (dashboard)/ # صفحات لوحة التحكم (محمية)
│ │ ├── admin/ # لوحة تحكم الإدارة
│ │ │ ├── users/ # إدارة المستخدمين
│ │ │ ├── doctors/ # إدارة الأطباء
│ │ │ └── ... # ميزات الإدارة
│ │ └── profile/ # صفحات الملف الشخصي
│ │
│ ├── api/ # مسارات API الخلفية
│ │ ├── auth/[...nextauth]/ # نقاط مصادقة المصادقة
│ │ ├── profile/ # واجهات إدارة الملف الشخصي
│ │ ├── admin/ # واجهات عمليات الإدارة
│ │ ├── doctors/ # واجهات الأطباء العامة
│ │ └── upload/ # واجهة رفع الملفات
│ │
│ ├── Components/ # مكونات واجهة مشتركة
│ ├── layout.tsx # التنسيق الأساسي مع البيانات الوصفية
│ └── globals.css # الأنماط العامة
│
├── components/
│ └── ui/ # عناصر واجهة قابلة لإعادة الاستخدام (shadcn)
│
├── models/ # نماذج قاعدة بيانات Mongoose
│ ├── User.ts # مخطط المستخدم
│ ├── Doctors.ts # مخطط الطبيب
│ ├── Review.ts # مخطط التقييم
│ ├── MedicalHistory.ts # مخطط السجل الطبي
│ └── UpcomingDates.ts # مخطط المواعيد
│
├── lib/ # مكتبات الأدوات المساعدة
│ ├── db.ts # اتصال قاعدة البيانات
│ ├── auth.ts # تكوين المصادقة
│ └── ... # وظائف مساعدة
│
├── types/ # تعريفات TypeScript
├── public/ # الأصول الثابتة
├── next.config.ts # تكوين Next.js
├── tsconfig.json # تكوين TypeScript
├── tailwind.config.ts # تكوين Tailwind CSS
└── package.json # التبعيات والبرامج النصية
/adminالتحكم في صلاحية الإدارة: يتم تحديدها عبر متغير البيئة AUTH_ADMINS (قائمة عناوين بريد إلكتروني مفصولة بفواصل)
GET /api/doctors # عرض جميع الأطباء (مع البحث والتصفح)
GET /api/doctors/[id] # الحصول على طبيب بالمعرف
POST /api/doctors/[id]/reviews # إضافة تقييم (يتطلب مصادقة)
GET /api/profile # الحصول على الملف الشخصي
PATCH /api/profile # تحديث الملف الشخصي
GET /api/profile/doctor/medical-history # الحصول على السجل الطبي
POST /api/profile/doctor/medical-history # إضافة سجل طبي
GET /api/profile/doctor/appointments # الحصول على المواعيد
POST /api/profile/doctor/appointments # إضافة موعد
GET /api/admin/users # عرض جميع المستخدمين
GET /api/admin/users/[id] # الحصول على تفاصيل مستخدم
PATCH /api/admin/users/[id] # تحديث مستخدم
GET /api/admin/doctors # عرض جميع الأطباء
POST /api/admin/doctors # إضافة طبيب جديد
GET /api/admin/doctors/[id] # الحصول على تفاصيل طبيب
PATCH /api/admin/doctors/[id] # تحديث طبيب
DELETE /api/admin/doctors/[id] # حذف طبيب
POST /api/upload # رفع ملف إلى Cloudinary
GET/POST /api/auth/[...nextauth] # مصادقة NextAuth
الصفحة الرئيسية → تصفح الأطباء → عرض ملف الطبيب → (اختياري: التسجيل)
تسجيل الدخول (Google OAuth)
↓
لوحة التحكم/الملف الشخصي
↓
├─ تعديل إعدادات الملف الشخصي
├─ عرض السجل الطبي
├─ حجز المواعيد
├─ تقييم الأطباء
└─ إدارة الحساب
تسجيل الدخول (Google OAuth)
↓
صفحة ملف الطبيب
↓
├─ تحديث المعلومات المهنية
├─ عرض تقييمات المرضى
├─ إدارة المواعيد
└─ عرض السجل الطبي (إذا كان أيضاً مريضاً)
تسجيل الدخول (Google OAuth - يجب أن يكون في AUTH_ADMINS)
↓
لوحة الإدارة (/admin)
↓
├─ إدارة المستخدمين
│ ├─ عرض قائمة المستخدمين
│ ├─ تعديل بيانات المستخدم
│ └─ إدارة أدوار المستخدمين
│
├─ إدارة الأطباء
│ ├─ عرض بطاقات الأطباء
│ ├─ إضافة طبيب جديد
│ ├─ تعديل ملف الطبيب
│ └─ إزالة طبيب
│
└─ تحليلات النظام
ينقر المستخدم على "تسجيل الدخول"
↓
إعادة توجيه إلى Google OAuth
↓
NextAuth يتحقق من بيانات الاعتماد
↓
إنشاء جلسة مستخدم
↓
├─ إذا مستخدم جديد → إنشاء مستند User في MongoDB
├─ إذا مستخدم موجود → تحميل الملف الشخصي
└─ إذا البريد في AUTH_ADMINS → منح صلاحية الإدارة
↓
إعادة توجيه إلى الصفحة المناسبة (الملف الشخصي/لوحة التحكم)
أنشئ ملف .env.local مع المتغيرات التالية:
# قاعدة البيانات
MONGODB_URI=mongodb://...
# Google OAuth
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# NextAuth
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=your_secret_key
# صلاحية الإدارة (عناوين بريد مفصولة بفواصل)
AUTH_ADMINS=admin@example.com,doctor@example.com
# Cloudinary (لرفع الصور)
CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secret
# اختياري (للبيانات الوصفية)
NEXT_PUBLIC_SITE_URL=http://localhost:3000
# تثبيت التبعيات
npm install
# تشغيل خادم التطوير
npm run dev
# افتح المتصفح
http://localhost:3000
npm run dev # تشغيل خادم التطوير
npm run build # بناء للإنتاج (مع Turbopack)
npm run start # تشغيل خادم الإنتاج
الميزة
الوصف
الموقع العام
صفحات محسنة لمحركات البحث مع بيانات وصفية ودعم Open Graph
دليل الأطباء
بحث وتصفية وتصفح خلال قوائم الأطباء
نظام التقييمات
المستخدمون المسجلون يمكنهم تقييم الأطباء
ملفات المستخدمين
إدارة ملف شخصي مخصص للمرضى
ملفات الأطباء
ملف مهني مع المواعيد والتقييمات
السجل الطبي
تتبع السجلات الطبية للمرضى
المواعيد
جدولة وإدارة المواعيد القادمة
لوحة الإدارة
عمليات CRUD كاملة للمستخدمين والأطباء
Google OAuth
مصادقة آمنة عبر تسجيل الدخول بجوجل
رفع الصور
تكامل Cloudinary لصور الملف الشخصي
التحليلات
إحصائيات وتصور البيانات
واجهة متجاوبة
تصميم للجوال أولاً مع Tailwind CSS
NEXTAUTH_URL إلى رابط الإنتاجNEXT_PUBLIC_SITE_URL إلى رابط الإنتاجAUTH_ADMINSnpm run build بنجاحالمشكلة: أخطاء .next/static/development/_buildManifest.js.tmp.* الحل:
.nextnpm run devالمشكلة: لم يتم العثور على المخطط أثناء populate الحل: استورد النماذج المطلوبة في ملف المسار قبل استخدام populate
المشكلة: تمرير MongoDB ObjectId إلى مكونات العميل الحل: حوّل إلى سلسلة: String(doc._id)
للحصول على تعليمات الإعداد المفصلة واستكشاف المشاكل وإصلاحها، راجع:
README.md - دليل البدء السريعPROJECT_GUIDE_EN.md - الدليل الإنجليزي الشاملPROJECT_GUIDE_AR.md - الدليل العربي الشاملبني باستخدام: Next.js 16, TypeScript, MongoDB, NextAuth, Tailwind CSS, shadcn/ui, MUI, Chart.js, Cloudinary
Check out the live project or dive into the source code on GitHub