# GET /v2/wallet/transactions

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

<div id="bkmrk-method-endpoint-cont" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;"><div><table border="1" style="width: 100%; margin: auto; border-collapse: collapse; text-align: center; border: 1px solid #ddd;"><tbody><tr style="background: #f4f4f4; font-weight: bold;"><td style="padding: 10px;">Method</td><td style="padding: 10px;">Endpoint</td><td style="padding: 10px;">Controller</td></tr><tr><td style="direction: ltr; padding: 10px;">GET</td><td style="direction: ltr; padding: 10px;">/v2/wallet/transactions</td><td style="direction: ltr; padding: 10px;">AccountingController@transactionsWallet</td></tr></tbody></table>

</div></div>### شرح عملکرد (Functionality)

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

<div id="bkmrk-%D8%B5%D9%81%D8%AD%D9%87%E2%80%8C%D8%A8%D9%86%D8%AF%DB%8C-%28paginatio" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;">- صفحه‌بندی (Pagination) به صورت دستی با پارامترهای `start` و `length` انجام می‌شود.
- اگر پارامتر `branch != 1` باشد، فقط تراکنش‌های همان شعبه برگشت داده می‌شوند.
- اگر `branch == 1` باشد، **تمام تراکنش‌های کل سیستم** برگردانده می‌شود (نقص امنیتی جدی).
- برای هر رکورد بین 5 تا 8 کوئری دیتابیس زده می‌شود (N+1 Query) که در مقیاس بزرگ بسیار کند است.

</div>### پارامترهای ورودی (Query + Body)

#### Query Params

```
?branch=101
```

<div id="bkmrk-branch%3A-%D8%A7%DA%AF%D8%B1-%D9%85%D9%82%D8%AF%D8%A7%D8%B1-1-" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;">- **branch**: اگر مقدار 1 باشد → هیچ فیلتری اعمال نمی‌شود و کل داده‌ها خوانده می‌شوند.

</div>#### Body Params (paginate)

```
{
  "paginate": {
    "start": 0,
    "length": 20
  }
}
```

<div id="bkmrk-start%3A-%D8%B9%D8%AF%D8%AF-offset-le" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;">- **start**: عدد offset
- **length**: تعداد آیتم در هر صفحه (اگر صفر باشد → خطای تقسیم بر صفر)

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

#### موفق (Success)

```
{
  "items": [
    {
      "id": 10023,
      "subject": "خرید از هاب توسط دفتر ایکس",
      "object": "دفتر ایکس (1023)",
      "credit": 500000,
      "debit": 0,
      "description": "متن توضیحات | <a href="https://docs.airplus.app/...">رفرنس ...</a>",
      "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
    }
  }
}
```

<div id="bkmrk--1" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;"></div>### خطا (Error)

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

<div id="bkmrk-%D9%86%D8%A8%D9%88%D8%AF%D9%86-%D9%81%DB%8C%D9%84%D8%AF-paginate-" style="direction: rtl; font-family: Vazir,Tahoma; text-align: justify; line-height: 1.85;">- نبودن فیلد paginate
- صفر بودن length
- خراب بودن داده Redis
- وجود نداشتن رزرو/فاکتور/اپراتورهای مورد نیاز
- N+1 Query timeout

</div>```
{
  "error": {
    "code": 500,
    "message": "Exception message...",
    "trace": [ ... ]
  }
}
```

`