#P1493
DELETE /pay/trash
Route Info
| Method |
Endpoint |
Controller |
Middleware |
Purpose |
| DELETE |
/api/v2/pay/trash |
V2CreditDebitController@trashPay |
authWithJwt |
حذف نرم سند پرداخت از سیستم مالی با بررسی دوره مالی بستهشده و بروزرسانی کش Redis. |
منطق عملکرد تابع
تابع trashPay برای حذف امن و نرم (soft-delete) تراکنشهای پرداخت طراحی شده است. پیش از حذف، با استفاده از پارامتر تنظیمات دفتر (END_OF_FINANCIAL_PERIOD_CLOSING_ACCOUNTS) دوره مالی بستهشده بررسی میشود تا حذف تراکنشهای مربوط به دوره بستهشده ممنوع شود. سپس وضعیت رکورد موردنظر در جدول pays به مقدار status = 5 تغییر میکند و کش مالی در Redis بازسازی میشود.
ورودیها
| نام پارامتر |
نوع |
منبع |
الزامی |
توضیح |
| pay_id |
integer |
Body |
بله |
شناسه رکورد پرداخت برای حذف. |
| branch |
integer |
JWT/Header |
بله |
شناسه شعبه اجرایی جهت بررسی دوره مالی. |
| operator |
object |
JWT |
بله |
کاربر اجراکننده عملیات. |
خروجی (Response)
{
"status": true,
"time": 1732287600
}
نکات امنیتی
- بررسی توکن JWT برای تعیین شعبه و اپراتور الزامی است.
- در صورت بسته بودن دوره مالی، حذف نخواهد شد و کد خطای 5007 برگردانده میشود.
- در حذف فیزیکی هیچ دادهای از DB پاک نمیشود، فقط وضعیت تغییر مییابد.
نکات عملکردی
- کش Redis برای مراجع مرتبط (
reference:id:information) بلافاصله بازسازی میشود.
- در عملیات گروهی حذف چند سند بهتر است از صف Async برای بازسازی Redis استفاده شود.
- زمان تقریبی اجرای عملیات کمتر از 300ms در حجم 1 سند است.
وابستگیها
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Redis;
- use App\Http\Controllers\TradeController;
- use Carbon\Carbon;
- use App\Jobs\SystemLog;
کدهای خطا
| کد |
شرح خطا |
منبع |
| 5007 |
دوره حسابداری بسته است؛ حذف سند ممکن نیست. |
officeConfig() |
| 5005 |
خطا در عملیات حذف یا Redis. |
catch(Exception $e) |
| 403 |
عدم تطابق شعبه با دوره مالی جاری. |
authWithJwt |
پیشنهادهای امنیتی
- اعمال محدودیت در حذف توسط نقش مالی ارشد (
financial.admin).
- ثبت هر حذف در
SystemLog با Queue دیراجرا (snailJob).
- رمزگذاری شناسه سند در درخواست کلاینت جهت جلوگیری از تزریق ID.
پیشنهادهای بهبود
- افزودن گزینه
restore برای بازیابی اسناد حذفشده.
- مدیریت نسخه تاریخچه حذفها در
audit_logs.
- افزودن کش گروهی برای حذفهای تجمیعی در سطح شعبه.
ممیزی و لاگها
- نوع لاگ:
TrashPay.
- فیلدهای ثبت:
operator_id, branch, pay_id.
- سطح لاگ: Critical.
- نگهداری لاگ: ۹۰ روز.
جمعبندی
تابع trashPay حذف نرم و کنترلشده تراکنشهای پرداخت را با بررسی بسته بودن دوره مالی امکانپذیر میسازد. پس از حذف، دادههای Redis مجدداً بروزرسانی میشوند تا توازن مالی حفظ گردد.