Skip to main content
#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 مجدداً بروزرسانی می‌شوند تا توازن مالی حفظ گردد.