Skip to main content
#P1401

POST /api/v2/trade/edit

Route Info

Method Endpoint Controller Middleware Purpose
POST /api/v2/trade/edit V2TradeController@editTrade authWithJwt ویرایش جزئیات فاکتور یا ادغام رفرنس‌های مالی

منطق عملکرد

  • ورودی action تعیین‌کننده نوع عملیات است؛ شامل پنج حالت متمایز:
  1. financial_description: ویرایش توضیحات مالی فاکتور (فیلد financial_desc) و ثبت لاگ.
  2. details: بروزرسانی فیلدهای عمومی شامل description، print، income، leader و status + پاکسازی Cache Redis مربوطه.
  3. merge: ادغام دو رفرنس مالی. بررسی مطابقت operator هر دو رفرنس و جابجایی factor_items از یکی به دیگری.
  4. created: ویرایش تاریخ ایجاد رفرنس. اگر تاریخ بعد از بسته‌شدن حساب‌های مالی باشد، عملیات رد می‌شود با کد 5007.
  5. announcement: ویرایش گروهی وضعیت (status) یا چاپ (print) برای چند رفرنس.
  • تمام تغییرات با dispatch به SystemLog در صف snailJob ثبت می‌شوند.
  • در صورت نیاز، کش‌های Redis با کلیدهای مرتبط با آن فاکتور حذف یا به‌روزرسانی می‌گردند.
  • تمام مسیرها در بلوک try/catch محصورند؛ خطاهای سیستم با کد 5005 بازگردانده می‌شوند.
  • ورودی‌ها

    نام فیلد نوع داده ضروری توضیح
    action string بله نوع عملیات (financial_description, details, merge, created, announcement)
    serial_id int بله شناسه رفرنس موردنظر برای ویرایش
    financial_description string در حالت financial_description متن توضیحات مالی جدید
    description string در حالت details توضیح یا شرح فاکتور
    income int در حالت details شناسه درآمد مربوط
    leader int در حالت details شناسه مشتری اصلی فاکتور
    reference_merge string در حالت merge فرمت "idA-idB" برای ادغام دو فاکتور
    created datetime در حالت created تاریخ جدید ایجاد رفرنس
    serial_ids array در حالت announcement لیست شناسه‌های فاکتورها برای ویرایش گروهی
    {
      "action": "details",
      "serial_id": 245,
      "description": "اصلاح اطلاعات مشتری",
      "income": 7,
      "leader": 28,
      "status": 2,
      "operator_reference": 5
    }

    خروجی

    فیلد نوع شرح
    status bool نتیجه عملیات (true/false)
    time int زمان سیستم هنگام پاسخ
    code int|null کد خطا در حالت ناموفق
    message string|null پیغام خطا یا توضیح
    {
      "status": true,
      "time": 1732022018
    }

    امنیت

    • همه درخواست‌ها از طریق authWithJwt احراز هویت می‌شوند.
    • عدم توانایی تغییر تاریخ رفرنس‌های بسته‌شده (بند عملکرد مالی بسته‌شده).
    • ردیابی هر تغییر توسط SystemLog با IP و عامل سیستم.
    • صف‌بندی برای جلوگیری از تراکم هم‌زمانی در نوشتن لاگ‌ها و Redis.

    کارایی

    • با حذف مستقیم Cache Redis، اطلاعات به‌روز بلافاصله در Dashboard در دسترس‌اند.
    • تغییرات سبک هستند و کمتر از ۵۰ms اجرا دارند مگر حالت merge.
    • افزودن asynchronous job در بروزرسانی Redis باعث کاهش زمان پاسخ اولیه شده است.

    وابستگی‌ها

    • use Carbon\\Carbon;
    • use Illuminate\\Support\\Facades\\DB;
    • use Illuminate\\Support\\Facades\\Redis;
    • use App\\Helpers\\Functions;
    • use App\\Jobs\\SystemLog;
    • use App\\Jobs\\UpdateRedis;
    • use Morilog\\Jalali\\Jalalian;

    کدهای خطا

    کد شرح منبع
    5004 تلاش برای ادغام فاکتورها با اپراتور متفاوت action=merge
    5005 خطا در روند ویرایش یا تراکنش پایگاه داده catch(Exception)
    5007 تلاش برای تغییر تاریخ در بازه بسته مالی action=created

    پیشنهادهای بهبود

    • ولیدیشن مرکزی برای مقدار action پیش از ورود به منطق اصلی.
    • تجمیع dispatchهای SystemLog برای کاهش حجم صف.
    • گزارش‌گیری بصری تغییرات Redis برای مانیتورینگ دقیق‌تر cache hit/miss.

    جمع‌بندی

    متد editTrade واحد ویرایشی انعطاف‌پذیر سیستم است که چند نوع تغییر مختلف را زیر یک endpoint سامان می‌دهد. با ساختار فعلی تمام ویرایش‌ها در عین سرعت، قابل ردیابی و audit کامل هستند. ترکیب Redis و SystemLog باعث توازن ایده‌آل بین كارایی و امنیت شده است.