# مستندات API های صفحات منوی عمودی

این مستندات شامل تمام API های مورد نیاز برای صفحات موجود در VerticalMenu است.

**توجهات مهم:**
- صفحات User Management و Roles & Permissions فقط برای ادمین قابل دسترسی است
- صفحات Calendar، Kanban، و Todo باید به یکدیگر متصل باشند و تسک‌های غیرروتین در هر سه قابل نمایش باشند
- AI Chat باید به تسک‌های Calendar، Kanban، و Todo دسترسی داشته باشد
- AI Chat باید نسبت به برخی پیام‌ها حساس باشد (sensitive message handling)
- سیستم Authentication جزو این مستندات نیست

---

## فهرست مطالب

1. [Chat](#1-chat)
2. [AI Chat](#2-ai-chat)
3. [Calendar](#3-calendar)
4. [Kanban](#4-kanban)
5. [Todo](#5-todo)
6. [User Management](#6-user-management)
7. [Roles & Permissions](#7-roles--permissions)

---

## 1. Chat

**Route:** `/apps/chat`

**دسترسی:** همه کاربران

### API های مورد نیاز

#### 1.1. دریافت لیست مخاطبین

**Endpoint:** `GET /api/chat/contacts`

**Response:**
```json
{
  "contacts": [
    {
      "id": number,
      "fullName": "string",
      "role": "string",
      "about": "string",
      "avatar": "string",
      "avatarColor": "primary" | "success" | "error" | "warning" | "info",
      "status": "busy" | "away" | "online" | "offline"
    }
  ]
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `contacts[].id` | number | شناسه یکتا مخاطب |
| `contacts[].fullName` | string | نام کامل |
| `contacts[].role` | string | نقش کاربر |
| `contacts[].about` | string | درباره کاربر |
| `contacts[].avatar` | string | آواتار (URL) |
| `contacts[].avatarColor` | ThemeColor | رنگ آواتار (در صورت نبودن تصویر) |
| `contacts[].status` | StatusType | وضعیت آنلاین/آفلاین |

#### 1.2. دریافت چت‌های کاربر

**Endpoint:** `GET /api/chat/conversations`

**Response:**
```json
{
  "chats": [
    {
      "id": number,
      "userId": number,
      "unseenMsgs": number,
      "lastMessage": {
        "message": "string",
        "time": "string",
        "senderId": number,
        "msgStatus": {
          "isSent": boolean,
          "isDelivered": boolean,
          "isSeen": boolean
        }
      }
    }
  ]
}
```

#### 1.3. دریافت پیام‌های چت

**Endpoint:** `GET /api/chat/conversations/:conversationId/messages`

**Path Parameters:**
- `conversationId` (number, required): شناسه مکالمه

**Query Parameters:**
- `page?` (number, optional): شماره صفحه
- `limit?` (number, optional): تعداد پیام در هر صفحه

**Response:**
```json
{
  "messages": [
    {
      "message": "string",
      "time": "string",
      "senderId": number,
      "msgStatus": {
        "isSent": boolean,
        "isDelivered": boolean,
        "isSeen": boolean
      }
    }
  ],
  "pagination": {
    "page": number,
    "limit": number,
    "total": number,
    "totalPages": number
  }
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `messages[].message` | string | متن پیام |
| `messages[].time` | string | زمان ارسال (ISO 8601) |
| `messages[].senderId` | number | شناسه فرستنده |
| `messages[].msgStatus.isSent` | boolean | وضعیت ارسال |
| `messages[].msgStatus.isDelivered` | boolean | وضعیت تحویل |
| `messages[].msgStatus.isSeen` | boolean | وضعیت مشاهده |

#### 1.4. ارسال پیام جدید

**Endpoint:** `POST /api/chat/conversations/:conversationId/messages`

**Path Parameters:**
- `conversationId` (number, required): شناسه مکالمه

**Request Body:**
```json
{
  "message": "string"
}
```

**Response:**
```json
{
  "message": {
    "id": number,
    "message": "string",
    "time": "string",
    "senderId": number,
    "msgStatus": {
      "isSent": boolean,
      "isDelivered": boolean,
      "isSeen": boolean
    }
  }
}
```

#### 1.5. به‌روزرسانی وضعیت مشاهده پیام

**Endpoint:** `PUT /api/chat/messages/:messageId/read`

**Path Parameters:**
- `messageId` (number, required): شناسه پیام

**Response:**
```json
{
  "success": boolean
}
```

#### 1.6. دریافت اطلاعات پروفایل کاربر

**Endpoint:** `GET /api/chat/profile`

**Response:**
```json
{
  "profileUser": {
    "id": number,
    "role": "string",
    "about": "string",
    "avatar": "string",
    "fullName": "string",
    "status": "busy" | "away" | "online" | "offline",
    "settings": {
      "isNotificationsOn": boolean,
      "isTwoStepAuthVerificationEnabled": boolean
    }
  }
}
```

---

## 2. AI Chat

**Route:** `/apps/ai-chat`

**دسترسی:** همه کاربران

**نکات مهم:**
- AI Chat باید به تسک‌های Calendar، Kanban، و Todo دسترسی داشته باشد
- AI Chat باید نسبت به برخی پیام‌ها حساس باشد و پردازش ویژه انجام دهد

### API های مورد نیاز

#### 2.1. ارسال پیام به AI

**Endpoint:** `POST /api/ai-chat/messages`

**Request Body:**
```json
{
  "content": "string",
  "images": ["string"],
  "files": [
    {
      "name": "string",
      "data": "string",
      "type": "string",
      "size": number
    }
  ],
  "model": "gpt-4" | "gpt-3.5" | "claude" | "gemini",
  "conversationId": "string"
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `content` | string | متن پیام |
| `images` | string[] | آرایه URL تصاویر (base64 data URLs) |
| `files[].name` | string | نام فایل |
| `files[].data` | string | داده فایل (base64 data URL) |
| `files[].type` | string | نوع MIME فایل |
| `files[].size` | number | حجم فایل (بایت) |
| `model` | string | مدل AI مورد استفاده |
| `conversationId` | string | شناسه مکالمه (اختیاری) |

**Response:**
```json
{
  "message": {
    "id": "string",
    "role": "user" | "assistant",
    "content": "string",
    "images": ["string"],
    "files": [
      {
        "name": "string",
        "data": "string",
        "type": "string",
        "size": number
      }
    ],
    "timestamp": "string",
    "isSensitive": boolean,
    "sensitiveReason": "string"
  },
  "assistantResponse": {
    "id": "string",
    "role": "assistant",
    "content": "string",
    "timestamp": "string",
    "referencedTasks": [
      {
        "taskId": "string",
        "source": "calendar" | "kanban" | "todo",
        "title": "string"
      }
    ]
  }
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `message.isSensitive` | boolean | آیا پیام حساس است |
| `message.sensitiveReason` | string | دلیل حساس بودن پیام |
| `assistantResponse.referencedTasks[].taskId` | string | شناسه تسک |
| `assistantResponse.referencedTasks[].source` | string | منبع تسک (calendar/kanban/todo) |
| `assistantResponse.referencedTasks[].title` | string | عنوان تسک |

#### 2.2. دریافت تاریخچه مکالمه

**Endpoint:** `GET /api/ai-chat/conversations/:conversationId/messages`

**Path Parameters:**
- `conversationId` (string, required): شناسه مکالمه

**Response:**
```json
{
  "messages": [
    {
      "id": "string",
      "role": "user" | "assistant",
      "content": "string",
      "images": ["string"],
      "files": [
        {
          "name": "string",
          "data": "string",
          "type": "string",
          "size": number
        }
      ],
      "timestamp": "string"
    }
  ]
}
```

#### 2.3. دریافت لیست مکالمات

**Endpoint:** `GET /api/ai-chat/conversations`

**Response:**
```json
{
  "conversations": [
    {
      "id": "string",
      "title": "string",
      "lastMessage": "string",
      "timestamp": "string",
      "messageCount": number
    }
  ]
}
```

#### 2.4. دریافت تسک‌های مرتبط (برای AI Chat)

**Endpoint:** `GET /api/ai-chat/tasks`

**Query Parameters:**
- `source?` (string, optional): منبع تسک (calendar, kanban, todo)
- `routine?` (number, optional): نوع روتین (0: NONE, 1: DAILY, 2: WEEKLY, 3: MONTHLY, 4: YEARLY)

**Response:**
```json
{
  "tasks": [
    {
      "id": "string",
      "title": "string",
      "description": "string",
      "deadline": number,
      "routine": 0 | 1 | 2 | 3 | 4,
      "tags": ["string"],
      "source": "calendar" | "kanban" | "todo",
      "status": "string",
      "priority": "high" | "medium" | "low"
    }
  ]
}
```

**نکته:** این API تسک‌هایی که routine = 0 دارند را برمی‌گرداند تا در Calendar، Kanban، و Todo مشترک باشند.

---

## 3. Calendar

**Route:** `/apps/calendar`

**دسترسی:** همه کاربران

**نکات مهم:**
- Calendar باید با Kanban و Todo متصل باشد
- تسک‌هایی که routine = 0 دارند باید در هر سه قابل نمایش باشند

### API های مورد نیاز

#### 3.1. دریافت Event ها

**Endpoint:** `GET /api/events`

**Query Parameters:**
- `start?` (string, optional): تاریخ شروع (ISO 8601)
- `end?` (string, optional): تاریخ پایان (ISO 8601)
- `calendar?` (string, optional): فیلتر بر اساس تقویم (Personal, Business, Family, Holiday, ETC)

**Response:**
```json
{
  "events": [
    {
      "id": "string",
      "title": "string",
      "description": "string",
      "deadline": number,
      "tags": ["string"],
      "author": {
        "name": "string",
        "image": "string"
      },
      "calendar": "Personal" | "Business" | "Family" | "Holiday" | "ETC",
      "start": "string",
      "end": "string",
      "allDay": boolean,
      "extendedProps": {}
    }
  ]
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `events[].id` | string | شناسه یکتا رویداد |
| `events[].title` | string | عنوان رویداد |
| `events[].description` | string | توضیحات رویداد |
| `events[].deadline` | number | مهلت (Unix timestamp) |
| `events[].tags` | string[] | برچسب‌ها |
| `events[].author.name` | string | نام نویسنده |
| `events[].author.image` | string | تصویر نویسنده (URL) |
| `events[].calendar` | string | نوع تقویم |
| `events[].start` | string | زمان شروع (ISO 8601) |
| `events[].end` | string | زمان پایان (ISO 8601) |
| `events[].allDay` | boolean | رویداد تمام روز |

#### 3.2. ایجاد Event جدید

**Endpoint:** `POST /api/events`

**Request Body:**
```json
{
  "title": "string",
  "description": "string",
  "deadline": number,
  "tags": ["string"],
  "calendar": "Personal" | "Business" | "Family" | "Holiday" | "ETC",
  "start": "string",
  "end": "string",
  "allDay": boolean,
  "extendedProps": {}
}
```

**Response:**
```json
{
  "event": {
    "id": "string",
    "title": "string",
    "description": "string",
    "deadline": number,
    "tags": ["string"],
    "author": {
      "name": "string",
      "image": "string"
    },
    "calendar": "string",
    "start": "string",
    "end": "string",
    "allDay": boolean
  }
}
```

#### 3.3. به‌روزرسانی Event

**Endpoint:** `PUT /api/events/:eventId`

**Path Parameters:**
- `eventId` (string, required): شناسه رویداد

**Request Body:**
```json
{
  "title": "string",
  "description": "string",
  "deadline": number,
  "tags": ["string"],
  "calendar": "string",
  "start": "string",
  "end": "string",
  "allDay": boolean
}
```

**Response:**
```json
{
  "event": {
    "id": "string",
    "title": "string",
    "description": "string",
    "deadline": number,
    "tags": ["string"],
    "author": {
      "name": "string",
      "image": "string"
    },
    "calendar": "string",
    "start": "string",
    "end": "string",
    "allDay": boolean
  }
}
```

#### 3.4. حذف Event

**Endpoint:** `DELETE /api/events/:eventId`

**Path Parameters:**
- `eventId` (string, required): شناسه رویداد

**Response:**
```json
{
  "success": boolean
}
```

#### 3.5. دریافت تسک‌های غیرروتین (مشترک با Kanban و Todo)

**Endpoint:** `GET /api/tasks/non-routine`

**Response:**
```json
{
  "tasks": [
    {
      "id": "string",
      "title": "string",
      "description": "string",
      "deadline": number,
      "routine": 0,
      "tags": ["string"],
      "author": {
        "name": "string",
        "image": "string"
      },
      "source": "calendar" | "kanban" | "todo",
      "status": "string",
      "priority": "high" | "medium" | "low"
    }
  ]
}
```

**نکته:** این API فقط تسک‌هایی با `routine = 0` (NONE) را برمی‌گرداند که باید در Calendar، Kanban، و Todo نمایش داده شوند.

---

## 4. Kanban

**Route:** `/apps/kanban`

**دسترسی:** همه کاربران

**نکات مهم:**
- Kanban باید با Calendar و Todo متصل باشد
- تسک‌هایی که routine = 0 دارند باید در هر سه قابل نمایش باشند

### API های مورد نیاز

#### 4.1. دریافت Board Kanban

**Endpoint:** `GET /api/kanban/board`

**Response:**
```json
{
  "columns": [
    {
      "id": number,
      "title": "string",
      "taskIds": [number]
    }
  ],
  "tasks": [
    {
      "id": number,
      "title": "string",
      "badgeText": ["string"],
      "attachments": number,
      "comments": number,
      "assigned": [
        {
          "src": "string",
          "name": "string"
        }
      ],
      "image": "string",
      "dueDate": "string",
      "routine": 0 | 1 | 2 | 3 | 4,
      "description": "string",
      "tags": ["string"],
      "source": "kanban" | "calendar" | "todo"
    }
  ]
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `columns[].id` | number | شناسه یکتا ستون |
| `columns[].title` | string | عنوان ستون |
| `columns[].taskIds` | number[] | شناسه‌های تسک‌های موجود در ستون |
| `tasks[].id` | number | شناسه یکتا تسک |
| `tasks[].title` | string | عنوان تسک |
| `tasks[].badgeText` | string[] | برچسب‌های متن |
| `tasks[].attachments` | number | تعداد پیوست‌ها |
| `tasks[].comments` | number | تعداد کامنت‌ها |
| `tasks[].assigned[].src` | string | تصویر اختصاص یافته (URL) |
| `tasks[].assigned[].name` | string | نام اختصاص یافته |
| `tasks[].image` | string | تصویر تسک (URL) |
| `tasks[].dueDate` | string | تاریخ مهلت (ISO 8601) |
| `tasks[].routine` | number | نوع روتین (0: NONE, 1: DAILY, ...) |
| `tasks[].description` | string | توضیحات تسک |
| `tasks[].tags` | string[] | برچسب‌ها |
| `tasks[].source` | string | منبع تسک |

#### 4.2. ایجاد ستون جدید

**Endpoint:** `POST /api/kanban/columns`

**Request Body:**
```json
{
  "title": "string"
}
```

**Response:**
```json
{
  "column": {
    "id": number,
    "title": "string",
    "taskIds": []
  }
}
```

#### 4.3. به‌روزرسانی ستون

**Endpoint:** `PUT /api/kanban/columns/:columnId`

**Path Parameters:**
- `columnId` (number, required): شناسه ستون

**Request Body:**
```json
{
  "title": "string",
  "taskIds": [number]
}
```

**Response:**
```json
{
  "column": {
    "id": number,
    "title": "string",
    "taskIds": [number]
  }
}
```

#### 4.4. حذف ستون

**Endpoint:** `DELETE /api/kanban/columns/:columnId`

**Path Parameters:**
- `columnId` (number, required): شناسه ستون

**Response:**
```json
{
  "success": boolean
}
```

#### 4.5. ایجاد تسک جدید

**Endpoint:** `POST /api/kanban/tasks`

**Request Body:**
```json
{
  "columnId": number,
  "title": "string",
  "description": "string",
  "badgeText": ["string"],
  "attachments": number,
  "comments": number,
  "assigned": [
    {
      "src": "string",
      "name": "string"
    }
  ],
  "image": "string",
  "dueDate": "string",
  "routine": 0 | 1 | 2 | 3 | 4,
  "tags": ["string"]
}
```

**Response:**
```json
{
  "task": {
    "id": number,
    "title": "string",
    "badgeText": ["string"],
    "attachments": number,
    "comments": number,
    "assigned": [
      {
        "src": "string",
        "name": "string"
      }
    ],
    "image": "string",
    "dueDate": "string",
    "routine": number,
    "description": "string",
    "tags": ["string"],
    "source": "kanban"
  }
}
```

#### 4.6. به‌روزرسانی تسک

**Endpoint:** `PUT /api/kanban/tasks/:taskId`

**Path Parameters:**
- `taskId` (number, required): شناسه تسک

**Request Body:**
```json
{
  "title": "string",
  "description": "string",
  "badgeText": ["string"],
  "attachments": number,
  "comments": number,
  "assigned": [
    {
      "src": "string",
      "name": "string"
    }
  ],
  "image": "string",
  "dueDate": "string",
  "routine": number,
  "tags": ["string"],
  "columnId": number
}
```

**Response:**
```json
{
  "task": {
    "id": number,
    "title": "string",
    "badgeText": ["string"],
    "attachments": number,
    "comments": number,
    "assigned": [
      {
        "src": "string",
        "name": "string"
      }
    ],
    "image": "string",
    "dueDate": "string",
    "routine": number,
    "description": "string",
    "tags": ["string"],
    "source": "string"
  }
}
```

#### 4.7. حذف تسک

**Endpoint:** `DELETE /api/kanban/tasks/:taskId`

**Path Parameters:**
- `taskId` (number, required): شناسه تسک

**Response:**
```json
{
  "success": boolean
}
```

#### 4.8. جابجایی تسک بین ستون‌ها

**Endpoint:** `PUT /api/kanban/tasks/:taskId/move`

**Path Parameters:**
- `taskId` (number, required): شناسه تسک

**Request Body:**
```json
{
  "fromColumnId": number,
  "toColumnId": number,
  "position": number
}
```

**Response:**
```json
{
  "success": boolean,
  "columns": [
    {
      "id": number,
      "title": "string",
      "taskIds": [number]
    }
  ]
}
```

---

## 5. Todo

**Route:** `/todo/all`

**دسترسی:** همه کاربران

**نکات مهم:**
- Todo باید با Calendar و Kanban متصل باشد
- تسک‌هایی که routine = 0 دارند باید در هر سه قابل نمایش باشند

### API های مورد نیاز

#### 5.1. دریافت لیست Todo

**Endpoint:** `GET /api/todos`

**Query Parameters:**
- `status?` (string, optional): وضعیت (pending, in-progress, completed)
- `priority?` (string, optional): اولویت (high, medium, low)
- `label?` (string, optional): برچسب
- `filter?` (string, optional): فیلتر (all, starred, important, completed, trashed)
- `search?` (string, optional): جستجو در عنوان و توضیحات

**Response:**
```json
{
  "todos": [
    {
      "id": number,
      "title": "string",
      "description": "string",
      "status": "pending" | "in-progress" | "completed",
      "priority": "high" | "medium" | "low",
      "startDate": "string",
      "dueDate": "string",
      "createdDate": "string",
      "labels": ["string"],
      "isStarred": boolean,
      "isImportant": boolean,
      "isTrashed": boolean,
      "routine": 0 | 1 | 2 | 3 | 4,
      "source": "todo" | "calendar" | "kanban"
    }
  ],
  "total": number
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `todos[].id` | number | شناسه یکتا todo |
| `todos[].title` | string | عنوان todo |
| `todos[].description` | string | توضیحات todo |
| `todos[].status` | string | وضعیت (pending, in-progress, completed) |
| `todos[].priority` | string | اولویت (high, medium, low) |
| `todos[].startDate` | string | تاریخ شروع (ISO 8601) |
| `todos[].dueDate` | string | تاریخ مهلت (ISO 8601) |
| `todos[].createdDate` | string | تاریخ ایجاد (ISO 8601) |
| `todos[].labels` | string[] | برچسب‌ها |
| `todos[].isStarred` | boolean | نشان شده |
| `todos[].isImportant` | boolean | مهم |
| `todos[].isTrashed` | boolean | حذف شده |
| `todos[].routine` | number | نوع روتین (0: NONE, 1: DAILY, ...) |
| `todos[].source` | string | منبع todo |

#### 5.2. ایجاد Todo جدید

**Endpoint:** `POST /api/todos`

**Request Body:**
```json
{
  "title": "string",
  "description": "string",
  "status": "pending" | "in-progress" | "completed",
  "priority": "high" | "medium" | "low",
  "startDate": "string",
  "dueDate": "string",
  "labels": ["string"],
  "isStarred": boolean,
  "isImportant": boolean,
  "routine": 0 | 1 | 2 | 3 | 4
}
```

**Response:**
```json
{
  "todo": {
    "id": number,
    "title": "string",
    "description": "string",
    "status": "string",
    "priority": "string",
    "startDate": "string",
    "dueDate": "string",
    "createdDate": "string",
    "labels": ["string"],
    "isStarred": boolean,
    "isImportant": boolean,
    "isTrashed": boolean,
    "routine": number,
    "source": "todo"
  }
}
```

#### 5.3. به‌روزرسانی Todo

**Endpoint:** `PUT /api/todos/:todoId`

**Path Parameters:**
- `todoId` (number, required): شناسه todo

**Request Body:**
```json
{
  "title": "string",
  "description": "string",
  "status": "pending" | "in-progress" | "completed",
  "priority": "high" | "medium" | "low",
  "startDate": "string",
  "dueDate": "string",
  "labels": ["string"],
  "isStarred": boolean,
  "isImportant": boolean,
  "isTrashed": boolean,
  "routine": number
}
```

**Response:**
```json
{
  "todo": {
    "id": number,
    "title": "string",
    "description": "string",
    "status": "string",
    "priority": "string",
    "startDate": "string",
    "dueDate": "string",
    "createdDate": "string",
    "labels": ["string"],
    "isStarred": boolean,
    "isImportant": boolean,
    "isTrashed": boolean,
    "routine": number,
    "source": "string"
  }
}
```

#### 5.4. حذف Todo

**Endpoint:** `DELETE /api/todos/:todoId`

**Path Parameters:**
- `todoId` (number, required): شناسه todo

**Response:**
```json
{
  "success": boolean
}
```

#### 5.5. دریافت لیست برچسب‌های موجود

**Endpoint:** `GET /api/todos/labels`

**Response:**
```json
{
  "labels": ["string"]
}
```

---

## 6. User Management

**Route:** `/apps/user/list`, `/apps/user/view`

**دسترسی:** فقط برای ادمین (Admin)

### 6.1. User List

**Route:** `/apps/user/list`

#### API های مورد نیاز

##### 6.1.1. دریافت لیست کاربران

**Endpoint:** `GET /api/admin/users`

**Query Parameters:**
- `role?` (string, optional): فیلتر بر اساس نقش (admin, author, editor, maintainer, subscriber)
- `status?` (string, optional): فیلتر بر اساس وضعیت (active, pending, inactive)
- `search?` (string, optional): جستجو در نام، ایمیل، نام کاربری
- `page?` (number, optional): شماره صفحه
- `limit?` (number, optional): تعداد آیتم در هر صفحه

**Response:**
```json
{
  "users": [
    {
      "id": number,
      "role": "string",
      "email": "string",
      "status": "active" | "pending" | "inactive",
      "avatar": "string",
      "company": "string",
      "country": "string",
      "contact": "string",
      "fullName": "string",
      "username": "string",
      "currentPlan": "string",
      "avatarColor": "primary" | "success" | "error" | "warning" | "info",
      "billing": "string"
    }
  ],
  "pagination": {
    "page": number,
    "limit": number,
    "total": number,
    "totalPages": number
  },
  "stats": {
    "total": number,
    "active": number,
    "pending": number,
    "inactive": number
  }
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `users[].id` | number | شناسه یکتا کاربر |
| `users[].role` | string | نقش کاربر |
| `users[].email` | string | ایمیل کاربر |
| `users[].status` | string | وضعیت کاربر |
| `users[].avatar` | string | آواتار کاربر (URL) |
| `users[].company` | string | نام شرکت |
| `users[].country` | string | کشور |
| `users[].contact` | string | شماره تماس |
| `users[].fullName` | string | نام کامل |
| `users[].username` | string | نام کاربری |
| `users[].currentPlan` | string | پلن فعلی |
| `users[].avatarColor` | ThemeColor | رنگ آواتار (در صورت نبودن تصویر) |
| `users[].billing` | string | روش پرداخت |

##### 6.1.2. ایجاد کاربر جدید

**Endpoint:** `POST /api/admin/users`

**Request Body:**
```json
{
  "role": "string",
  "email": "string",
  "fullName": "string",
  "username": "string",
  "contact": "string",
  "company": "string",
  "country": "string",
  "status": "active" | "pending" | "inactive",
  "currentPlan": "string",
  "avatar": "string"
}
```

**Response:**
```json
{
  "user": {
    "id": number,
    "role": "string",
    "email": "string",
    "status": "string",
    "avatar": "string",
    "company": "string",
    "country": "string",
    "contact": "string",
    "fullName": "string",
    "username": "string",
    "currentPlan": "string",
    "avatarColor": "string",
    "billing": "string"
  }
}
```

##### 6.1.3. به‌روزرسانی کاربر

**Endpoint:** `PUT /api/admin/users/:userId`

**Path Parameters:**
- `userId` (number, required): شناسه کاربر

**Request Body:**
```json
{
  "role": "string",
  "email": "string",
  "fullName": "string",
  "username": "string",
  "contact": "string",
  "company": "string",
  "country": "string",
  "status": "active" | "pending" | "inactive",
  "currentPlan": "string",
  "avatar": "string"
}
```

**Response:**
```json
{
  "user": {
    "id": number,
    "role": "string",
    "email": "string",
    "status": "string",
    "avatar": "string",
    "company": "string",
    "country": "string",
    "contact": "string",
    "fullName": "string",
    "username": "string",
    "currentPlan": "string",
    "avatarColor": "string",
    "billing": "string"
  }
}
```

##### 6.1.4. حذف کاربر

**Endpoint:** `DELETE /api/admin/users/:userId`

**Path Parameters:**
- `userId` (number, required): شناسه کاربر

**Response:**
```json
{
  "success": boolean
}
```

### 6.2. User View

**Route:** `/apps/user/view`

#### API های مورد نیاز

##### 6.2.1. دریافت جزئیات کاربر

**Endpoint:** `GET /api/admin/users/:userId`

**Path Parameters:**
- `userId` (number, required): شناسه کاربر

**Response:**
```json
{
  "user": {
    "id": number,
    "role": "string",
    "email": "string",
    "status": "string",
    "avatar": "string",
    "company": "string",
    "country": "string",
    "contact": "string",
    "fullName": "string",
    "username": "string",
    "currentPlan": "string",
    "avatarColor": "string",
    "billing": "string",
    "joinDate": "string",
    "lastLogin": "string",
    "twoStepVerification": boolean,
    "recentDevices": [
      {
        "id": "string",
        "device": "string",
        "browser": "string",
        "location": "string",
        "lastActive": "string",
        "ip": "string"
      }
    ],
    "activityTimeline": [
      {
        "id": "string",
        "title": "string",
        "description": "string",
        "time": "string",
        "icon": "string",
        "color": "string"
      }
    ],
    "projects": [
      {
        "id": "string",
        "name": "string",
        "startDate": "string",
        "deadline": "string",
        "status": "string",
        "budget": number,
        "spent": number
      }
    ],
    "invoices": [
      {
        "id": "string",
        "total": number,
        "issuedDate": "string",
        "status": "string",
        "balance": number
      }
    ],
    "connections": [
      {
        "id": "string",
        "app": "string",
        "username": "string",
        "avatar": "string",
        "connected": boolean,
        "connectedAt": "string"
      }
    ],
    "notifications": {
      "email": {
        "newComment": boolean,
        "newAnswer": boolean,
        "followMe": boolean,
        "answerOnForm": boolean,
        "productUpdate": boolean,
        "productNewFeature": boolean,
        "productAnnouncement": boolean
      },
      "phone": {
        "newComment": boolean,
        "newAnswer": boolean,
        "followMe": boolean,
        "answerOnForm": boolean
      }
    }
  }
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `user.joinDate` | string | تاریخ عضویت (ISO 8601) |
| `user.lastLogin` | string | آخرین ورود (ISO 8601) |
| `user.twoStepVerification` | boolean | فعال‌سازی احراز هویت دو مرحله‌ای |
| `user.recentDevices[].id` | string | شناسه دستگاه |
| `user.recentDevices[].device` | string | نام دستگاه |
| `user.recentDevices[].browser` | string | مرورگر |
| `user.recentDevices[].location` | string | موقعیت جغرافیایی |
| `user.recentDevices[].lastActive` | string | آخرین فعالیت (ISO 8601) |
| `user.recentDevices[].ip` | string | آدرس IP |
| `user.activityTimeline[].id` | string | شناسه فعالیت |
| `user.activityTimeline[].title` | string | عنوان فعالیت |
| `user.activityTimeline[].description` | string | توضیحات فعالیت |
| `user.activityTimeline[].time` | string | زمان فعالیت (ISO 8601) |
| `user.activityTimeline[].icon` | string | آیکون |
| `user.activityTimeline[].color` | string | رنگ |
| `user.projects[].id` | string | شناسه پروژه |
| `user.projects[].name` | string | نام پروژه |
| `user.projects[].startDate` | string | تاریخ شروع (ISO 8601) |
| `user.projects[].deadline` | string | تاریخ مهلت (ISO 8601) |
| `user.projects[].status` | string | وضعیت پروژه |
| `user.projects[].budget` | number | بودجه |
| `user.projects[].spent` | number | هزینه شده |
| `user.invoices[].id` | string | شناسه فاکتور |
| `user.invoices[].total` | number | مبلغ کل |
| `user.invoices[].issuedDate` | string | تاریخ صدور (ISO 8601) |
| `user.invoices[].status` | string | وضعیت فاکتور |
| `user.invoices[].balance` | number | مانده حساب |
| `user.connections[].id` | string | شناسه اتصال |
| `user.connections[].app` | string | نام اپلیکیشن |
| `user.connections[].username` | string | نام کاربری |
| `user.connections[].avatar` | string | آواتار (URL) |
| `user.connections[].connected` | boolean | وضعیت اتصال |
| `user.connections[].connectedAt` | string | تاریخ اتصال (ISO 8601) |
| `user.notifications.email.*` | boolean | تنظیمات اطلاع‌رسانی ایمیل |
| `user.notifications.phone.*` | boolean | تنظیمات اطلاع‌رسانی تلفن |

##### 6.2.2. به‌روزرسانی تنظیمات امنیتی کاربر

**Endpoint:** `PUT /api/admin/users/:userId/security`

**Path Parameters:**
- `userId` (number, required): شناسه کاربر

**Request Body:**
```json
{
  "twoStepVerification": boolean,
  "currentPassword": "string",
  "newPassword": "string"
}
```

**Response:**
```json
{
  "success": boolean
}
```

##### 6.2.3. به‌روزرسانی تنظیمات اطلاع‌رسانی

**Endpoint:** `PUT /api/admin/users/:userId/notifications`

**Path Parameters:**
- `userId` (number, required): شناسه کاربر

**Request Body:**
```json
{
  "email": {
    "newComment": boolean,
    "newAnswer": boolean,
    "followMe": boolean,
    "answerOnForm": boolean,
    "productUpdate": boolean,
    "productNewFeature": boolean,
    "productAnnouncement": boolean
  },
  "phone": {
    "newComment": boolean,
    "newAnswer": boolean,
    "followMe": boolean,
    "answerOnForm": boolean
  }
}
```

**Response:**
```json
{
  "success": boolean
}
```

---

## 7. Roles & Permissions

**Route:** `/apps/roles`, `/apps/permissions`

**دسترسی:** فقط برای ادمین (Admin)

### 7.1. Roles

**Route:** `/apps/roles`

#### API های مورد نیاز

##### 7.1.1. دریافت لیست نقش‌ها

**Endpoint:** `GET /api/admin/roles`

**Response:**
```json
{
  "roles": [
    {
      "id": "string",
      "name": "string",
      "totalUsers": number,
      "avatars": ["string"],
      "description": "string"
    }
  ],
  "roleStats": {
    "administrator": number,
    "author": number,
    "editor": number,
    "maintainer": number,
    "subscriber": number
  }
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `roles[].id` | string | شناسه یکتا نقش |
| `roles[].name` | string | نام نقش |
| `roles[].totalUsers` | number | تعداد کاربران دارای این نقش |
| `roles[].avatars` | string[] | آواتارهای کاربران (URL) |
| `roles[].description` | string | توضیحات نقش |
| `roleStats.*` | number | آمار کاربران هر نقش |

##### 7.1.2. دریافت کاربران بر اساس نقش

**Endpoint:** `GET /api/admin/roles/:roleName/users`

**Path Parameters:**
- `roleName` (string, required): نام نقش

**Response:**
```json
{
  "users": [
    {
      "id": number,
      "fullName": "string",
      "username": "string",
      "email": "string",
      "avatar": "string",
      "role": "string",
      "status": "string"
    }
  ]
}
```

##### 7.1.3. ایجاد نقش جدید

**Endpoint:** `POST /api/admin/roles`

**Request Body:**
```json
{
  "name": "string",
  "description": "string",
  "permissions": ["string"]
}
```

**Response:**
```json
{
  "role": {
    "id": "string",
    "name": "string",
    "description": "string",
    "totalUsers": number,
    "avatars": [],
    "permissions": ["string"]
  }
}
```

##### 7.1.4. به‌روزرسانی نقش

**Endpoint:** `PUT /api/admin/roles/:roleId`

**Path Parameters:**
- `roleId` (string, required): شناسه نقش

**Request Body:**
```json
{
  "name": "string",
  "description": "string",
  "permissions": ["string"]
}
```

**Response:**
```json
{
  "role": {
    "id": "string",
    "name": "string",
    "description": "string",
    "totalUsers": number,
    "avatars": ["string"],
    "permissions": ["string"]
  }
}
```

##### 7.1.5. حذف نقش

**Endpoint:** `DELETE /api/admin/roles/:roleId`

**Path Parameters:**
- `roleId` (string, required): شناسه نقش

**Response:**
```json
{
  "success": boolean
}
```

### 7.2. Permissions

**Route:** `/apps/permissions`

#### API های مورد نیاز

##### 7.2.1. دریافت لیست Permission ها

**Endpoint:** `GET /api/admin/permissions`

**Query Parameters:**
- `search?` (string, optional): جستجو در نام permission

**Response:**
```json
{
  "permissions": [
    {
      "id": number,
      "name": "string",
      "createdDate": "string",
      "assignedTo": "string" | ["string"]
    }
  ],
  "total": number
}
```

**توضیحات فیلدها:**

| فیلد | نوع | توضیحات |
|------|-----|---------|
| `permissions[].id` | number | شناسه یکتا permission |
| `permissions[].name` | string | نام permission |
| `permissions[].createdDate` | string | تاریخ ایجاد (ISO 8601) |
| `permissions[].assignedTo` | string \| string[] | نقش یا نقش‌های اختصاص یافته |

##### 7.2.2. ایجاد Permission جدید

**Endpoint:** `POST /api/admin/permissions`

**Request Body:**
```json
{
  "name": "string",
  "assignedTo": "string" | ["string"]
}
```

**Response:**
```json
{
  "permission": {
    "id": number,
    "name": "string",
    "createdDate": "string",
    "assignedTo": "string" | ["string"]
  }
}
```

##### 7.2.3. به‌روزرسانی Permission

**Endpoint:** `PUT /api/admin/permissions/:permissionId`

**Path Parameters:**
- `permissionId` (number, required): شناسه permission

**Request Body:**
```json
{
  "name": "string",
  "assignedTo": "string" | ["string"]
}
```

**Response:**
```json
{
  "permission": {
    "id": number,
    "name": "string",
    "createdDate": "string",
    "assignedTo": "string" | ["string"]
  }
}
```

##### 7.2.4. حذف Permission

**Endpoint:** `DELETE /api/admin/permissions/:permissionId`

**Path Parameters:**
- `permissionId` (number, required): شناسه permission

**Response:**
```json
{
  "success": boolean
}
```

---

## خلاصه نکات مهم

1. **User Management & Roles & Permissions**: فقط برای ادمین قابل دسترسی هستند
2. **Calendar, Kanban, Todo**: این سه صفحه باید به یکدیگر متصل باشند و تسک‌هایی با `routine = 0` (NONE) در هر سه قابل نمایش باشند
3. **AI Chat**: باید به تسک‌های Calendar، Kanban، و Todo دسترسی داشته باشد و نسبت به برخی پیام‌ها حساس باشد
4. **Authentication**: سیستم Authentication جزو این مستندات نیست

---

## Enum ها و Type های مشترک

### Routine Enum
```typescript
enum Routine {
  NONE = 0,
  DAILY = 1,
  WEEKLY = 2,
  MONTHLY = 3,
  YEARLY = 4
}
```

### ThemeColor Type
```typescript
type ThemeColor = "primary" | "success" | "error" | "warning" | "info"
```

### Status Type (Chat)
```typescript
type StatusType = "busy" | "away" | "online" | "offline"
```

### Todo Status Type
```typescript
type TodoStatusType = "pending" | "in-progress" | "completed"
```

### Todo Priority Type
```typescript
type TodoPriorityType = "high" | "medium" | "low"
```

### Calendar Type
```typescript
type CalendarFiltersType = "Personal" | "Business" | "Family" | "Holiday" | "ETC"
```

### User Role Type
```typescript
type UserRoleType = "admin" | "author" | "editor" | "maintainer" | "subscriber"
```

### User Status Type
```typescript
type UserStatusType = "active" | "pending" | "inactive"
```

---

**تاریخ ایجاد مستندات:** 2024
**نسخه:** 1.0.0

