#P1520
GET /colleague/get
Route Info
| Method |
Endpoint |
Controller |
Middleware |
Purpose |
| GET |
/api/v2/colleague/get |
V2ColleaguesController@getColleague |
authWithJwt |
دریافت جزئیات کامل یک همکار (colleague) شامل اطلاعات عمومی، مالی و ارتباطی |
منطق عملکرد تابع
تابع getColleague برای خواندن جزئیات کامل یک همکار از پایگاه داده طراحی شده است. ورودی شامل شناسه همکار میباشد که از query string در GET request دریافت میشود. در خروجی، دادهها از جداول colleagues، colleague_additional و وابستگیها تجمیع میشود. چنانچه داده در کش Redis موجود باشد، تابع مستقیماً از آن استفاده میکند و در غیر این صورت از Database خوانده، سپس در Redis ذخیره میکند.
- خواندن پارامتر
id از Query string.
- بررسی موجود بودن cache (کلید:
colleague:{id}) در Redis.
- در صورت وجود → بارگذاری داده از cache، در غیر این صورت:
- دریافت رکورد اصلی از جدول
colleagues.
- پیوستن دادهٔ اضافی از
colleague_additional.
- دریافت روابط از
mapping_colleagues (در حوزه شرکت اصلی).
- تبدیل فیلدهای ساختاریافته (dates, phone, category, type) به قالب خروجی استاندارد UI.
- ارسال نتیجهٔ نهایی به صورت JSON.
پارامترهای ورودی
| نام |
نوع |
محل |
الزامی |
توضیح |
| id |
integer |
query |
بله |
شناسه همکار |
| branch |
string |
query |
خیر |
شناسه شعبه برای اعمال محدودیت دامنه |
| cache |
boolean |
query |
خیر |
اگر false باشد، کش نادیده گرفته میشود و داده از DB بارگذاری میشود |
ساختار خروجی
{
"status": true,
"data": {
"id": 142,
"office": "آژانس تابان پرواز",
"type": 3,
"category": 4,
"diagnosis": "Creditor",
"financial_code": "103245897",
"credit_amount": 50000000,
"phone": "+98-31-32110",
"email": "info@taban.ir",
"branch": "isfahan",
"relationship": "official",
"created_at": "2025-04-21 11:22:53",
"updated_at": "2025-11-23 14:47:15",
"additional": {
"iban": "IR210550080300087123456001",
"address": "اصفهان، خیابان حکیم نظامی، ساختمان مهر"
}
},
"cache": true
}
نکات امنیتی
- دسترسی فقط برای کاربران با نقشهای
finance.read یا crm.viewer.
- دادههای مالی حساس (financial_code, iban) فقط برای مدیر مالی بازمیگردند.
- کنترل سطح دسترسی اضافی با policy
CanViewColleague انجام میشود.
نکات عملکردی
- در حالت cache فعال، زمان پاسخ زیر ۱۰ ms میباشد.
- هر بار cache پس از update در تابع
operationColleague با job UpdateRedis بهروزرسانی میشود.
- کلید کش:
colleague:{id} و ساختار ساده JSON ذخیرهشده.
Dependencies
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Redis;
- use App\Models\Colleague;
- use App\Models\ColleagueAdditional;
- use App\Models\MappingColleagues;
کدهای خطا
| کد |
شرح |
منبع |
| 400 |
پارامتر id ارسال نشده |
Validation |
| 401 |
توکن JWT نامعتبر یا منقضی است |
Middleware |
| 404 |
همکار در سیستم یافت نشد |
DB Query |
| 500 |
خطای داخلی پایگاه داده یا Redis |
Exception Handler |
پیشنهادهای امنیتی
- رمزنگاری فیلدهای حساس پیش از ارسال (خصوصاً کد مالی و IBAN).
- محدود کردن نرخ درخواست (Rate Limit) روی Endpoint برای جلوگیری از enumeration.
- ثبت لاگ دسترسی کاربران برای هر فراخوانی.
پیشنهادهای توسعهای
- امکان درخواست چندگانه (Bulk Fetch) بر اساس آرایه شناسهها.
- افزودن فیلد
last_transaction_at جهت نشان دادن آخرین تعامل مالی همکار.
- پیادهسازی response cache expiring بر اساس TTL پویا.
ممیزی و لاگها
- Event ممیزی:
ColleagueFetched
- فیلدهای لاگ:
user_id, colleague_id, ip, user_agent, cached, datetime
- ثبت گزارش در جدول
system_logs با نوع read_colleague
جمعبندی
تابع getColleague مرجع اصلی برای ارائهٔ جزئیات کامل هر همکار است و به علت وابستگی به کش Redis سرعت پاسخ بالاست. در فرآیندهای مالی و مدیریتی، این endpoint پایهای برای نمایش اطلاعات همکار در تمامی ماژولها (تجارت، حسابداری، آمار) محسوب میشود.