# مستندات کامل APIهای مورد نیاز Views این document شامل تمام APIهایی است که توسط viewهای زیر استفاده می‌شوند: - **Calendar** (`views/apps/calendar`) - **Kanban** (`views/apps/kanban`) - **Todo** (`views/apps/todo`) - **Account Settings** (`views/pages/account-settings`) > **Base URL:** `NEXT_PUBLIC_API_URL` یا `ENVOY_GATEWAY_URL` یا `http://localhost:9035` > **Authentication:** تمام درخواست‌ها نیاز به هدر `Authorization: Bearer {token}` دارند (توکن از `localStorage.auth_token` خوانده می‌شود) --- ## ۱. Calendar API (تقویم) **سرویس:** `eventService` **Slice:** `redux-store/slices/calendar.ts` ### ۱.۱ لیست رویدادها ``` GET /api/events ``` **Query Parameters (اختیاری):** | پارامتر | نوع | توضیحات | |-----------|-------|-------------------------------------------| | `start` | string | ISO 8601 - تاریخ شروع فیلتر | | `end` | string | ISO 8601 - تاریخ پایان فیلتر | | `calendar`| string | فیلتر بر اساس تقویم: `Personal`, `Business`, `Family`, `Holiday`, `ETC` | **مثال:** ``` GET /api/events?start=2025-01-01T00:00:00.000Z&end=2025-01-31T23:59:59.000Z&calendar=Business ``` **Response:** ```json { "events": [ { "id": "string", "title": "string", "description": "string", "deadline": 1704067200, "tags": ["string"], "author": { "name": "string", "image": "string" }, "calendar": "Personal | Business | Family | Holiday | ETC", "start": "2025-01-15T09:00:00.000Z", "end": "2025-01-15T10:00:00.000Z", "allDay": false, "extendedProps": {} } ] } ``` --- ### ۱.۲ ایجاد رویداد جدید ``` POST /api/events ``` **Request Body:** ```json { "title": "string", // الزامی "description": "string", // اختیاری "calendar": "Personal | Business | Family | Holiday | ETC", // الزامی "start": "2025-01-15T09:00:00.000Z", // ISO 8601 "end": "2025-01-15T10:00:00.000Z", // ISO 8601 "allDay": false, // اختیاری، پیش‌فرض: false "deadline": 1704067200, // اختیاری - Unix timestamp "tags": ["string"], // اختیاری "extendedProps": {} // اختیاری } ``` **Response:** ```json { "event": { "id": "string", "title": "string", "description": "string", "calendar": "string", "start": "string", "end": "string", "allDay": boolean, "deadline": number, "tags": ["string"], "author": {}, "extendedProps": {} } } ``` --- ### ۱.۳ دریافت یک رویداد ``` GET /api/events/{id} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|-----------| | `id` | string | شناسه رویداد | --- ### ۱.۴ به‌روزرسانی رویداد ``` PUT /api/events/{id} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|-----------| | `id` | string | شناسه رویداد | **Request Body (همه فیلدها اختیاری):** ```json { "title": "string", "description": "string", "calendar": "Personal | Business | Family | Holiday | ETC", "start": "2025-01-15T09:00:00.000Z", "end": "2025-01-15T10:00:00.000Z", "allDay": false, "deadline": 1704067200, "tags": ["string"], "extendedProps": {} } ``` --- ### ۱.۵ حذف رویداد ``` DELETE /api/events/{id} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|-----------| | `id` | string | شناسه رویداد | **Response:** ```json { "success": true } ``` --- ## ۲. Kanban API (کانبان) **سرویس:** `kanbanService` **Slice:** `redux-store/slices/kanban.ts` ### ۲.۱ دریافت Board ``` GET /api/kanban/board ``` **Response:** ```json { "columns": [ { "id": 1, "title": "string", "taskIds": [1, 2, 3] } ], "tasks": [ { "id": 1, "title": "string", "badgeText": ["string"], "attachments": 0, "comments": 0, "assigned": [{"src": "string", "name": "string"}], "image": "string", "dueDate": "2025-01-15T00:00:00.000Z", "routine": 0, "description": "string", "tags": ["string"], "priority": "high | medium | low", "status": "pending | in-progress | completed", "source": "kanban | calendar | todo" } ] } ``` > **نکته:** Backend ممکن است از `badge_text` و `due_date` (snake_case) استفاده کند. سرویس frontend به‌طور خودکار تبدیل می‌کند. --- ### ۲.۲ ایجاد ستون جدید ``` POST /api/kanban/columns ``` **Request Body:** ```json { "title": "string" } ``` **Response:** ```json { "column": { "id": 1, "title": "string", "taskIds": [] } } ``` --- ### ۲.۳ به‌روزرسانی ستون ``` PUT /api/kanban/columns/{columnId} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |------------|-------|-----------| | `columnId` | number | شناسه ستون | **Request Body (هر دو اختیاری):** ```json { "title": "string", "taskIds": [1, 2, 3] } ``` --- ### ۲.۴ حذف ستون ``` DELETE /api/kanban/columns/{columnId} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |------------|-------|-----------| | `columnId` | number | شناسه ستون | **Response:** ```json { "success": true } ``` --- ### ۲.۵ ایجاد تسک جدید ``` POST /api/kanban/tasks ``` **Request Body (Backend - snake_case):** ```json { "column_id": 1, // الزامی "title": "string", // الزامی "description": "string", // اختیاری "badge_text": ["string"], // اختیاری "attachments": 0, // اختیاری "comments": 0, // اختیاری "assigned": [{"src": "string", "name": "string"}], // اختیاری "image": "string", // اختیاری "due_date": "2025-01-15T00:00:00.000Z", // اختیاری - ISO 8601 "routine": 0, // اختیاری - 0|1|2|3|4 "tags": ["string"], // اختیاری "priority": 0, // اختیاری - 0: high, 1: medium, 2: low "status": 0 // اختیاری - 0: pending, 1: in-progress, 2: completed } ``` --- ### ۲.۶ به‌روزرسانی تسک ``` PUT /api/kanban/tasks/{taskId} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|----------| | `taskId`| number | شناسه تسک | **Request Body (Backend - snake_case, همه اختیاری):** ```json { "title": "string", "description": "string", "badge_text": ["string"], "attachments": 0, "comments": 0, "assigned": [], "image": "string", "due_date": "string", "routine": 0, "tags": ["string"], "priority": 0, "status": 0, "column_id": 1 } ``` --- ### ۲.۷ حذف تسک ``` DELETE /api/kanban/tasks/{taskId} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|----------| | `taskId`| number | شناسه تسک | **Response:** ```json { "success": true } ``` --- ### ۲.۸ جابجایی تسک بین ستون‌ها ``` PUT /api/kanban/tasks/{taskId}/move ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|----------| | `taskId`| number | شناسه تسک | **Request Body:** ```json { "fromColumnId": 1, "toColumnId": 2, "position": 0 } ``` **Response:** ```json { "success": true, "columns": [ { "id": 1, "title": "string", "taskIds": [] } ] } ``` --- ## ۳. Todo API (کارهای انجام‌دادنی) **سرویس:** `todoService` **استفاده مستقیم:** بدون Redux ### ۳.۱ لیست Todoها ``` GET /api/todos ``` **Query Parameters (اختیاری):** | پارامتر | نوع | توضیحات | |----------|-------|------------------------------------------------------------------| | `status` | string | `pending`, `in-progress`, `completed` | | `priority`| string | `high`, `medium`, `low` | | `label` | string | فیلتر بر اساس برچسب | | `filter` | string | `all`, `starred`, `important`, `completed`, `trashed` | | `search` | string | جستجو در عنوان و توضیحات | **مثال:** ``` GET /api/todos?filter=all&search=meeting ``` **Response:** ```json { "todos": [ { "id": 1, "title": "string", "description": "string", "status": "pending | in-progress | completed", "priority": "high | medium | low", "startDate": "2025-01-01T00:00:00.000Z", "dueDate": "2025-01-15T00:00:00.000Z", "createdDate": "2025-01-01T00:00:00.000Z", "labels": ["string"], "tags": ["string"], "isStarred": false, "isImportant": false, "isTrashed": false, "isKanban": false, "routine": 0, "source": "todo | calendar | kanban" } ], "total": 10 } ``` > **نکته:** Backend از `start_date`, `due_date`, `created_date`, `is_starred`, `is_important`, `is_trashed`, `is_kanban` (snake_case) استفاده می‌کند. --- ### ۳.۲ ایجاد Todo جدید ``` POST /api/todos ``` **Request Body (Backend - snake_case):** ```json { "title": "string", // الزامی "description": "string", // اختیاری "status": 0, // اختیاری - 0: pending, 1: in-progress, 2: completed "priority": 1, // اختیاری - 0: high, 1: medium, 2: low "start_date": "string", // اختیاری - ISO 8601 "due_date": "string", // اختیاری - ISO 8601 "labels": ["string"], // اختیاری "tags": ["string"], // اختیاری "is_starred": false, // اختیاری "is_important": false, // اختیاری "is_kanban": false, // اختیاری "routine": 0 // اختیاری - 0|1|2|3|4 } ``` **Response:** ```json { "todo": { "id": 1, "title": "string", ... } } ``` --- ### ۳.۳ به‌روزرسانی Todo ``` PUT /api/todos/{todoId} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|-----------| | `todoId`| number | شناسه Todo | **Request Body (Backend - snake_case, همه اختیاری):** ```json { "title": "string", "description": "string", "status": 0, "priority": 0, "start_date": "string", "due_date": "string", "labels": ["string"], "tags": ["string"], "is_starred": false, "is_important": false, "is_trashed": false, "is_kanban": false, "routine": 0 } ``` --- ### ۳.۴ حذف Todo ``` DELETE /api/todos/{todoId} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|-----------| | `todoId`| number | شناسه Todo | **Response:** ```json { "success": true } ``` --- ### ۳.۵ لیست برچسب‌ها ``` GET /api/todos/labels ``` **Response:** ```json { "labels": ["Personal", "Work", "Urgent"] } ``` --- ## ۴. Account Settings API (تنظیمات حساب) ### ۴.۱ دریافت اطلاعات کاربر (Account Details) **سرویس:** `userManagementService` **استفاده در:** `AccountDetails.tsx` ``` GET /api/admin/users/{userId} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|--------------| | `userId`| number | شناسه کاربر | **Response:** ```json { "user": { "id": 1, "role": "string", "email": "string", "status": "active | pending | inactive", "avatar": "string", "company": "string", "country": "string", "contact": "string", "fullName": "string", "username": "string", "currentPlan": "string", "billing": "string", "joinDate": "2025-01-01T00:00:00.000Z", "lastLogin": "2025-01-15T00:00:00.000Z", "twoStepVerification": false, "recentDevices": [], "activityTimeline": [], "projects": [], "invoices": [], "connections": [], "notifications": {} } } ``` > **توجه:** AccountDetails از `userManagementService.getUser(authUser.id)` استفاده می‌کند و اطلاعات کاربر لاگین‌شده را نمایش می‌دهد. endpoint فعلی admin است؛ برای پروفایل کاربر لاگین‌شده ممکن است نیاز به `/api/users/me` باشد. --- ### ۴.۲ به‌روزرسانی کاربر (Save Changes در Account Details) **نکته:** دکمه "Save Changes" در AccountDetails در حال حاضر API call ندارد. برای ذخیره باید از endpoint زیر استفاده شود: ``` PUT /api/admin/users/{userId} ``` **Path Parameters:** | پارامتر | نوع | توضیحات | |---------|-------|--------------| | `userId`| number | شناسه کاربر | **Request Body:** ```json { "fullName": "string", "email": "string", "contact": "string", "avatar": "string" } ``` --- ### ۴.۳ تغییر رمز عبور (Security) **نکته:** کامپوننت `ChangePasswordCard` در حال حاضر API call ندارد. برای پیاده‌سازی: ``` PUT /api/admin/users/{userId}/security ``` **Request Body:** ```json { "currentPassword": "string", "newPassword": "string", "twoStepVerification": false } ``` --- ### ۴.۴ Billing Plans (پلن‌ها و صورتحساب) **وضعیت فعلی:** از Server Actions با داده static استفاده می‌کند (`getPricingData`, `getInvoiceData`). **APIهای پیشنهادی (در صورت استفاده از API واقعی):** ``` GET ${API_URL}/pages/pricing ``` **Response (فرمت مورد انتظار):** ```json { "pricingPlans": [], "currentPlan": null } ``` ``` GET ${API_URL}/apps/invoice ``` **Response (فرمت مورد انتظار):** ```json { "invoices": [], "stats": { "totalInvoices": 0, "paidInvoices": 0, "pendingInvoices": 0, "pastDueInvoices": 0 } } ``` --- ## خلاصه Endpointها | View | Method | Endpoint | استفاده | |------|--------|----------|---------| | Calendar | GET | `/api/events` | لیست رویدادها | | Calendar | POST | `/api/events` | ایجاد رویداد | | Calendar | PUT | `/api/events/{id}` | به‌روزرسانی رویداد | | Calendar | DELETE | `/api/events/{id}` | حذف رویداد | | Kanban | GET | `/api/kanban/board` | دریافت Board | | Kanban | POST | `/api/kanban/columns` | ایجاد ستون | | Kanban | PUT | `/api/kanban/columns/{id}` | به‌روزرسانی ستون | | Kanban | DELETE | `/api/kanban/columns/{id}` | حذف ستون | | Kanban | POST | `/api/kanban/tasks` | ایجاد تسک | | Kanban | PUT | `/api/kanban/tasks/{id}` | به‌روزرسانی تسک | | Kanban | DELETE | `/api/kanban/tasks/{id}` | حذف تسک | | Kanban | PUT | `/api/kanban/tasks/{id}/move` | جابجایی تسک | | Todo | GET | `/api/todos` | لیست Todoها | | Todo | GET | `/api/todos/labels` | لیست برچسب‌ها | | Todo | POST | `/api/todos` | ایجاد Todo | | Todo | PUT | `/api/todos/{id}` | به‌روزرسانی Todo | | Todo | DELETE | `/api/todos/{id}` | حذف Todo | | Account | GET | `/api/admin/users/{id}` | دریافت اطلاعات کاربر | | Account | PUT | `/api/admin/users/{id}` | به‌روزرسانی کاربر | | Account | PUT | `/api/admin/users/{id}/security` | تغییر رمز/تنظیمات امنیتی | --- ## تبدیل‌های Frontend ↔ Backend ### Calendar - Frontend از `calendar` با مقادیر `Personal | Business | Family | Holiday | ETC` استفاده می‌کند. - `start` و `end` به صورت ISO 8601 ارسال می‌شوند. ### Kanban - **status:** `pending`→0, `in-progress`→1, `completed`→2 - **priority:** `high`→0, `medium`→1, `low`→2 - **snake_case در Backend:** `column_id`, `badge_text`, `due_date` ### Todo - **status:** `pending`→0, `in-progress`→1, `completed`→2 - **priority:** `high`→0, `medium`→1, `low`→2 - **snake_case در Backend:** `start_date`, `due_date`, `created_date`, `is_starred`, `is_important`, `is_trashed`, `is_kanban`