prefix('v1')->group(function () { Route::get('/track/{awb_no}', [TrackController::class, 'show']); }); // ══════════════════════════════════════════════════════════════ // API عمومی (بدون نیاز به احراز هویت) // ══════════════════════════════════════════════════════════════ Route::prefix('v1')->group(function () { Route::get('/countries', [CustomerOrderController::class, 'countries']); }); // ══════════════════════════════════════════════════════════════ // Auth API (عمومی - برای دریافت توکن) // ══════════════════════════════════════════════════════════════ Route::post('/v1/auth/login', [AuthController::class, 'login']); Route::middleware(['auth:sanctum'])->post('/v1/auth/logout', [AuthController::class, 'logout']); // ══════════════════════════════════════════════════════════════ // API برای کاربران لاگین‌شده (با Sanctum / Bearer Token) // ══════════════════════════════════════════════════════════════ Route::middleware(['auth:sanctum'])->prefix('v1')->group(function () { // ─── Wallet API (کاربر عادی) ─── Route::get('/wallet/balance', [WalletController::class, 'balance']); Route::get('/wallet/transactions', [WalletController::class, 'transactions']); // ─── Payment API ─── Route::post('/payment/redirect', [PaymentController::class, 'redirectToGateway']); Route::get('/payment/check/{transaction}', [PaymentController::class, 'checkStatus']); // ─── Admin Wallet API ─── Route::post('/wallet/admin-adjust', [WalletController::class, 'adminAdjust']); Route::post('/wallet/{wallet}/freeze', [WalletController::class, 'freeze']); Route::post('/wallet/{wallet}/unfreeze', [WalletController::class, 'unfreeze']); Route::get('/wallet/{wallet}/activity-log', [WalletController::class, 'activityLog']); // ─── Customer Orders API (جدید) ─── Route::prefix('customer')->group(function () { // پروفایل و آمار Route::get('/profile', [CustomerOrderController::class, 'profile']); // لیست کشورها (عمومی - بدون نیاز به احراز هویت) // این endpoint در گروه auth:sanctum نیست // سفارشات Route::get('/orders', [CustomerOrderController::class, 'index']); Route::post('/orders', [CustomerOrderController::class, 'store']); Route::get('/orders/{shipment}', [CustomerOrderController::class, 'show']); Route::post('/orders/{shipment}/cancel', [CustomerOrderController::class, 'cancel']); // دانلود PDFهای سفارش Route::get('/orders/{shipment}/pdf/awb', [ShipmentPdfController::class, 'awb']); Route::get('/orders/{shipment}/pdf/invoice', [ShipmentPdfController::class, 'invoice']); Route::get('/orders/{shipment}/pdf/label', [ShipmentPdfController::class, 'label']); Route::get('/orders/{shipment}/pdf/import-invoice', [ShipmentPdfController::class, 'importInvoice']); // تعهدنامه‌ها Route::get('/orders/{shipment}/commitment-forms', [CommitmentFormController::class, 'shipmentForms']); Route::post('/orders/{shipment}/commitment-forms/{form}/upload', [CommitmentFormController::class, 'uploadSigned']); // نوتیفیکیشن‌ها Route::get('/notifications', [CustomerOrderController::class, 'notifications']); Route::post('/notifications/{notification}/read', [CustomerOrderController::class, 'markNotificationRead']); // پرداخت سفارش Route::post('/orders/{shipment}/pay-wallet', [CustomerOrderController::class, 'payFromWallet']); Route::post('/orders/{shipment}/pay-gateway', [CustomerOrderController::class, 'payViaGateway']); }); // ─── Staff Orders API (تأیید سفارشات) ─── Route::prefix('staff')->group(function () { // لیست سفارشات در انتظار تأیید Route::get('/orders/pending-approval', [StaffOrderController::class, 'pendingApproval']); // تأیید یا رد سفارش Route::post('/orders/{shipment}/approve', [StaffOrderController::class, 'approve']); Route::post('/orders/{shipment}/reject', [StaffOrderController::class, 'reject']); // ─── Customer Financial API (وضعیت مالی مشتری) ─── Route::get('/customers/search', [CustomerFinancialController::class, 'search']); Route::get('/customers/{customer}/financial-status', [CustomerFinancialController::class, 'financialStatus']); }); }); // ══════════════════════════════════════════════════════════════ // Mock Gateway Routes (عمومی - برای شبیه‌سازی درگاه) // ══════════════════════════════════════════════════════════════ Route::prefix('v1/payment')->group(function () { Route::get('/mock-gateway', [MockGatewayController::class, 'showGateway']); Route::get('/mock-gateway/success', [MockGatewayController::class, 'simulateSuccess']); Route::get('/mock-gateway/failure', [MockGatewayController::class, 'simulateFailure']); }); // Callback از درگاه (بدون auth) Route::any('/v1/payment/callback', [PaymentController::class, 'callback']) ->name('payment.callback'); // ══════════════════════════════════════════════════════════════ // APIهای عمومی (بدون auth) // ══════════════════════════════════════════════════════════════ Route::post('/v1/calculate', [PricingController::class, 'calculate']); Route::get('/v1/discount-codes', [DiscountCodeController::class, 'index']); Route::post('/v1/discount-codes/validate', [DiscountCodeController::class, 'validate']); // API فایل‌های تعهدنامه (عمومی) Route::get('/v1/commitment-forms', [CommitmentFormController::class, 'index']); Route::get('/v1/commitment-forms/{direction}', [CommitmentFormController::class, 'byDirection']); // API تأیید موبایل (عمومی) Route::post('/v1/verify/send-code', [MobileVerificationController::class, 'sendCode']); Route::post('/v1/verify/check-code', [MobileVerificationController::class, 'checkCode']); // API ارسال پیامک (نیاز به auth دارد) Route::middleware(['auth:sanctum'])->post('/v1/verify/send-sms', [MobileVerificationController::class, 'sendSms']);