#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 توصیه میشود.