انتقل إلى المقال
Aniq-UI

Dashboard 2مرجع واجهة API

مرجع واجهة 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": "…" } مهما كانت الترويسة، ويختار العميل إحداهما.

تسجيل الدخول

  1. احصل على رمز

    أرسل بريد مشرف وكلمة مروره. تقبل واجهة 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."
    }
  2. أرسله مع كل استدعاء

    الطرفية
    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 التي تستمع إليها لوحة التحكم، وحدثها، وكيف يُصرَّح بالاتصال.

مسارات وضع العرض التجريبي

مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.

المسارات التي تضيفها نسخة العرض التجريبي العامة.

توقفت عند خطوة؟

ابحث عن الحل قبل أن تبدأ من جديد.

حل المشكلات

تفضيلات ملفات تعريف الارتباط

نستخدم ملفات تعريف الارتباط لتعزيز تجربة التصفح الخاصة بك وتحليل حركة المرور على الموقع وتخصيص المحتوى. بالنقر على "قبول الكل"، فإنك توافق على استخدامنا لملفات تعريف الارتباط للتحليلات والإعلانات المخصصة.