Skip to main content
#P1568

برگهٔ تازه

Route Info

Method Endpoint Controller
GET /api/v2/support/ticket/notes/list OfficialController@listNotesTicketSupport

شرح عملکرد (Functionality)

این متد وظیفه بازگرداندن جزئیات کامل یک تیکت و لیست گفتگوهای (Notes) آن را بر عهده دارد. همچنین به صورت همزمان عملیات "خوانده شدن" پیام‌ها را انجام می‌دهد. نکات فنی و منطقی آن عبارتند از:

  • کنترل دسترسی (Access Control): سیستم بررسی می‌کند که کاربر جاری اجازه مشاهده تیکت را دارد یا خیر. کاربر مجاز است اگر:
    • درخواست‌کننده (Requester) تیکت باشد.
    • اپراتور (Operator) تخصیص داده شده به تیکت باشد.
    • عضو لیست members دپارتمان مربوطه باشد.
    • مدیر دپارتمان باشد (که در این صورت نقش مدیریتی او به عضویت عادی تبدیل شده و پردازش می‌شود).
    * در صورت عدم دسترسی، status: false و پیام خطا برگردانده می‌شود.
  • منطق "خوانده شدن" (Mark as Read):
    • پیام‌هایی که توسط خود کاربر نوشته شده‌اند، نادیده گرفته می‌شوند.
    • اگر کاربر جاری عضو دپارتمان باشد (پشتیبان)، سیستم فقط پیام‌هایی را به عنوان "خوانده شده" علامت می‌زند که نویسنده آن‌ها عضو دپارتمان نباشد (یعنی پیام‌های مشتری).
    • فیلدهای read_by و read_on در دیتابیس به‌روزرسانی می‌شوند.
  • فرمت‌دهی محتوا (HTML Content):
    • اگر نوع پیام attachment باشد، بک‌اند به جای بازگرداندن صرفِ URL، کد HTML تولید می‌کند.
      • برای تصاویر: تگ <img> درون لینک قرار می‌گیرد.
      • برای فایل‌ها: نام فایل به همراه یک آیکون SVG درون لینک قرار می‌گیرد.
    • آدرس فایل‌ها به دامین storage.service01.ir اشاره دارد.
  • هیدراتاسیون داده‌ها: اطلاعات کاربران (نویسنده پیام، درخواست‌کننده، اپراتور) با استفاده از متد StaticController::getOperators به آبجکت کامل تبدیل می‌شود.

پارامترهای ورودی (Input Parameters)

نام پارامتر نوع الزامی؟ توضیحات
ticket Integer بله شناسه تیکت مورد نظر برای دریافت جزئیات و گفتگوها.

نمونه خروجی (Response)

{
    "status": true,
    "time": 1732623000,
    "data": {
        "department": {
            "id": 3,
            "type": "send", // 'send' if user is requester, else 'receive'
            "title": {
                "fa": "پشتیبانی فنی",
                "en": "Technical Support"
            }
        },
        "requester": { // آبجکت کامل کاربر درخواست دهنده
            "id": 10,
            "text": "1001 - نام کاربر",
            "query": {
                "id": 10,
                "sex": "male",
                "first_name": "Ali",
                "last_name": "Rezaei",
                "avatar": "...",
                "position": "...",
                "personnel_id": 1001
            }
        },
        "operator": false, // یا آبجکت کامل اپراتور پاسخگو
        "ticket": {
            "status": 1,
            "score": 0
        },
        "notes": [
            {
                "id": 1205,
                "type": "text",
                "operator": { ... }, // نویسنده پیام
                "note": "سلام، لطفا بررسی کنید.", // متن پیام
                "read_by": false, // یا آبجکت کاربری که پیام را خوانده
                "read_on": false, // تاریخ خوانده شدن
                "created_at": "2024-11-26 10:00:00"
            },
            {
                "id": 1206,
                "type": "text", // نوع در دیتابیس attachment است اما در خروجی text ست می‌شود (چون به HTML تبدیل شده)
                "operator": { ... },
                "note": "", // خروجی HTML
                "read_by": { ... },
                "read_on": "2024-11-26 10:05:00",
                "created_at": "2024-11-26 10:01:00"
            }
        ]
    }
}

نمونه خطا (عدم دسترسی):

{
    "status": false,
    "time": 1732623000,
    "message": "شما اجازه دسترسی به این گفتگو را ندارید"
}