arc/docs/WARRANTY_ACTIVATION_PAGE_ACCESS.md
2026-04-14 19:34:55 +03:30

157 lines
5.8 KiB
Markdown
Executable file

# بررسی دسترسی به صفحه فعال‌سازی گارانتی
## خلاصه بررسی
**نتیجه**: صفحه فعال‌سازی گارانتی (`PublicWarrantyActivationPage`) **وجود دارد** اما **راه دسترسی به آن در نظر گرفته نشده است**.
## جزئیات بررسی
### ✅ موارد موجود
1. **صفحه فعال‌سازی وجود دارد**:
- فایل: `hesabixUI/hesabix_ui/lib/pages/public/public_warranty_activation_page.dart`
- صفحه کاملاً پیاده‌سازی شده و آماده استفاده است
- شامل فرم کامل برای ورود اطلاعات فعال‌سازی
2. **صفحه در main.dart import شده**:
```dart
import 'pages/public/public_warranty_activation_page.dart';
```
3. **API Endpoint موجود است**:
- `POST /api/v1/warranty/public/activate`
- Service در فرانت‌اند پیاده‌سازی شده: `WarrantyService.activateWarranty()`
### ❌ موارد مفقود
1. **Route تعریف نشده**:
- در فایل `main.dart` هیچ route برای صفحه فعال‌سازی تعریف نشده است
- برخلاف صفحه `PublicPersonShareLinkPage` که route دارد: `/public/person-link/:code`
- صفحه فعال‌سازی قابل دسترسی نیست
2. **لینک در UI کسب و کار وجود ندارد**:
- در صفحه مدیریت گارانتی (`warranty_management_page.dart`) هیچ دکمه یا لینکی برای دسترسی به صفحه فعال‌سازی وجود ندارد
- در صفحه تنظیمات گارانتی (`warranty_settings_page.dart`) هم لینکی وجود ندارد
3. **لینک در Dialog جزئیات کد وجود ندارد**:
- در `warranty_code_details_dialog.dart` که جزئیات کد گارانتی را نمایش می‌دهد، هیچ لینکی برای فعال‌سازی وجود ندارد
4. **QR Code یا لینک اشتراک‌گذاری وجود ندارد**:
- هیچ مکانیزمی برای تولید QR Code یا لینک اشتراک‌گذاری برای کدهای گارانتی وجود ندارد
## مقایسه با صفحات مشابه
### صفحه PublicPersonShareLinkPage (موجود و قابل دسترسی)
```dart
GoRoute(
path: '/public/person-link/:code',
name: 'public_person_share_link',
builder: (context, state) => PublicPersonShareLinkPage(
code: state.pathParameters['code'] ?? '',
),
),
```
این صفحه:
- ✅ Route دارد
- ✅ قابل دسترسی است
- ✅ از طریق لینک اشتراک‌گذاری استفاده می‌شود
### صفحه PublicWarrantyActivationPage (موجود اما غیرقابل دسترسی)
- ❌ Route ندارد
- ❌ قابل دسترسی نیست
- ❌ هیچ لینکی به آن وجود ندارد
## راه‌حل‌های پیشنهادی
### 1. اضافه کردن Route (ضروری)
```dart
GoRoute(
path: '/public/warranty/activate',
name: 'public_warranty_activate',
builder: (context, state) {
final businessCode = state.uri.queryParameters['business_code'];
return PublicWarrantyActivationPage(
businessCode: businessCode,
);
},
),
```
یا با business_id:
```dart
GoRoute(
path: '/public/warranty/activate/:business_id',
name: 'public_warranty_activate',
builder: (context, state) {
final businessId = int.tryParse(state.pathParameters['business_id'] ?? '');
return PublicWarrantyActivationPage(
businessId: businessId,
);
},
),
```
### 2. اضافه کردن لینک در صفحه مدیریت گارانتی
در `warranty_management_page.dart` می‌توان دکمه‌ای اضافه کرد:
- دکمه "لینک فعال‌سازی" که URL صفحه فعال‌سازی را نمایش دهد
- یا دکمه "کپی لینک" برای اشتراک‌گذاری
### 3. اضافه کردن لینک در Dialog جزئیات
در `warranty_code_details_dialog.dart` می‌توان:
- دکمه "فعال‌سازی گارانتی" که به صفحه فعال‌سازی هدایت کند
- یا نمایش لینک فعال‌سازی برای اشتراک‌گذاری
### 4. تولید QR Code
می‌توان قابلیت تولید QR Code برای کدهای گارانتی اضافه کرد که:
- شامل لینک صفحه فعال‌سازی باشد
- یا مستقیماً شامل کد و سریال گارانتی باشد
### 5. لینک اشتراک‌گذاری
مشابه `PublicPersonShareLinkPage`، می‌توان:
- لینک اشتراک‌گذاری برای هر کد گارانتی ایجاد کرد
- که مستقیماً به صفحه فعال‌سازی با کد از پیش پر شده هدایت کند
## URL پیشنهادی برای صفحه فعال‌سازی
### گزینه 1: ساده (بدون business_id)
```
/public/warranty/activate
```
### گزینه 2: با business_code (Query Parameter)
```
/public/warranty/activate?business_code=ABC123
```
### گزینه 3: با business_id (Path Parameter)
```
/public/warranty/activate/:business_id
```
### گزینه 4: با کد از پیش پر شده (Query Parameter)
```
/public/warranty/activate?code=WR-ABC12345&serial=XYZ789012
```
## نتیجه‌گیری
صفحه فعال‌سازی گارانتی **کاملاً پیاده‌سازی شده** اما **غیرقابل دسترسی** است چون:
1. ❌ Route تعریف نشده
2. ❌ هیچ لینکی در UI وجود ندارد
3. ❌ هیچ مکانیزمی برای اشتراک‌گذاری وجود ندارد
**برای استفاده از این صفحه، باید**:
1. Route اضافه شود
2. لینک یا دکمه در UI کسب و کار اضافه شود
3. (اختیاری) QR Code یا لینک اشتراک‌گذاری اضافه شود