# POST /pay/update

<div id="bkmrk-" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>### Route Info

<div id="bkmrk-method-endpoint-cont" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"><table border="1" cellpadding="6" style="width: 96%; margin: 15px auto; text-align: center; border-collapse: collapse;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>Method</td><td>Endpoint</td><td>Controller</td><td>Middleware</td><td>Purpose</td></tr><tr><td dir="ltr">POST</td><td dir="ltr">/api/v2/pay/update</td><td dir="ltr">V2CreditDebitController@updatePay</td><td dir="ltr">authWithJwt</td><td dir="rtl">بروزرسانی اطلاعات تراکنش پرداخت ثبت‌شده (Pay) شامل نوع، مبلغ، تاریخ و وضعیت تراکنش.</td></tr></tbody></table>

</div>### منطق عملکرد تابع

تابع **updatePay** برای اصلاح رکوردهای موجود در جدول `pays` طراحی شده است. ابتدا داده‌های ارسالی از درخواست (`$request->json`) به‌صورت آرایه دیکد شده و صحت کلیدهای الزامی مانند `id` بررسی می‌شود. سپس با استفاده از `DB::table('pays')->where('id', ...)->update([...])` مقداردهی مجدد فیلدهای تراکنش انجام می‌گیرد. پس از اتمام عملیات، کش Redis برای مرجع مربوطه (`reference:<id>:information`) با داده‌های جدید بازسازی می‌شود.

<div id="bkmrk--1" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>### ورودی‌ها

<div id="bkmrk-%D9%86%D8%A7%D9%85-%D9%BE%D8%A7%D8%B1%D8%A7%D9%85%D8%AA%D8%B1-%D9%86%D9%88%D8%B9-%D9%85%D9%86%D8%A8%D8%B9" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"><table border="1" cellpadding="6" style="width: 94%; margin: 15px auto; text-align: center; border-collapse: collapse;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>نام پارامتر</td><td>نوع</td><td>منبع</td><td>الزامی</td><td>توضیح</td></tr><tr><td>json</td><td>string (JSON)</td><td>Body</td><td>بله</td><td>حاوی داده‌های تراکنش اصلاح‌شده.</td></tr><tr><td>id</td><td>integer</td><td>Body→JSON</td><td>بله</td><td>شناسه تراکنش در جدول `pays` که باید بروزرسانی شود.</td></tr><tr><td>type</td><td>string</td><td>Body→JSON</td><td>بله</td><td>نوع تراکنش (payment یا receive).</td></tr><tr><td>currency\_amount</td><td>string</td><td>Body→JSON</td><td>بله</td><td>مبلغ جدید تراکنش.</td></tr><tr><td>wage</td><td>string</td><td>Body→JSON</td><td>خیر</td><td>کارمزد اصلاح‌شده تراکنش.</td></tr><tr><td>status.id</td><td>integer</td><td>Body→JSON</td><td>خیر</td><td>شناسه وضعیت جدید تراکنش.</td></tr><tr><td>deadline</td><td>string (YYYY/MM/DD)</td><td>Body→JSON</td><td>خیر</td><td>تاریخ جدید مهلت پرداخت.</td></tr><tr><td>description</td><td>string</td><td>Body→JSON</td><td>خیر</td><td>توضیحات تراکنش.</td></tr></tbody></table>

</div>### خروجی (Response)

```
{
  "status": true,
  "updated_id": 1091,
  "meta": {
    "timestamp": 1732287600
  },
  "cache_updated": true
}
```

<div id="bkmrk--2" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>### نکات امنیتی

<div id="bkmrk-%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87%D9%88%DB%8C%D8%AA-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86-%D8%A7" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- احراز هویت کاربران از طریق JWT انجام می‌شود.
- بروزرسانی فقط در محدوده همان شعبه کاربر امکان‌پذیر است.
- قبل از هر عملیات به‌روزرسانی، شناسه تراکنش با branch مرتبط بررسی می‌شود تا از Cross-Branch Injection جلوگیری گردد.

</div>### نکات عملکردی

<div id="bkmrk-%D8%AF%D8%B1-%D8%B5%D9%88%D8%B1%D8%AA-%D9%88%D8%AC%D9%88%D8%AF-%D8%AA%D8%B1%D8%A7%DA%A9%D9%86%D8%B4%E2%80%8C" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- در صورت وجود تراکنش‌های سنگین، استفاده از `updateBatch()` پیشنهاد می‌شود.
- بروزرسانی کش Redis به‌صورت asynchronous برای پاسخ سریع‌تر انجام شود.
- توصیه به ذخیره تغییرات در جدول `audit_logs` با سطح Critical.

</div>### وابستگی‌ها

<div id="bkmrk-use-illuminate%5Csuppo" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- use Illuminate\\Support\\Facades\\DB;
- use Illuminate\\Support\\Facades\\Redis;
- use Carbon\\Carbon;
- use App\\Http\\Controllers\\TradeController;
- use App\\Http\\Controllers\\StaticController;

</div>### کدهای خطا

<div id="bkmrk-%DA%A9%D8%AF-%D8%B4%D8%B1%D8%AD-%D8%AE%D8%B7%D8%A7-%D9%85%D9%86%D8%A8%D8%B9-400-" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"><table border="1" cellpadding="6" style="width: 90%; margin: 15px auto; text-align: center; border-collapse: collapse;"><tbody><tr style="background: #f9f9f9; font-weight: bold;"><td>کد</td><td>شرح خطا</td><td>منبع</td></tr><tr><td>400</td><td>ورودی JSON ناقص یا فرمت نامعتبر.</td><td>json\_decode()</td></tr><tr><td>404</td><td>تراکنش با شناسه داده‌شده یافت نشد.</td><td>DB Query</td></tr><tr><td>500</td><td>خطای سیستم در بروزرسانی یا بازسازی کش Redis.</td><td>DB/Redis</td></tr></tbody></table>

</div>### پیشنهادهای امنیتی

<div id="bkmrk-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%D9%85%D8%AD%D8%AF%D9%88%D8%AF%DB%8C%D8%AA-%D9%86%D8%B1%D8%AE-%D8%A8" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- افزودن محدودیت نرخ بروزرسانی برای جلوگیری از حملات DDoS مالی.
- ثبت هش جدید در فیلد `hash_signature` برای تشخیص تغییرات بحرانی.
- اعمال RBAC بر اساس سطح دسترسی "financial.moderator".

</div>### پیشنهادهای بهبود

<div id="bkmrk-%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86%DB%8C-%D8%A7%D8%B2-%D8%A8" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- افزودن پشتیبانی از بروزرسانی گروهی چند تراکنش همزمان.
- در پاسخ خروجی نمایش جزئیات قبل و بعد از تغییر (diff snapshot).
- ثبت تاریخچه همه تغییرات در جدول کمکی `pays_history`.

</div>### ممیزی و لاگ‌ها

<div id="bkmrk-%D9%86%D9%88%D8%B9-%D9%84%D8%A7%DA%AF%3A-updatepaytr" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;">- نوع لاگ: `UpdatePayTransaction`.
- فیلدهای ثبت: `operator_id, branch, pay_id, old_data, new_data`.
- سطح لاگ: **Critical**.
- مدت نگهداری ممیزی: ۱۸۰ روز.

</div>### جمع‌بندی

این مسیر برای بروزرسانی امن و سریع تراکنش‌های پرداخت طراحی شده است. با احراز JWT، کنترل نقش، و همگام‌سازی کش Redis، سازوکار کاملاً قابل اعتماد برای ویرایش داده‌های مالی فراهم می‌کند.

<div id="bkmrk-pay-update" style="font-family: Vazir, Tahoma; direction: rtl; text-align: justify; line-height: 1.9;"></div>