المستخدمون: مفاهيم أساسيّة

بعد أن تعرّف تينه على التطبيق الذي يستخدم تينه، تبقّى أن يتعرّف تينه على المستخدم الذي يستخدم التطبيق، حتّى يعرف تينه ما هي الموارد التي يُمكن للمستخدم الحاليّ أن يستخدمها، مثلاً، ما هي الدوائر التي يستطيع أن يصل إليها، الأفراد الذين يُمكنه استعراض ملفّاتهم الشخصيّة، و هكذا، و لكي يتم ذلك، لابدّ من فهم آلية تسجيل دخول المستخدم. الآلية كالتالي، يمدّ المستخدم يده لمصافحة الخادم للمرّة الأولى و معه رقم الجوّال كمُدخل، طالباً من الخادم إرسال رسالة نصيّة (SMS) تحوي كلمة مرور مؤقتة، كلمة المرور هذه؛ ستمهّد الطريق للمصافحة الثانيّة التي تتم بين المستخدم و الخادم و التي يحمل فيها المستخدم رقم جوّاله و كذلك كلمة المرور المؤقتة.

المصافحة الأولى: الطلب
GET
{{teenah_api_url}}/users/token/{mobile}
  • {mobile} رقم الجوّال مبدوءاً بالرقم الدولي وبدون الصفر في بداية الرقم، مثلاً 96655.

سيقوم الخادم (تينه) بإرسال رسالة نصيّة (SMS) إلى الجوّال مُدخل و ستكون ردود الخادم إمّا 204 في حال إرسال الرسالة أو 403 في حال أن رقم الجوّال غير صحيح:

المصافحة الأولى: الردود
204
403
{
    "message": "Not authorized to access this resource."
}
  • {message} رسالة الخطأ التي يتم استقبالها من الخادم.

المصافحة الثانية وَ تسجيل الدخول

بعد عملية المصافحة الأولى التي تمّت بين الخادم و المستخدم، يستطيع أن يطلب المستخدم من الخادم تسجيل دخوله من خلال الإرسال POST إلى هذا الرابط:

الطلب
POST
{{teenah_api_url}}/users/login
  • {mobile} (مطلوب) رقم الجوّال مبدوءاً بالرقم الدولي وبدون الصفر في بداية الرقم، مثلاً 96655.
  • {sms_token} (مطلوب) كلمة المرور المؤقتة المُرسلة إلى الجوّال.

بعد إرسال المُدخلات إلى الرابط السابق، سيردّ الخادم -بعد تسجيل الدخول- على المستخدم برموز يتذكر المستخدم من خلالها، هذه الرموز التي ينبغي للمستخدم استخدامها في كل استدعاء لأي وظيفة من وظائف النظام. الردرو ستكون إما 200 أو 400 أو 403 أو 404.

الردود
200
{
    "user_token": "$2y$10$d8zl4DaH1.nYJncylUaVf.70UfQm/M55WiFPmoUefKkFhu2n4.uaC",
    "member_id": 0
}
  • {user_token} هذه الرموز هي التي تحدّد المستخدم الذي سجّل الدخول إلى تطبيق تينه.
  • {member_id} رقم الفرد المقابل للمستخدم الذي قام بتسجيل الدخول، إن لم يكن هناك مقابل فسيكون الرقم 0.
400
{
    "message": "Wrong mobile number and/or SMS token."
}
  • {message} رسالة الخطأ التي يتم استقبالها من الخادم.
403
{
    "message": "Not authorized to access this resource."
}
  • {message} رسالة الخطأ التي يتم استقبالها من الخادم.
404
{
    "message": "User cannot be found."
}
  • {message} رسالة الخطأ التي يتم استقبالها من الخادم.

بعد تسجيل الدخول إلى الخاد، ينبغي تمرير الرموز التي قبل قليل إلى رأس بعنوان X-User-Token؛ لكي تتمكن من استدعاء الوظائف الخاصّة بالمستخدم الحاليّ:

الرأس القيمة
X-User-Token
$2y$10$d8zl4DaH1.nYJncylUaVf.70UfQm/M55WiFPmoUefKkFhu2n4.uaC

ربط المستخدم بالفرد من العائلة

ربّما تعرّفت على تصميم جداول قاعدة البيانات مُسبقاً، و هي أنّ للمستخدمين جدولاً مستقّلاً عن جدول الأفراد، و لهذا وُجدت هذه الوظيفة لربط الاثنين معاً، بعد الإرسال POST إلى الرابط في الأسفل سيتم الربط بين المستخدم و الفرد من خلال الحصول على تفاصيل إضافيّة للفرد، كاسمه و تاريخ ميلاده، و غيرها، ردود الخادم ستكون 201 وَ 400 وَ 403.

الطلب
POST
{{teenah_api_url}}/users/members
  • {gender} (مطلوب) جنس الفرد القيم الخصّة بهذا الحقل إمّا male أو female.
  • {name} (مطلوب) اسم الفرد الأوّل، لابدّ أن يكون باللغة العربيّة.
  • {dob} (مطلوب) تاريخ ميلاد الفرد، يكون بهذه الصياغة YYYY-mm-dd.

سيرّد الخادم بإنشاء فردٍ جديدٍ و يربطه بالمستخدم الحاليّ إذا كانت البيانات المُدخلة صحيحة، و سيردّ برسائل الخطأ إذا تمّ عكس ذلك.

الردود
201
{
    "message": "Member has been created successfully.",
    "member_id": 2,
    "user_id": "2"
}
  • {message} رسالة إتمام العملية بنجاح.
  • {member_id} رقم أو معرّف الفرد الذي سجّل دخوله.
  • {user_id} رقم أو معرّف المستخدم الحاليّ.
400
{
    "message": "Invalid inputs."
    -- OR --
    "message": "The entered name is not within the correct format."
}
  • {message} رسالة الخطأ التي يتم استقبالها من الخادم.
403
{
    "message": "Not authorized to access this resource."
}
  • {message} رسالة الخطأ التي يتم استقبالها من الخادم.

بيان المستخدم (Dashboard)

إذا أردت عرض معلومات المستخدم المسجّل دخول حاليّاً، ما عليك إلاّ استدعاء وظيفة (dashboard) ليتم عرضها كمصفوفة من المعلومات.

الطلب
GET
{{teenah_api_url}}/users/dashboard

ثم سيردّ الخادم بتفاصيل المستخدم الحاليّ كالتّالي:

الرد
200
{
    "id": "2",
    "gender": "male",
    "name": "حسام",
    "fullname": null,
    "nickname": null,
    "dob": "1989-01-14",
    "pob": null,
    "dod": null,
    "pod": null,
    "age": "0",
    "is_alive": "1",
    "photo": null,
    "location": null,
    "mobile": "96655*******",
    "email": null,
    "home_phone": null,
    "work_phone": null,
    "marital_status": "single",
    "blood_type": null,
    "is_root": "0",
    "tribe_id": null,
    "created_at": "2014-02-02 17:56:34",
    "updated_at": "2014-02-02 17:56:34",
    "social_medias": [],
    "updates_count": "0",
    "in_relations": []
}
  • {id} رقم أو معرّف المستخدم الحاليّ.
  • {gender} جنس الفرد سواءً ذكراً أو أنثى: male أوَ female.
  • {name} اسم الفرد المرتبط بالمستخدم.
  • {fullname} الاسم الكامل للفرد المرتبط بالمستخدم.
  • {nickname} رسالة الخطأ التي يتم استقبالها من الخادم.
  • {dob} تاريخ ميلاد الفرد بالصياغة YYYYY-mm-dd.
  • {pob} مكان الميلاد للفرد المرتبط بالمستخدم.
  • {dod} تاريخ وفاة (لا سمح الله) الفرد بالصياغة YYYYY-mm-dd.
  • {pod} مكان الوفاة (لا سمح الله) للفرد المرتبط بالمستخدم.
  • {age} عمر الفرد بدءً من الصفر.
  • {is_alive} حالة نبض الفرد، حيّ يرزق أو أنّه متوفّى، 1 أو 0.
  • {photo} رابط الصورة الشخصيّة للفرد (إن وُجدت).
  • {location} مكان تواجد الفرد إن أحبب مشاركته.
  • {mobile} رقم جوّال الفرد المرتبط بالمستخدم.
  • {email} بريد الفرد الإلكترونيّ.
  • {home_phone} رقم هاتف المنزل للفرد (إن وُجد و إن أحبب مشاركته).
  • {work_phone} رقم هاتف العمل للفرد (إن وُجد و إن أحبب مشاركته).
  • {marital_status} الحالة الاجتماعيّة للفرد، أعزب (single)، متزوّج (married)، أرملة (widow) للأنثى أو طليقة (divorced).
  • {blood_type} فصيلة الدم بشكل إختياري و بالرمز الإنجليزي.
  • {is_root} هل هذا الفرد هو جدّ العائلة، 1: نعم، 0: لا.
  • {tribe_id} رقم الفرد الذي يمثّل جدّ العائلة (إن وُجد).
  • {created_at} تاريخ و وقت إنشاء المستخدم.
  • {updated_at} تاريخ و وقت آخر تحديث لهذا السجل.
  • {social_medias} مصفوفة من الشبكات الاجتماعيّة التي سجّل فيها الفرد.
  • {updates_count} عدد التحديثات الغير مقروءة.
  • {in_relations} العلاقات الخاصّة بالفرد، قادمة من الخارج إلى الفرد.

تسجيل الخروج

إذا أراد المستخدم تسجيل الخروج فله ذلك من خلال طلب الرابط في الذي سيأتي تباعاً بفعل GET ليتم بذلك تسجيل و نسيان جلسة المستخدم.

الطلب
GET
{{teenah_api_url}}/users/logout

و ردّ الخادم سيكون كالتالي بعد إتمام عملية تسجيل الخروج:

الرد
204