# GET /v2/core/application_interface

# O. List Application Interfaces (Core)

این اندپوینت برای دریافت لیست **رابط‌های نرم‌افزاری (Application Interfaces)** استفاده می‌شود. خروجی این سرویس لیستی از شعب (Offices) است که تنظیمات و دسترسی‌های مربوطه (مانند APIهای ایرلاین‌ها، دسترسی همکاران و...) به عنوان زیرمجموعه آن‌ها گروه‌بندی شده‌اند. همچنین امکان دریافت مانده حساب کیف پول هر شعبه نیز به صورت اختیاری وجود دارد.

<div class="api-docs" id="bkmrk-"></div>## Request Overview

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fcore%2Fapplic"><div class="endpoint-info"><div>**URL:** `/v2/core/application_interface`</div><div>**Method:** <span class="method-get">GET</span></div><div>**Controller:** CoreController@listApplicationInterface</div><div>**Middleware:** authWithJwt</div></div></div>## Access Control

<div class="api-docs" id="bkmrk-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87-%D8%AA%D9%88%DA%A9%D9%86-%D8%A7%D8%AD%D8%B1%D8%A7%D8%B2-%D9%87">- نیاز به توکن احراز هویت (JWT) دارد.
- داده‌ها بر اساس رکوردهای موجود در جداول `application_interface` و `offices` تجمیع می‌شوند.

</div>## Query Parameters (Filters)

<div class="api-docs" id="bkmrk-field-type-descripti"><table class="schema-table" dir="rtl"><thead><tr><th>Field</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td dir="ltr">branch</td><td dir="ltr">integer</td><td>**(اختیاری)** شناسه شعبه. در صورت ارسال، خروجی فقط شامل همین شعبه و تنظیمات مربوط به آن خواهد بود.</td></tr><tr><td dir="ltr">service</td><td dir="ltr">string</td><td>**(اختیاری)** نام سرویس (مثلاً `nira`). فقط رابط‌های مربوط به این سرویس بازگردانده می‌شوند.</td></tr><tr><td dir="ltr">type</td><td dir="ltr">string</td><td>**(اختیاری)** نوع رابط (مثلاً `api`).</td></tr><tr><td dir="ltr">status</td><td dir="ltr">integer</td><td>**(اختیاری)** وضعیت فعال/غیرفعال بودن رابط (`1` یا `0`).</td></tr><tr><td dir="ltr">balance</td><td dir="ltr">boolean</td><td>**(اختیاری)** اگر مقدار `true` یا `1` ارسال شود، سیستم مانده حساب کیف پول (Wallet) هر شعبه را محاسبه و در خروجی قرار می‌دهد.</td></tr></tbody></table>

</div>## Logic Details

فرآیند پردازش داده‌ها شامل مراحل زیر است:

<div class="api-docs" id="bkmrk-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D9%88-%D9%81%DB%8C%D9%84%D8%AA%D8%B1-%D8%B1%D8%A7%D8%A8%D8%B7%E2%80%8C">1. **دریافت و فیلتر رابط‌ها:** ابتدا داده‌ها از جدول `application_interface` بر اساس فیلترهای ورودی (branch, service, type, status) دریافت می‌شوند.
2. **غنی‌سازی داده‌ها (Data Mapping):**
    - اگر `object_type` برابر با `colleague` باشد، اطلاعات همکار (نام، سریال، آفیس) از مدل `Colleague` استخراج و جایگزین فیلد `object` می‌شود.
    - فیلدهای رشته‌ای ساده (service, type, object\_type) به ساختار استاندارد آرایه‌ای `{id, title}` تبدیل می‌شوند.
3. **گروه‌بندی:** داده‌های پردازش شده بر اساس شناسه شعبه (`branch`) گروه‌بندی می‌شوند.
4. **تجمیع با شعب (Offices):**
    - لیست شعب از جدول `offices` دریافت می‌شود (اگر فیلتر `branch` باشد، فقط همان شعبه).
    - برای هر شعبه، رابط‌های مربوطه از مرحله قبل در فیلد `items` قرار می‌گیرند.
5. **محاسبه مانده (Balance):**
    - اگر پارامتر `balance=true` باشد، متد `AccountingController::getBalanceWallet` فراخوانی می‌شود.
    - این متد مجموع `credit` و `debit` را از جدول `wallet` برای آن شعبه (با شرط `operator_type='erp'`) محاسبه می‌کند.
    - وضعیت حساب (diagnosis) به صورت `creditor` (بستانکار)، `debtor` (بدهکار) یا `neutral` تعیین می‌شود.

</div>## Response Structure

### نمونه پاسخ موفق (JSON)

```json
{
    "items": [
        {
            "id": 1,
            "title_fa": "دفتر مرکزی",
            "title_en": "Headquarters",
            "brand_fa": "برند نمونه",
            "items": [
                {
                    "id": 105,
                    "branch": 1,
                    "service": { "id": "nira", "title": "nira" },
                    "type": { "id": "api", "title": "api" },
                    "object_type": { "id": "colleague", "title": "colleague" },
                    "object": {
                        "id": 50,
                        "first_name": "Ali",
                        "last_name": "Rezaei",
                        "serial": "12345"
                    },
                    "status": 1
                }
            ],
            "balance": {
                "credit": 1000000,
                "debit": 200000,
                "balance": 800000,
                "diagnosis": "creditor"
            }
        }
    ],
    "meta": {
        "timestamp": 1733745000
    }
}
```

<div class="api-docs" id="bkmrk--1"></div>## Flowchart

<div class="api-docs" id="bkmrk-start-request-%28get%29-"><div class="flowchart"><div class="flow-item">Start Request (GET)</div><div class="flow-arrow">↓</div><div class="flow-item-process">Fetch application_interface (Apply Filters)</div><div class="flow-arrow">↓</div><div class="flow-item-process" style="background-color: #e3f2fd; border-color: #90caf9; color: #0d47a1;">**Map Data Loop:**  
1. Expand 'colleague' object  
2. Format fields to {id, title}</div><div class="flow-arrow">↓</div><div class="flow-item-process">Group Data by 'branch'</div><div class="flow-arrow">↓</div><div class="flow-item-process">Fetch Offices (DB)</div><div class="flow-arrow">↓</div><div class="flow-item-decision">Need Balance?</div><div style="display: flex; justify-content: space-between; width: 350px; margin: 0 auto;"><div style="text-align: center;"><div class="flow-arrow">↙ (Yes)</div><div class="flow-item-process">Calc Wallet (Credit - Debit)</div></div><div style="text-align: center;"><div class="flow-arrow">↘ (No)</div><div class="flow-item-process">Skip</div></div></div><div class="flow-arrow">↓</div><div class="flow-item-success">Return Merged JSON</div></div></div>