Skip to main content
#P1484

DELETE /api/v2/base/certificate

Route Info

Method Endpoint Controller Middleware Purpose
DELETE /api/v2/base/certificate V2BaseController@deleteCertificate authWithJwt حذف گواهی‌نامه مشخص از جدول certificates براساس شناسه و شعبه درخواستی.

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

تابع deleteCertificate برای حذف یک گواهی‌نامه خاص با توجه به شعبه و شناسه گواهی عمل می‌کند. این روش، مستقیماً جدول certificates را هدف قرار می‌دهد و رکورد منطبق را حذف می‌نماید. اگر حذف موفق باشد، پاسخ HTTP 204 (بدون محتوا) برمی‌گردد. در صورت بروز خطا در اجرای کوئری پایگاه داده، یک پاسخ JSON از نوع خطا ارسال می‌شود.

منطق کلی تابع:
  • دریافت ورودی branch از JWT یا Request.
  • دریافت پارامتر id از query/body.
  • اجرای دستور DB::table('certificates')->where('branch', branch)->where('id', id)->delete().
  • در صورت موفقیت، بازگشت پاسخ خالی با Status Code 204.
  • در صورت Exception، بازگرداندن ساختار JSON حاوی جزئیات خطا و trace.

ورودی‌ها

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

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

DELETE /api/v2/base/certificate?id=128
Authorization: Bearer {JWT_TOKEN}

خروجی (Response)

پاسخ موفق (بدون محتوا):

HTTP/1.1 204 No Content

نمونه پاسخ در صورت خطا:

{
  "meta": { "timestamp": 1750669255 },
  "error": {
    "code": 400,
    "message": "خطای پایگاه داده در حذف گواهی‌نامه.",
    "trace": [...]
  }
}

نکات امنیتی

  • مسیر فقط برای کاربران احراز‌شده دارای توکن JWT معتبر در دسترس است.
  • دسترسی باید محدود به شعبهٔ تعریف‌شده در توکن کاربر باشد؛ جلوگیری از حذف بین‌شعبه‌ای الزامی است.
  • هیچ پاسخ حاوی دادهٔ حساس در صورت موفقیت ارسال نمی‌شود (Status 204).

نکات عملکردی

  • عملیات حذف مستقیم روی DB انجام می‌شود و فاقد مرحله گردش در حافظه است.
  • در حجم پایین جدول certificates، نیازی به ایندکس جداگانه نیست؛ اما پیشنهاد می‌شود ایندکس ترکیبی بر اساس (branch, id) اضافه شود.
  • در صورت بالاتر از ۵۰۰۰ رکورد، حذف انبوه بهتر است با Job asynchronous انجام گیرد.

وابستگی‌ها

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

کدهای خطا

کد شرح خطا منبع
400 خطای اجرای کوئری یا Exception داخلی هنگام حذف. Catch(Exception)
404 شناسه مدرک یافت نشد یا شعبه با آن مطابقت ندارد. deleteCertificate()
500 خطای ارتباط یا I/O در پایگاه داده. DB Facade

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

  • افزودن کنترل نقش: فقط کاربران با نقش DataManager یا DocumentAdmin مجاز به حذف باشند.
  • ثبت عملیات در جدول audit_log شامل id و operator_id.
  • بررسی صحت JWT expiration تا از دسترسی‌های منقضی جلوگیری شود.

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

  • استفاده از SoftDelete برای حفظ تاریخچهٔ حذف‌ها در آینده.
  • بازگرداندن جزئیات حذف‌شده برای تأیید اپراتور قبل از حذف دائمی.
  • افزودن لاگ Redis برای ثبت تعداد حذف‌ها در هر شعبه.
  • امکان مدیریت چندگانه (Batch Delete) در نسخه بعدی API.

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

  • نوع لاگ: DeleteCertificate.
  • فیلدهای پیشنهادی: operator_id، branch، certificate_id، timestamp.
  • سطح اهمیت: Critical.

جمع‌بندی

مسیر DELETE /base/certificate عملیات حذف ساده ولی حساس گواهی‌نامه‌ها را انجام می‌دهد. به دلیل ماهیت destructive عمل، لازم است کنترل سطح دسترسی و ممیزی دقیق فعال باشد. در نسخه بعدی، استفاده از SoftDelete و ثبت رویداد حذف در Redis توصیه می‌شود.