#P1497
POST /check/store
Route Info
| Method | Endpoint | Controller | Middleware | Purpose |
| POST | /api/v2/check/store | V2CreditDebitController@storeCheck | authWithJwt | ثبت گروهی چکهای مالی در جدول پرداختها و بروزرسانی کش مالی شعبه. |
منطق عملکرد تابع
تابع storeCheck دادههای ارسالی مربوط به چکهای مالی را از بدنه درخواست دریافت میکند و پس از بررسی نوع پرداخت (پرداخت یا دریافت)، آنها را در جدول pays درج میکند.
شناسه سریال هر چک از طریق تابع StaticController::getSerialId('pay', branch, year) تعیین میشود. بعد از ثبت درون تراکنش DB::transaction، کش اطلاعات مالی در Redis بروزرسانی میشود تا تغییرات لحظهای اعمال شوند.
ورودیها
| نام پارامتر | نوع | منبع | الزامی | توضیح |
| data | array | Body | بله | آرایهای از چکها جهت ثبت تکی یا گروهی. |
| branch | integer | JWT/Header | بله | شناسه شعبه ثبتکننده. |
| operator | object | JWT | بله | شناسه کاربر ثبتکننده چکها. |
| object_type | string | Body | بله | نوع هدف چک (reference, aggregation, colleague). |
| object | integer | Body | بله | شناسه منبع مالی یا فاکتور مربوط. |
خروجی (Response)
{
"status": true,
"time": 1732287600,
"result": {
"inserted": 5,
"tracking_ids": ["CHK-88421", "CHK-88422", "CHK-88423"],
"cached": "financial:branch:5:synced"
}
}
نکات امنیتی
- احراز هویت JWT اجباری است.
- فقط نقشهای دارای سطح
financial.check.storeمجاز به درج هستند. - بررسی موجودی حساب قبل از درج تراکنشها انجام میشود (Wallet Check).
نکات عملکردی
- ثبت چکها درون
DB::transactionباعث حفظ یکپارچگی دادههای مالی میشود. - در پایان درج، دادههای مرتبط در Redis با کلید
reference:{object}:informationبروزرسانی میشوند. - میتوان در نسخه آینده cache invalidation هوشمند بر اساس
year financialافزود.
وابستگیها
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Redis;
- use App\Http\Controllers\TradeController;
- use App\Http\Controllers\StaticController;
- use Carbon\Carbon;
- use App\Models\Pay;
کدهای خطا
| کد | شرح خطا | منبع |
| 400 | دادههای چک ناقص یا نامعتبر. | Validator |
| 403 | دسترسی مجاز برای ثبت چک وجود ندارد. | authWithJwt |
| 500 | خطا در درج دادهها یا بروزرسانی کش Redis. | DB Layer / Redis |
پیشنهادهای امنیتی
- رمزنگاری شناسه چک و شماره حساب در فرانتاند.
- اعمال محدودیت ۵ درخواست در دقیقه برای هر کاربر.
- بررسی Anti‑Replay برای درخواستهای تکراری با همان Tracking Code.
پیشنهادهای بهبود
- افزودن فیلد
wallet_effect:trueبرای بروزرسانی بلادرنگ کیف پول. - پشتیبانی از درج async جهت کاهش latency.
- اتصال به سرویس گزارش مالی مرکزی جهت اعتبارسنجی چکها قبل از ثبت.
ممیزی و لاگها
- نوع لاگ:
StoreCheck. - ثبت فیلدها:
operator_id, branch, count_inserted. - سطح لاگ: Notice.
- مدت نگهداری: ۳۰ روز در جدول
audit_logs.
جمعبندی
تابع storeCheck مسئول ثبت تراکنشهای مالی نوع چک است و پس از درج در پایگاه داده، تمام کشهای مالی مرتبط با شعبه یا منبع هدف را بروزرسانی میکند. طراحی تابع بهصورت اتمیک، امن و مناسب عملیات گروهی چکها پیاده شده است.