Skip to main content
#P1521

GET /colleague/search

Route Info

Method Endpoint Controller Middleware Purpose
GET /api/v2/colleague/search V2ColleaguesController@searchColleague authWithJwt جست‌وجوی سریع همکاران بر اساس نام، کد مالی، یا شناسه

منطق عملکرد تابع

تابع searchColleague برای اجرای جست‌وجوی بلادرنگ در داده‌های همکار طراحی شده است. این API در تمام نقاط سامانه (حسابداری، تسویه، CRM و billing) برای autocomplete باکس‌های انتخاب همکار استفاده می‌شود.

  1. دریافت پارامتر query از Query String.
  2. درخواست از کش Redis (کلید: colleagues:list:light) در صورت فعال بودن برای پاسخ فوری.
  3. اگر در کش موجود نباشد:
    • یافتن رکوردها در جدول colleagues با فیلترهای فازی روی فیلدهای office، first_name، last_name و financial_code.
    • ترکیب نتایج با جدول colleague_additional برای تکمیل email/phone.
    • محدودسازی خروجی به ۲۰ رکورد برای کارایی.
  4. بازگرداندن آرایه‌ای از نتایج به فرمت استاندارد id‑title‑meta جهت استفاده در کامپوننت‌های انتخاب.

پارامترهای ورودی

نام نوع محل الزامی توضیح
query string query بله عبارت جست‌وجو (نام، نام‌خانوادگی یا شناسه عددی)
limit integer query خیر حداکثر تعداد نتایج برگردانده‌شده (پیش‌فرض: ۲۰)
branch string query خیر در صورت ارسال، جست‌وجو فقط در آن شعبه انجام می‌شود
cache boolean query خیر در صورت false، داده به اجبار از DB خوانده می‌شود

ساختار خروجی

{
  "status": true,
  "results": [
    {
      "id": 142,
      "title": "آژانس تابان پرواز",
      "meta": {
        "type": "Creditor",
        "category": "آژانس",
        "financial_code": "103245897",
        "phone": "+98-31-32110"
      }
    },
    ...
  ],
  "cache": true
}

نکات امنیتی

  • برای جلوگیری از نشت داده، فقط فیلدهای ضروری برگردانده می‌شوند.
  • در صورت ورود نقش مالی (finance.admin) فیلد کد اقتصادی هم ضمیمه می‌شود.
  • همهٔ نتایج از طریق Middleware authWithJwt بررسی خواهند شد.

نکات عملکردی

  • درصورت فعال بودن cache، پاسخ زیر ۵ ms خواهد بود.
  • فهرست فشرده (LightList) در Redis هر ۶۰ دقیقه توسط job SyncColleaguesLightList به‌روزرسانی می‌شود.
  • جست‌وجوی پایگاه داده با شاخص مرکب روی office + financial_code انجام می‌شود.

Dependencies

  • use Illuminate\Support\Facades\DB;
  • use Illuminate\Support\Facades\Redis;
  • use App\Models\Colleague;
  • use App\Models\ColleagueAdditional;
  • use Illuminate\Http\Request;

کدهای خطا

کد شرح منبع
400 عبارت جست‌وجو خالی یا غیرمجاز است Validation
401 توکن JWT منقضی یا نامعتبر است Middleware
429 تعداد درخواست بیش از حد مجاز (Rate Limit) Throttle
500 خطای داخلی SQL یا Redis DB/Redis

پیشنهادهای امنیتی

  • اعمال الگوریتم جست‌وجوی case‑insensitive و safe‑encoding برای جلوگیری از SQL Injection.
  • اجرای Rate‑Limit ۵ درخواست در ثانیه برای هر توکن.
  • ثبت تمام جست‌وجوها در system_logs جهت پایش رفتار کاربران.

پیشنهادهای توسعه‌ای

  • افزودن fuzzy‑matching (Persian Similarity) برای خطاهای تایپی رایج.
  • پشتیبانی از جست‌وجوی phonetic (آواشناسی نام‌ها).
  • مدیریت cache Scope‑Based برای شرکت‌های دارای چند شعبه.

ممیزی و لاگ‌ها

  • ثبت در system_logs با event: ColleagueSearch.
  • فیلدهای لاگ‌شده: user_id, query, results_count, cached, timestamp.
  • درصورت ۵ بار جست‌وجوی متوالی بدون نتیجه → هشدار امنیتی.

جمع‌بندی

تابع searchColleague رابط اصلی جست‌وجوی سریع همکاران در کل مجموعه است که با تکیه بر Redis و Query بهینه، تجربه‌ی سرعتی و پاسخ‌گویی بلادرنگ را فراهم می‌کند. این endpoint اساس تمام drop‑down ها و autocomplete های سیستم مدیریت مالی و تجاری است.