:::writing
# راهنمای توسعه ACC ERP Engine

این سند برای برنامه‌نویسانی نوشته شده است که می‌خواهند روی **ACC Engine** توسعه انجام دهند.  
این سیستم یک **ERP مبتنی بر SPA داخل وردپرس** است که از **REST API + ماژولار + سیستم تب** استفاده می‌کند.

هدف این راهنما توضیح نحوه توسعه بخش‌های زیر است:

- ساخت ماژول جدید
- ایجاد API
- ساخت تب در SPA
- ساخت کامپوننت
- اتصال فرانت به بک‌اند

---

# معماری کلی سیستم

سیستم از چند بخش اصلی تشکیل شده است:

1. **Core Engine**

هسته اصلی سیستم که شامل موارد زیر است:

- Router
- Permission Engine
- Query Engine
- Runtime Engine
- REST Core

مسیر:

```
includes/
```

---

2. **Modules**

تمام قابلیت‌های ERP به صورت **ماژول** پیاده‌سازی می‌شوند.

مثال:

```
modules/users
modules/trrc
modules/cpm
```

هر ماژول معمولاً شامل:

- REST API
- منطق تجاری
- اتصال به SPA

---

3. **SPA Frontend**

فرانت‌اند یک **Single Page Application** است که در مسیر زیر اجرا می‌شود:

```
/app
```

قالب اجرا:

```
templates/spa.php
```

SPA از **Tab-based UI** استفاده می‌کند.

---

# ساختار پوشه‌ها

ساختار اصلی پروژه:

```
acc-engine
│
├── includes
│   ├── access
│   ├── rest
│   ├── runtime
│   └── smartflow
│
├── modules
│   ├── users
│   ├── trrc
│   └── cpm
│
├── assets
│   ├── js
│   └── css
│
├── templates
│   └── spa.php
│
└── config
```

---

# ساخت ماژول جدید

برای ساخت ماژول جدید:

1. ایجاد پوشه

```
modules/my-module
```

2. ایجاد فایل REST

```
modules/my-module/rest.php
```

3. ثبت مسیر API

نمونه:

```php
add_action('rest_api_init', function () {

    register_rest_route('acc/v1', '/my-module/list', [
        'methods' => 'GET',
        'callback' => 'my_module_list',
        'permission_callback' => 'acc_jwt_check_permission',
    ]);

});
```

---

# نمونه API

نمونه API ساده:

```php
function my_module_list() {

    global $wpdb;

    $rows = $wpdb->get_results(
        "SELECT * FROM my_table",
        ARRAY_A
    );

    return [
        'success' => true,
        'items' => $rows
    ];
}
```

---

# افزودن ماژول به سیستم

بعد از ساخت ماژول باید در Engine لود شود.

در فایل اصلی:

```
ACC_Engine::load_modules()
```

اضافه کنید:

```php
require_once ACC_PATH . 'modules/my-module/rest.php';
```

---

# ساخت تب در SPA

SPA از سیستم **Tab-based navigation** استفاده می‌کند.

هر ماژول می‌تواند یک تب ایجاد کند.

نمونه:

```javascript
app.openTab({
    id: "users",
    title: "Users",
    component: "users-component"
});
```

---

# ساخت کامپوننت

کامپوننت‌ها در مسیر زیر قرار دارند:

```
assets/js/components
```

نمونه:

```
users-component.js
```

ساختار ساده:

```javascript
export default class UsersComponent {

    async load() {

        const res = await fetch("/wp-json/acc/v1/users");

        const data = await res.json();

        this.render(data);
    }

    render(data) {

        console.log(data);

    }

}
```

---

# ارتباط با REST API

در فرانت‌اند از API زیر استفاده می‌شود:

```
ACC_APP_BOOT.restBase
```

نمونه:

```javascript
const res = await fetch(
    ACC_APP_BOOT.restBase + "acc/v1/users"
);
```

---

# احراز هویت

سیستم از **JWT** استفاده می‌کند.

ورود کاربر:

```
POST /wp-json/acc/v1/auth/login
```

نمونه درخواست:

```
username
password
```

پاسخ:

```
token
user
```

درخواست‌های بعدی باید شامل:

```
Authorization: Bearer TOKEN
```

---

# سیستم دسترسی

دسترسی‌ها بر اساس **Role** تعریف می‌شوند.

دسترسی‌های ممکن:

```
view
create
edit
delete
```

هر کاربر از طریق API dashboard دسترسی‌های خود را دریافت می‌کند.

---

# سیستم منو

منوها از دیتابیس خوانده می‌شوند:

```
accj_menus
```

ساختار:

```
id
title
icon
route
parent_id
module
```

SPA بر اساس این داده‌ها منو را می‌سازد.

---

# Workflow Engine

سیستم شامل یک موتور Workflow به نام **SmartFlow** است.

وظیفه:

- مدیریت فرایندها
- اجرای مراحل
- نمایش گراف

کلاس‌های اصلی:

```
class-smartflow-controller
class-smartflow-routes
class-graph-view
```

---

# افزودن Asset جدید

در صورت نیاز می‌توان اسکریپت یا CSS جدید اضافه کرد.

در فایل:

```
config/acc-assets.php
```

نمونه:

```php
return [

    'enabled' => true,

    'scripts' => [

        [
            'handle' => 'my-script',
            'src' => 'assets/js/my-script.js',
            'load' => 'module'
        ]

    ]

];
```

---

# نکات توسعه

در توسعه ماژول‌ها باید موارد زیر رعایت شود:

- تمام API ها باید REST باشند
- دسترسی‌ها باید بررسی شوند
- ماژول‌ها باید مستقل باشند
- Query ها باید از طریق `$wpdb` انجام شوند
- SPA فقط از API داده بگیرد

---

# نتیجه

ACC Engine یک **موتور ERP ماژولار داخل وردپرس** است که:

- از **SPA architecture** استفاده می‌کند
- از **REST API** برای ارتباط فرانت و بک‌اند استفاده می‌کند
- از **JWT authentication** بهره می‌برد
- سیستم **Role و Permission** دارد
- از **Workflow Engine** برای فرایندها استفاده می‌کند
- امکان توسعه ماژول‌های جدید را فراهم می‌کند
:::