12 KiB
Executable file
فرآیند فعالسازی گارانتی - گزارش بررسی
این سند فرآیند کامل فعالسازی گارانتی یک محصول را در سیستم شرح میدهد.
مراحل کلی فرآیند
مرحله 1: تولید کدهای گارانتی (پیش از فعالسازی)
قبل از اینکه مشتری بتواند گارانتی را فعال کند، کسب و کار باید کدهای گارانتی را تولید کند:
Endpoint: POST /api/v1/warranty/business/{business_id}/generate
پارامترهای مورد نیاز:
product_id: شناسه کالاquantity: تعداد کدهای مورد نیازwarranty_duration_days: مدت گارانتی به روز (مثلاً 365 روز)code_format: فرمت کد (random, sequential, custom)serial_format: فرمت سریال (random, custom)custom_codes: لیست کدهای دلخواه (در صورت استفاده از فرمت custom)custom_serials: لیست سریالهای دلخواه (در صورت استفاده از فرمت custom)
نتیجه: لیستی از کدهای گارانتی تولید شده با:
code: کد گارانتی (مثلاً WR-ABC12345)warranty_serial: سریال گارانتی (مثلاً XYZ789012)status: وضعیت که در ابتداgeneratedاستexpires_at: تاریخ انقضا
مرحله 2: فعالسازی گارانتی توسط مشتری
مشتری میتواند گارانتی را از طریق endpoint عمومی فعال کند.
روش فعالسازی
از طریق UI (فرانتاند)
مسیر: صفحه عمومی فعالسازی گارانتی
فرم فعالسازی شامل فیلدهای زیر است:
فیلدهای الزامی:
- کد گارانتی (
warranty_code): کد تولید شده در مرحله قبل - سریال گارانتی (
warranty_serial): سریال تولید شده در مرحله قبل - نام مشتری (
customer_name) - شماره تماس (
customer_phone)
فیلدهای اختیاری:
- ایمیل مشتری (
customer_email) - سریال کالا (
product_serial): در صورتی که نیاز به تأیید سریال کالا باشد
از طریق API
Endpoint: POST /api/v1/warranty/public/activate
مشخصات:
- عمومی است (نیازی به احراز هویت ندارد)
- IP آدرس و User Agent خودکار ثبت میشود
Request Body:
{
"warranty_code": "WR-ABC12345",
"warranty_serial": "XYZ789012",
"customer_name": "علی احمدی",
"customer_phone": "09123456789",
"customer_email": "ali@example.com", // اختیاری
"product_serial": "PROD-SERIAL-123" // اختیاری
}
بررسیهای انجام شده در فرآیند فعالسازی
1. بررسی وجود کد گارانتی
- سیستم کد گارانتی را در دیتابیس جستجو میکند
- در صورت عدم یافتن: خطای
WARRANTY_CODE_NOT_FOUND
2. بررسی فعال بودن پلاگین
- بررسی میکند که پلاگین گارانتی برای کسب و کار فعال باشد
- در صورت غیرفعال بودن: خطای
PLUGIN_NOT_ACTIVE
3. بررسی صحت سریال گارانتی
- سریال وارد شده باید با سریال ثبت شده در دیتابیس مطابقت داشته باشد
- در صورت عدم تطابق: خطای
INVALID_WARRANTY_SERIAL
4. بررسی وضعیت گارانتی
گارانتی باید در وضعیت generated باشد:
- اگر قبلاً فعال شده: خطای
WARRANTY_ALREADY_ACTIVATED - اگر منقضی شده: خطای
WARRANTY_EXPIRED - اگر لغو شده: خطای
WARRANTY_REVOKED - اگر وضعیت نامعتبر: خطای
INVALID_WARRANTY_STATUS
5. بررسی تاریخ انقضا
- اگر
expires_atوجود داشته باشد و تاریخ گذشته باشد، گارانتی منقضی میشود - در صورت انقضا: خطای
WARRANTY_EXPIRED
6. بررسی محدودیت تلاشهای فعالسازی
- سیستم تعداد تلاشهای ناموفق را در cache نگه میدارد
- اگر تعداد تلاشها بیش از حد مجاز باشد، کاربر قفل میشود
- در صورت قفل: خطای
TOO_MANY_ATTEMPTSبا مدت زمان قفل
7. بررسی نیاز به تأیید سریال کالا (شرطی)
اگر در تنظیمات گارانتی (require_serial_verification یا require_product_instance_match) فعال باشد:
- سریال کالا باید وارد شود
- سیستم
ProductInstanceرا جستجو میکند - در صورت عدم یافتن: خطای
PRODUCT_SERIAL_NOT_FOUND
فرآیند فعالسازی پس از بررسیها
1. اتصال به Person (در صورت فعال بودن)
- اگر
auto_link_to_personدر تنظیمات فعال باشد:- سیستم بر اساس شماره تماس، Person را در سیستم جستجو میکند
- اگر Person یافت شود، به گارانتی متصل میشود
2. بهروزرسانی وضعیت گارانتی
warranty_code.status = "activated"
warranty_code.activated_at = datetime.utcnow()
warranty_code.activated_by_person_id = person.id if person else None
3. ثبت اطلاعات مشتری
- اگر Person یافت نشد، اطلاعات مشتری در
activated_by_customer_infoذخیره میشود - شامل: نام، تلفن، ایمیل
4. اتصال به ProductInstance (در صورت وجود)
- اگر سریال کالا تأیید شد،
product_instance_idتنظیم میشود
5. ایجاد لینک رهگیری (در صورت فعال بودن)
اگر enable_tracking_link در تنظیمات فعال باشد و Person وجود داشته باشد:
- یک کد یکتا برای لینک رهگیری تولید میشود
- لینک رهگیری با تاریخ انقضا (در صورت تنظیم) ایجاد میشود
- کد لینک در
tracking_link_codeذخیره میشود
6. ثبت سابقه فعالسازی
- یک رکورد در جدول
warranty_activationsایجاد میشود - شامل تمام اطلاعات ورودی، IP، User Agent، و روش تأیید
7. ثبت رویداد رهگیری
- یک رویداد از نوع
activationدر جدولwarranty_trackingثبت میشود - برای تاریخچه تغییرات گارانتی
8. پاک کردن تلاشهای ناموفق
- پس از موفقیت، تعداد تلاشهای ناموفق از cache پاک میشود
پاسخ API
پس از فعالسازی موفق، پاسخ شامل موارد زیر است:
{
"id": 123,
"code": "WR-ABC12345",
"warranty_serial": "XYZ789012",
"status": "activated",
"activated_at": "2024-01-20T10:30:00Z",
"expires_at": "2025-01-20T10:30:00Z",
"tracking_link_code": "TRACK-CODE-123456", // در صورت وجود
"person_id": 456 // در صورت اتصال به Person
}
تنظیمات موثر در فرآیند فعالسازی
تنظیمات کسب و کار (WarrantySettings):
- require_serial_verification: نیاز به تأیید سریال کالا
- require_product_instance_match: نیاز به تطابق با ProductInstance
- max_activation_attempts: حداکثر تلاش برای فعالسازی
- activation_lockout_duration_minutes: مدت قفل شدن پس از تلاشهای ناموفق
- auto_link_to_person: اتصال خودکار به Person
- enable_tracking_link: فعالسازی لینک رهگیری
- tracking_link_expires_days: مدت اعتبار لینک رهگیری
مثال کامل فرآیند
سناریو 1: فعالسازی ساده
-
تولید کد گارانتی (توسط کسب و کار):
POST /api/v1/warranty/business/1/generate { "product_id": 100, "quantity": 1, "warranty_duration_days": 365 }نتیجه:
code: "WR-ABC12345"warranty_serial: "XYZ789012"
-
فعالسازی (توسط مشتری):
POST /api/v1/warranty/public/activate { "warranty_code": "WR-ABC12345", "warranty_serial": "XYZ789012", "customer_name": "علی احمدی", "customer_phone": "09123456789" }نتیجه: گارانتی با موفقیت فعال میشود
سناریو 2: فعالسازی با تأیید سریال
- در تنظیمات گارانتی:
require_serial_verification = true - مشتری باید علاوه بر کد و سریال گارانتی، سریال کالا را هم وارد کند:
{ "warranty_code": "WR-ABC12345", "warranty_serial": "XYZ789012", "product_serial": "PROD-SERIAL-123", "customer_name": "علی احمدی", "customer_phone": "09123456789" } - سیستم سریال کالا را در
ProductInstanceجستجو میکند - در صورت تطابق، فعالسازی انجام میشود
سناریو 3: فعالسازی با Person موجود
- در تنظیمات:
auto_link_to_person = true - مشتری با شماره تماسی که در سیستم به عنوان Person ثبت شده است فعالسازی میکند
- سیستم به صورت خودکار:
- Person را پیدا میکند
- گارانتی را به Person متصل میکند
- در صورت فعال بودن tracking link، لینک رهگیری ایجاد میکند
نکات مهم
-
امنیت:
- Endpoint فعالسازی عمومی است اما محدودیت تلاش دارد
- IP و User Agent ثبت میشود
- بررسیهای امنیتی متعددی انجام میشود
-
تاریخچه:
- تمام فعالسازیها در
warranty_activationsثبت میشود - رویدادها در
warranty_trackingثبت میشود
- تمام فعالسازیها در
-
انعطافپذیری:
- تنظیمات کسب و کار میتواند فرآیند را سفارشی کند
- میتواند ساده یا پیچیده باشد
-
یکتایی:
- هر کد گارانتی فقط یکبار قابل فعالسازی است
- سریال گارانتی یکتا است
خطاهای ممکن
| خطا | کد | توضیح |
|---|---|---|
| کد گارانتی یافت نشد | WARRANTY_CODE_NOT_FOUND |
کد وارد شده در دیتابیس وجود ندارد |
| پلاگین فعال نیست | PLUGIN_NOT_ACTIVE |
پلاگین گارانتی برای کسب و کار فعال نیست |
| سریال نامعتبر | INVALID_WARRANTY_SERIAL |
سریال با کد گارانتی مطابقت ندارد |
| قبلاً فعال شده | WARRANTY_ALREADY_ACTIVATED |
این گارانتی قبلاً فعال شده است |
| منقضی شده | WARRANTY_EXPIRED |
تاریخ انقضای گارانتی گذشته است |
| لغو شده | WARRANTY_REVOKED |
گارانتی توسط کسب و کار لغو شده است |
| سریال کالا الزامی | PRODUCT_SERIAL_REQUIRED |
در تنظیمات نیاز به سریال کالا است |
| سریال کالا یافت نشد | PRODUCT_SERIAL_NOT_FOUND |
سریال کالا در سیستم ثبت نشده است |
| تلاش بیش از حد | TOO_MANY_ATTEMPTS |
تعداد تلاشهای ناموفق بیش از حد مجاز است |
خلاصه
فرآیند فعالسازی گارانتی شامل مراحل زیر است:
- ✅ تولید کد گارانتی (پیش از فعالسازی)
- ✅ ورود اطلاعات توسط مشتری (کد، سریال، اطلاعات مشتری)
- ✅ انجام بررسیهای امنیتی و اعتبارسنجی
- ✅ بهروزرسانی وضعیت گارانتی به
activated - ✅ ثبت اطلاعات و ایجاد سوابق
- ✅ ایجاد لینک رهگیری (در صورت نیاز)
- ✅ بازگرداندن نتیجه به مشتری
این فرآیند از طریق UI (صفحه عمومی) یا مستقیماً از طریق API قابل انجام است.