مرجع واجهة API
كل مسار تقدّمه واجهة NestJS API، ومن يحق له استدعاؤه، وكيف يعمل تسجيل الدخول والصلاحيات والأخطاء والقوائم والحدود.
لحزمة واجهة + خلفية
العنوان الأساسي وصيغة الاستجابة
كل مسار مقدَّم تحت البادئة /api. محليًا يكون العنوان الأساسي http://localhost:8000/api؛ وعلى الخادم هو عنوان واجهة API متبوعًا بـ /api، وهي القيمة نفسها التي تقرؤها لوحة التحكم من NEXT_PUBLIC_API_BASE_URL. أجسام الطلبات بصيغة JSON، عدا الرفع. وتأتي كل إجابة في الغلاف نفسه:
{
"success": true,
"data": { },
"message": ""
}يحمل data النتيجة. أما message فجملة قصيرة تملؤها بعض عمليات الكتابة، بلغة الطلب، وتكون فارغة في غير ذلك. وفحص الصحة لا يحتاج إلى رمز:
curl http://localhost:8000/api/health{"success":true,"data":{"status":"ok","database":"up"},"message":""}إلى أن تجيب قاعدة البيانات وتحتوي جداولها، يجيب بـ 503 مع "status":"unavailable" و"database":"down". ويقرؤه فحص الصحة في صورة Docker.
الأخطاء
يحتفظ الفشل بالغلاف، مع success: false وحالة HTTP:
{
"success": false,
"data": null,
"message": "That email and password combination didn't work. Please try again.",
"errors": { "email": ["Enter a valid email address (example@domain.com)."] }
}messageجملة بلغة الطلب.- يُملأ
errorsعند فشل التحقق، بالمشكلات لكل حقل. ويُرفض أي حقل في الجسم لا يعرفه المسار. - المسار المحمي من دون رمز، أو برمز منتهي، يجيب بـ
401؛ والرمز الذي ينقصه الصلاحية يجيب بـ403.
القوائم والتقسيم إلى صفحات
تقبل مسارات القوائم page وpage_count (أو limit). وpage_count محدود بـ 100؛ والقيمة المفقودة أو غير الصالحة تعود إلى افتراضي المسار، 15 للمستخدمين و10 لغيرهم.
{ "data": [ ], "page": 1, "limit": 15, "total": 15, "totalPages": 1 }المستخدمون بالأحدث أولًا افتراضيًا (order=asc يعكس الترتيب)؛ والمشاريع بالأحدث تحديثًا أولًا؛ والمشرفون بالأحدث أولًا؛ والإعدادات حسب الفئة؛ والأدوار حسب الاسم.
اللغة
أرسل Accept-Language: ar لتصلك الرسائل بالعربية؛ وأي قيمة أخرى تُجاب بالإنجليزية. وتحمل الدول والصلاحيات والإعدادات وأسماء المشاريع اللغتين على شكل { "en": "…", "ar": "…" } مهما كانت الترويسة، ويختار العميل إحداهما.
تسجيل الدخول
احصل على رمز
أرسل بريد مشرف وكلمة مروره. تقبل واجهة API التي مُلئت بالـ seed حساب Super Admin المذكور في دليل التثبيت.
الطرفيةcurl -X POST http://localhost:8000/api/auth/login -H "Content-Type: application/json" -d '{"email":"admin@example.com","password":"Admin@123"}'الاستجابة{ "success": true, "data": { "access_token": "eyJ…", "token_type": "Bearer", "expires_in": "7d", "admin": { "id": 1, "email": "admin@example.com", "username": "…", "roles": [ ], "permissions": [ ] } }, "message": "Signed in successfully." }أرسله مع كل استدعاء
الطرفيةcurl http://localhost:8000/api/auth/me -H "Authorization: Bearer eyJ…"النتيجة المتوقعة: يعيد
/api/auth/meالمشرف المسجّل دخوله مع أدواره وصلاحياته.
- يبقى الرمز صالحًا مدة
JWT_EXPIRATION، وهي7dافتراضيًا. لا يوجد مسار تجديد: سجّل الدخول مرة أخرى. - البريد الخاطئ وكلمة المرور الخاطئة يحصلان على رسالة
401نفسها. - بعد
RATE_LIMIT_LOGINمحاولة تسجيل دخول فاشلة (10 افتراضيًا) من عنوان واحد خلال 15 دقيقة، يجيبPOST /api/auth/loginبـ429إلى أن يبلغ عمر أقدم فشل 15 دقيقة. والعدّاد محفوظ في الذاكرة، فإعادة التشغيل تمسحه.
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
POST | /api/auth/login | أي شخص | سجّل الدخول بـ email وpassword |
GET | /api/auth/me | أي مسؤول مسجّل دخوله | المشرف المسجّل دخوله، مع الأدوار والصلاحيات |
GET | /api/health | أي شخص | الجاهزية: 200 أو 503 |
الصلاحيات
كل مسار أدناه يحتاج إلى Authorization: Bearer مع رمز، عدا المسارات الموسومة بـ «أي شخص». ومعظمها يحتاج أيضًا إلى صلاحية، اسمها module.action؛ ويملك المشرف صلاحيات كل أدواره. والصلاحيات الـ 25 مدرجة في «الشاشات والأدوار والصلاحيات».
المستخدمين
الأشخاص الذين يخدمهم منتجك، يُخاطَبون بـ username. الحذف حذف ناعم.
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/users | المشرفون الذين لديهم users.view | القائمة، مع search وemail وphone وcountry_id وusername وfirst_name وlast_name وfrom_date وto_date وorder |
GET | /api/users/statistic | المشرفون الذين لديهم users.view | الإجماليات: total وdeleted وverified وunverified |
GET | /api/users/deleted | المشرفون الذين لديهم users.view | المستخدمون المحذوفون، بالمرشحات نفسها |
GET | /api/users/deleted/:username | المشرفون الذين لديهم users.view | مستخدم محذوف واحد |
GET | /api/users/:username | المشرفون الذين لديهم users.view | مستخدم واحد |
POST | /api/users | المشرفون الذين لديهم users.create | إنشاء: first_name وlast_name وemail وpassword، واختياريًا username وphone وprofile_picture وcountry_id |
PATCH | /api/users/:username | المشرفون الذين لديهم users.update | تعديل أي من هذه الحقول |
PATCH | /api/users/:username/change-password | المشرفون الذين لديهم users.update | تعيين كلمة مرور جديدة |
POST | /api/users/:username/make-verified | المشرفون الذين لديهم users.verify | تعليم البريد الإلكتروني كموثَّق |
POST | /api/users/:username/make-unverified | المشرفون الذين لديهم users.verify | وسمه غير متحقق منه |
POST | /api/users/:username/resend-verification-email | المشرفون الذين لديهم users.update | يجيب بالنجاح؛ ولا يرسل أي بريد، وهو جاهز لخدمة البريد الخاصة بك |
DELETE | /api/users/:username | المشرفون الذين لديهم users.delete | حذف ناعم |
POST | /api/users/deleted/:username/restore | المشرفون الذين لديهم users.restore | استعادة |
المشاريع
تحمل المشاريع name وdescription وenvironment وstatus (in-progress أو ready أو blocked) وversion، واختياريًا image وicon_name، وtranslations مع اسم ووصف بـ en وar.
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/projects | المشرفون الذين لديهم projects.view | القائمة، مع name وstatus وenvironment |
GET | /api/projects/statistic | المشرفون الذين لديهم projects.view | الإجماليات حسب الحالة |
GET | /api/projects/recent | المشرفون الذين لديهم projects.view | أحدث المشاريع، وlimit هو 5 افتراضيًا |
GET | /api/projects/deleted | المشرفون الذين لديهم projects.view | المشاريع المحذوفة، مع name |
GET | /api/projects/:id | المشرفون الذين لديهم projects.view | مشروع واحد |
POST | /api/projects | المشرفون الذين لديهم projects.create | إنشاء |
PATCH | /api/projects/:id | المشرفون الذين لديهم projects.edit | عدّل |
DELETE | /api/projects/:id | المشرفون الذين لديهم projects.delete | حذف ناعم |
POST | /api/projects/deleted/:id/restore | المشرفون الذين لديهم projects.restore | استعادة |
المهام السريعة
قائمة مهام النظرة العامة. لكل مشرف قائمته الخاصة، ولا يحتاج إلى صلاحية: فكل مسار يقرأ مهام المستدعي وحده ويكتبها. المهمة هي text وcompleted.
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/tasks | أي مسؤول مسجّل دخوله | مهامك، بالأحدث أولًا، مع status. وحقول الترقيم بجوار data في الغلاف، لا داخله. |
GET | /api/tasks/history | أي مسؤول مسجّل دخوله | كل مهامك، مقسمة إلى active وcompleted |
GET | /api/tasks/stats | أي مسؤول مسجّل دخوله | إجمالياتك |
GET | /api/tasks/:id | أي مسؤول مسجّل دخوله | مهمة واحدة |
POST | /api/tasks | أي مسؤول مسجّل دخوله | إنشاء |
PATCH | /api/tasks/:id | أي مسؤول مسجّل دخوله | عدّل |
PATCH | /api/tasks/:id/toggle | أي مسؤول مسجّل دخوله | علّمها منجزة أو غير منجزة |
DELETE | /api/tasks/:id | أي مسؤول مسجّل دخوله | حذف |
المشرفون وملفك الشخصي
الحسابات التي تسجّل الدخول إلى لوحة التحكم. يقبل :id معرّفًا أو اسم مستخدم.
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/admins | المشرفون الذين لديهم admins.view | القائمة، مع email وname وphone |
GET | /api/admins/statistics | المشرفون الذين لديهم admins.view | الإجماليات |
GET | /api/admins/:id | المشرفون الذين لديهم admins.view | مشرف واحد، مع أدواره |
POST | /api/admins | المشرفون الذين لديهم admins.create | إنشاء: first_name وlast_name وemail وpassword وpassword_confirmation، واختياريًا phone وprofile_picture وcountry_id |
PATCH | /api/admins/:id | المشرفون الذين لديهم admins.edit | عدّل |
PATCH | /api/admins/:id/roles | المشرفون الذين لديهم admins.assign_roles | استبدال الأدوار: role_ids |
DELETE | /api/admins/:id | المشرفون الذين لديهم admins.delete | حذف |
PATCH | /api/admins/profile | المشرفون الذين لديهم admins.edit | عدّل ملفك الشخصي |
PATCH | /api/admins/profile/password | أي مسؤول مسجّل دخوله | غيّر كلمة مرورك: current_password وpassword وpassword_confirmation |
الأدوار
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/roles | المشرفون الذين لديهم roles.view | القائمة، مع name وguard_name وcreated_from وcreated_to؛ ولا تُرقَّم الصفحات إلا عند إرسال page وpage_count معًا |
GET | /api/roles/statistics | المشرفون الذين لديهم roles.view | الإجماليات |
GET | /api/roles/select | المشرفون الذين لديهم roles.view | كل الأدوار، لقائمة منسدلة |
GET | /api/roles/permissions | المشرفون الذين لديهم roles.view | كل الصلاحيات، حسب الوحدة |
GET | /api/roles/:id | المشرفون الذين لديهم roles.view | دور واحد، مع صلاحياته |
POST | /api/roles | المشرفون الذين لديهم roles.create | إنشاء: name |
PUT | /api/roles/:id | المشرفون الذين لديهم roles.edit | إعادة تسمية: name |
POST | /api/roles/:id/permissions | المشرفون الذين لديهم roles.assign_permissions | استبدال ما يمنحه الدور: permissions، وهي قائمة بأسماء الصلاحيات. ويُبلَّغ حاملوه المسجّلون دخولهم فورًا. |
DELETE | /api/roles/:id | المشرفون الذين لديهم roles.delete | حذف |
إعدادات التطبيق
أزواج مفتاح وقيمة لها اسم عرض ووصف ونوع وفئة، مثل site_name وsupport_email وmaintenance_mode.
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/settings | المشرفون الذين لديهم settings.view | القائمة، مع search وcategory |
GET | /api/settings/:key | المشرفون الذين لديهم settings.view | إعداد واحد |
PATCH | /api/settings/:key | المشرفون الذين لديهم settings.edit | غيّر value الخاصة به |
DELETE | /api/settings/:key | المشرفون الذين لديهم settings.edit | احذفه |
الدول والرفع
| الطريقة | المسار | من يحق له استدعاؤه | وظيفته |
|---|---|---|---|
GET | /api/helpers/countries | أي شخص | الدول الخمسون على شكل { value, label, code, phone_code }، بتسمية بلغة الطلب |
POST | /api/helpers/upload | أي مسؤول مسجّل دخوله | ارفع صورة واحدة كحقل file متعدد الأجزاء، مع path اختياري (المجلد، وuploads افتراضيًا) وfor (profile أو cover أو logo أو default) |
يقبل الرفع صورة واحدة بحجم 10 MB على الأكثر، ويخزنها في حاوية R2 الخاصة بك بصيغة JPEG بعرض 1920 بكسل على الأكثر، مع نسخة بحجم مختلف لقيمة for، ويعيد عنوانيهما: original وعنوانًا مثل 250x250. ومن دون متغيرات R2 يجيب بـ 503 مع «لم يتم إعداد رفع الصور على هذا الخادم بعد. أضف إعدادات Cloudflare R2 إلى بيئة الواجهة البرمجية لتفعيله.»
المساعد الذكي ومحادثاته
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
مسار بث المساعد، وقائمة نماذجه واقتراحاته الافتتاحية، والمحادثات المحفوظة.
خادم MCP
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
نقطة نهاية MCP لوكلاء البرمجة وكيفية التصريح لها.
التحديث الفوري للصلاحيات
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
مساحة اسم Socket.IO التي تستمع إليها لوحة التحكم، وحدثها، وكيف يُصرَّح بالاتصال.
مسارات وضع العرض التجريبي
مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.
المسارات التي تضيفها نسخة العرض التجريبي العامة.