Skip to main content
#P1732

POST /v2/comments

Create Comment

این اندپوینت برای ثبت یک نظر جدید در سیستم طراحی شده است. فرآیند ارسال داده به این اندپوینت به دلیل ملاحظات امنیتی، پیچیدگی خاصی دارد.
داده‌های اصلی نظر ابتدا باید به صورت یک آبجکت JSON ساخته شده، سپس با استفاده از کلید عمومی (Public Key) مربوط به هر شعبه رمزنگاری (Encrypt) شوند و در نهایت به صورت Base64 در یک فیلد به نام data به سرور ارسال گردند.


Request Flow and Encryption

  1. ساخت آبجکت JSON: ابتدا اطلاعات نظر را در قالب یک آبجکت JSON استاندارد آماده کنید (ساختار آن در جدول زیر آمده است).
  2. رمزنگاری (Encryption): رشته JSON حاصل را با استفاده از کلید عمومی RSA که مختص branch مورد نظر است، رمزنگاری کنید.
  3. کدگذاری Base64: خروجی باینری حاصل از مرحله رمزنگاری را به فرمت رشته Base64 تبدیل کنید.
  4. ارسال درخواست: یک درخواست POST به این اندپوینت ارسال کنید که بدنه آن فقط شامل یک فیلد data حاوی رشته Base64 نهایی است.
  5. پردازش در سرور: میدلور decryptData در سمت سرور با استفاده از کلید خصوصی (Private Key) متناظر، داده‌ها را رمزگشایی کرده و در اختیار کنترلر قرار می‌دهد.

Create a New Comment

URL: /v2/comments
Method: POST
Controller: CommentController@store
Middleware Chain: `authWithJwt`, `decryptData`

Request Body Structure (Before Encryption)

آبجکت JSON که باید رمزنگاری و ارسال شود، باید شامل فیلدهای زیر باشد:

Parameter Type Description Validation
content_id integer شناسه محتوایی که نظر برای آن است (مثلاً شناسه مقاله). Required
category string نوع محتوا (مثلاً 'article', 'accommodation'). Required
content string متن اصلی نظر. Required
name string نام نویسنده نظر. Required
email string ایمیل نویسنده نظر. Required, Email Format
phone string شماره تلفن نویسنده نظر. Optional
status integer وضعیت اولیه نظر (مثلاً 0 برای "در انتظار تایید"). Required
reply_to integer اگر این نظر پاسخی به نظر دیگری است، شناسه نظر والد در اینجا قرار می‌گیرد. در غیر این صورت null یا حذف شود. Optional, Nullable
اعتبارسنجی: تمام فیلدهای ورودی توسط StoreCommentRequest اعتبارسنجی می‌شوند. در صورت ارسال داده نامعتبر، خطای 422 بازگردانده خواهد شد.

Request Examples

مرحله ۱: ساختار JSON خام (قبل از رمزنگاری)

{
    "content_id": 152,
    "category": "article",
    "content": "این یک تست برای ثبت کامنت است.",
    "name": "کاربر تست",
    "email": "test@example.com",
    "phone": "09120000000",
    "status": 0,
    "reply_to": null
}

مرحله ۲: بدنه نهایی درخواست (بعد از رمزنگاری و Base64)

{
    "data": "eyB...[Encrypted & Base64 Encoded String]...SIn0="
}

Server-Side Logic

پس از رمزگشایی موفق، کنترلر به صورت خودکار اطلاعات زیر را به داده‌های دریافتی اضافه کرده و در دیتابیس ذخیره می‌کند:

  • operator_id: شناسه اپراتور لاگین کرده (در صورت وجود).
  • branch: شناسه شعبه اپراتور.
  • ip_address: آدرس IP درخواست‌دهنده.

 

Success Response

در صورت موفقیت، سرور یک پاسخ با کد 200 و حاوی آبجکت نظر جدید که از طریق CommentResource فرمت‌دهی شده، برمی‌گرداند.

{
    "status": true,
    "time": 1715000000,
    "data": {
        "id": 11,
        "operatorId": 5,
        "contentId": 152,
        "category": "article",
        "branch": 1,
        "commentText": "این یک تست برای ثبت کامنت است.",
        "status": "pending",
        "isFlagged": false,
        "replyTo": null,
        "createdAt": "2024-10-23T10:00:00.000000Z",
        "updatedAt": "2024-10-23T10:00:00.000000Z"
    }
}