Skip to main content
#P1485

GET /api/v2/base/certificate

Route Info

Method Endpoint Controller Middleware Purpose
GET /api/v2/base/certificate V2BaseController@showCertificate authWithJwt واکشی مشخصات گواهی‌نامه‌ی خاص بر اساس id و شعبه کاربر.

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

تابع showCertificate داده‌ی یک گواهی‌نامه خاص را از جدول certificates واکشی می‌کند. ورودی‌های branch از JWT و id از Request دریافت می‌شود. سپس فیلدهای غیرضروری (مانند created_at، updated_at و branch) از خروجی حذف می‌شوند و شیء نهایی در قالب کلید payload به کاربر برگردانده می‌شود.

ورودی‌ها

نام پارامتر نوع داده منبع الزامی توضیح
branch integer JWT / Header بله شناسه شعبه کاربر.
id integer Query / Body بله شناسه گواهی‌نامه موردنظر برای نمایش جزئیات آن.

نمونه درخواست:

GET /api/v2/base/certificate?id=129
Authorization: Bearer {JWT_TOKEN}

خروجی (Response)

فیلد نوع داده توضیح
payload.id integer شناسه گواهی‌نامه.
payload.title string عنوان گواهی‌نامه.
payload.license_number string شماره مجوز یا سریال گواهی‌نامه.
payload.exporter string نهاد صادرکننده گواهی.
payload.expiration string|date تاریخ انقضای گواهی.
payload.document string مسیر فایل پیوست (تصویر یا PDF) در Storage.
payload.content string محتوای متنی گواهی در صورت وجود.
meta.timestamp integer زمان سیستم در لحظه پاسخ.

نمونه پاسخ:

{
  "meta": {
    "timestamp": 1750669255
  },
  "payload": {
    "id": 129,
    "title": "مجوز درجه دو",
    "license_number": "LIC-2025-23",
    "exporter": "وزارت گردشگری ایران",
    "expiration": "2025-12-30",
    "document": "media/certificates/license.png",
    "content": null,
    "description": "گواهی معتبر رزرو اقامتگاه سطح دو."
  }
}

نکات امنیتی

  • احراز هویت با JWT الزامی است.
  • فیلتر روی branch باعث جلوگیری از دسترسی بین‌شعبه‌ای می‌شود.
  • فایل یا مسیر سند مستقیماً ارسال نمی‌شود، تنها مسیر کنترل‌شده برمی‌گردد.

نکات عملکردی

  • کوئری ساده با خروجی مستقیم و بدون Join.
  • بدلیل درخواست تکی، نیاز به Cache Redis ندارد (اما قابل پیاده‌سازی با TTL 2m).
  • پاسخ JSON سبک و بدون سربار پردازشی است.

وابستگی‌ها

  • use Illuminate\Support\Facades\DB;
  • use Exception;
  • use Illuminate\Http\Request;
  • use Illuminate\Support\Facades\Response;

کدهای خطا

کد شرح خطا منبع
400 خطا در اجرای کوئری یا Exception داخلی. Catch(Exception)
404 گواهی‌نامه با این شناسه یافت نشد. DB::first()

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

  • افزودن بررسی مجاز بودن نقش کاربر (can('view_certificate')).
  • رمزنگاری مسیر فایل document در Storage.
  • اعمال Rate Limiting در سطح IP برای جلوگیری از Brute Force روی idها.

پیشنهادهای بهبود

  • افزودن پارامتر preview=true برای نمایش تصویر بندانگشتی.
  • افزودن فیلد نسخه‌گذاری در گواهی‌نامه‌ها جهت History Tracking.
  • اتصال سیستم هشدار انقضا به کنترلر Dashboard.

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

  • نوع لاگ پیشنهادی: ReadCertificateDetails.
  • شامل فیلدهای: operator_id، branch، certificate_id.
  • سطح لاگ: Info.

جمع‌بندی

این مسیر برای واکشی دقیق اطلاعات هر گواهی‌نامه طراحی شده و پاسخ سبک و تمیز JSON با کلید payload ارائه می‌دهد. برای افزایش امنیت و مقیاس‌پذیری، در نسخه آینده پیشنهاد می‌شود RBAC و Cache Redis اضافه گردد.