Skip to main content
#P1590

GET /v2/wallet/transactions

Route Info

Method Endpoint Controller
GET /v2/wallet/transactions AccountingController@transactionsWallet

شرح عملکرد (Functionality)

این متد برای دریافت لیست تراکنش‌های کیف پول استفاده می‌شود و داده‌ها را پس از پردازش سنگین (شامل joinهای متعدد، تبدیل داده‌ها، تعیین subject/object/operator، لینک‌دهی رزرو و فاکتور، و ساخت ساختار نهایی) برمی‌گرداند.

  • صفحه‌بندی (Pagination) به صورت دستی با پارامترهای start و length انجام می‌شود.
  • اگر پارامتر branch != 1 باشد، فقط تراکنش‌های همان شعبه برگشت داده می‌شوند.
  • اگر branch == 1 باشد، تمام تراکنش‌های کل سیستم برگردانده می‌شود (نقص امنیتی جدی).
  • برای هر رکورد بین 5 تا 8 کوئری دیتابیس زده می‌شود (N+1 Query) که در مقیاس بزرگ بسیار کند است.

پارامترهای ورودی (Query + Body)

Query Params

?branch=101
  • branch: اگر مقدار 1 باشد → هیچ فیلتری اعمال نمی‌شود و کل داده‌ها خوانده می‌شوند.

Body Params (paginate)

{
  "paginate": {
    "start": 0,
    "length": 20
  }
}
  • start: عدد offset
  • length: تعداد آیتم در هر صفحه (اگر صفر باشد → خطای تقسیم بر صفر)

خروجی (Response)

موفق (Success)

{
  "items": [
    {
      "id": 10023,
      "subject": "خرید از هاب توسط دفتر ایکس",
      "object": "دفتر ایکس (1023)",
      "credit": 500000,
      "debit": 0,
      "description": "متن توضیحات | رفرنس ...",
      "operator": {
          "id": 4,
          "text": "1234 - علی رضایی",
          "query": { ... }
      },
      "service": "دفتر سرویس",
      "sub_service": "دفتر زیرسرویس",
      "details": { ... },
      "confirm_at": "2024-06-15 12:11:05",
      "confirm_note": null,
      "confirm_by": { ... }
    }
  ],
  "meta": {
    "timestamp": 1715780023,
    "table": {
      "total": 200,
      "per_page": 20,
      "current_page": 1,
      "last_page": 10,
      "from": 1,
      "to": 20
    }
  }
}

خطا (Error)

در صورت بروز Exception (مثلاً موارد زیر):

  • نبودن فیلد paginate
  • صفر بودن length
  • خراب بودن داده Redis
  • وجود نداشتن رزرو/فاکتور/اپراتورهای مورد نیاز
  • N+1 Query timeout
{
  "error": {
    "code": 500,
    "message": "Exception message...",
    "trace": [ ... ]
  }
}

`