{
	"info": {
		"_postman_id": "payment-flow-collection-id",
		"name": "LMS Payment Flow - Complete Transaction Suite",
		"description": "💳 **Complete Payment & Transaction Testing Collection**\n\n## 🚀 Quick Start Guide\n1. **Environment Setup**: Set `base_url` and `midtrans_server_key` in environment\n2. **Authentication**: Login to get authentication token\n3. **Package Selection**: Browse and select packages for purchase\n4. **Coupon Integration**: Apply and validate discount coupons\n5. **Payment Processing**: Complete Midtrans payment flow\n6. **Transaction Tracking**: Monitor payment status and history\n\n## 🎯 Complete Workflow Features\n- 🔐 **Secure Authentication**: Token-based user authentication\n- 📦 **Package Discovery**: Browse available learning packages\n- 🎫 **Smart Coupon System**: Integrated discount validation and application\n- 💰 **Payment Processing**: Full Midtrans integration with webhook simulation\n- 📊 **Transaction Analytics**: Comprehensive payment history and tracking\n- 🛡️ **Error Handling**: Complete edge case and failure scenario testing\n- 💳 **Admin Fee Management**: Automatic platform fee calculation (Rp 4,000)\n\n## 🎛️ Advanced Features\n- **Real Pricing Calculations**: Uses discount_price when available\n- **Coupon Integration**: Seamless discount application and validation\n- **Webhook Testing**: Complete Midtrans notification simulation\n- **Multi-scenario Testing**: Success, failure, and edge case coverage\n- **Cross-collection Compatibility**: Works with LMS Coupons API collection\n\n## 🔧 Environment Variables\n**Required:**\n- `base_url`: Your API base URL (default: http://localhost:8000)\n- `midtrans_server_key`: Midtrans server key for webhook signatures\n\n**Auto-populated:**\n- `auth_token`: Authentication bearer token\n- `test_package_id`: Selected package ID\n- `checkout_id`: Preview order identifier\n- `final_amount`: Total payment amount\n- `package_name`: Selected package name\n- Various transaction and order tracking variables\n\n## 💡 Integration Notes\n- Compatible with LMS Coupons API collection\n- Supports real Midtrans sandbox testing\n- Includes complete payment lifecycle\n- Provides detailed console logging for debugging\n\n🎯 **Pro Tip**: Use with LMS Coupons collection for complete discount testing!",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "1. Authentication",
			"item": [
				{
					"name": "Login",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success && responseJson.data.token) {",
									"        pm.environment.set('auth_token', responseJson.data.token);",
									"        pm.environment.set('customer_id', responseJson.data.customer.id);",
									"        console.log('✅ Auth token saved:', responseJson.data.token);",
									"        console.log('👤 Customer ID:', responseJson.data.customer.id);",
									"    }",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"login\": \"admin@example.com\",\n  \"password\": \"admin123\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/login",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"login"
							]
						},
						"description": "🔐 Login with test admin account. Token will be automatically saved to environment.\n\n**Test Credentials:**\n- Email: admin@example.com\n- Password: admin123\n\n**Auto-saved Variables:**\n- `auth_token`: Bearer token for API authentication\n- `customer_id`: Current customer ID"
					},
					"response": []
				},
				{
					"name": "Get My Profile",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/auth/me",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"auth",
								"me"
							]
						},
						"description": "👤 Get current authenticated user profile and verify login status"
					},
					"response": []
				}
			],
			"description": "🔐 Authentication endpoints for login and profile management"
		},
		{
			"name": "2. Browse Packages",
			"item": [
				{
					"name": "Get All Packages",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success && responseJson.data.length > 0) {",
									"        const firstPackage = responseJson.data[0];",
									"        ",
									"        // Core package variables for testing",
									"        pm.environment.set('test_package_id', firstPackage.id);",
									"        pm.environment.set('test_package_slug', firstPackage.slug);",
									"        pm.environment.set('test_package_name', firstPackage.name);",
									"        ",
									"        // Pricing variables for coupon testing",
									"        const currentPrice = firstPackage.discount_price > 0 ? firstPackage.discount_price : firstPackage.price;",
									"        pm.environment.set('package_current_price', currentPrice);",
									"        pm.environment.set('package_original_price', firstPackage.price);",
									"        pm.environment.set('package_discount_price', firstPackage.discount_price || 0);",
									"        ",
									"        // Enhanced console logging",
									"        console.log('📦 Available Packages Summary:');",
									"        console.log('   Total Available:', responseJson.data.length);",
									"        console.log('🎯 Selected Test Package:');",
									"        console.log('   Name:', firstPackage.name);",
									"        console.log('   ID:', firstPackage.id);",
									"        console.log('   Original Price: Rp', firstPackage.price.toLocaleString());",
									"        if (firstPackage.discount_price > 0) {",
									"            console.log('   🔥 Discount Price: Rp', firstPackage.discount_price.toLocaleString());",
									"            const savings = firstPackage.price - firstPackage.discount_price;",
									"            const percentage = Math.round((savings / firstPackage.price) * 100);",
									"            console.log('   💰 You Save: Rp', savings.toLocaleString(), '(' + percentage + '%)');",
									"        }",
									"        console.log('   💳 Current Test Price: Rp', currentPrice.toLocaleString());",
									"        console.log('');",
									"        console.log('✅ Package variables set for coupon testing');",
									"        console.log('🔗 Ready for cross-collection integration');",
									"    } else {",
									"        console.log('❌ No packages available for testing');",
									"    }",
									"} else {",
									"    console.log('❌ Failed to fetch packages:', pm.response.code);",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/packages",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"packages"
							]
						},
						"description": "📦 Get all available packages for purchase\n\n**Auto-saved Variables:**\n- `test_package_id`: First package ID for testing\n- `test_package_slug`: First package slug for testing"
					},
					"response": []
				},
				{
					"name": "Get Featured Packages",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/packages/featured",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"packages",
								"featured"
							]
						},
						"description": "⭐ Get featured packages only"
					},
					"response": []
				},
				{
					"name": "Get Package Details",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/packages/{{test_package_slug}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"packages",
								"{{test_package_slug}}"
							]
						},
						"description": "🔍 Get details for a specific package by slug"
					},
					"response": []
				}
			],
			"description": "📦 Package browsing and discovery endpoints"
		},
		{
			"name": "3. Coupon Management",
			"item": [
				{
					"name": "Get Available Coupons",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/coupons/available",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"coupons",
								"available"
							]
						},
						"description": "🎫 Get all available coupons that the customer can use"
					},
					"response": []
				},
				{
					"name": "Validate Coupon",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success && responseJson.data.valid) {",
									"        console.log('✅ Coupon is valid');",
									"        console.log('💰 Discount:', responseJson.data.discount_amount);",
									"    } else {",
									"        console.log('❌ Coupon validation failed:', responseJson.message);",
									"    }",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"code\": \"WELCOME10\",\n  \"package_id\": {{test_package_id}}\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/coupons/validate",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"coupons",
								"validate"
							]
						},
						"description": "✅ Validate a coupon code for a specific package before applying it"
					},
					"response": []
				},
				{
					"name": "Get Coupon History",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/coupons/history",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"coupons",
								"history"
							]
						},
						"description": "📊 Get customer's coupon usage history"
					},
					"response": []
				}
			],
			"description": "🎫 Coupon validation and management endpoints"
		},
		{
			"name": "4. Payment Flow",
			"item": [
				{
					"name": "Get Checkout Summary",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success && responseJson.data.checkout_id) {",
									"        pm.environment.set('checkout_id', responseJson.data.checkout_id);",
									"        pm.environment.set('final_amount', responseJson.data.pricing.final_amount);",
									"        pm.environment.set('package_name', responseJson.data.package.name);",
									"        console.log('🛒 Checkout Summary Generated:');",
									"        console.log('📦 Package:', responseJson.data.package.name);",
									"        console.log('💰 Original Price: Rp', responseJson.data.pricing.original_price.toLocaleString());",
									"        console.log('💰 Final Amount: Rp', responseJson.data.pricing.final_amount.toLocaleString());",
									"        console.log('💰 Total Savings: Rp', responseJson.data.discounts.total_savings.toLocaleString());",
									"        console.log('💰 Admin Fee: Rp', responseJson.data.pricing.platform_admin_fee.toLocaleString());",
									"        if (responseJson.data.discounts.coupon_discount.applied) {",
									"            console.log('🎫 Coupon Applied:', responseJson.data.discounts.coupon_discount.coupon.code);",
									"        }",
									"        if (responseJson.data.summary.savings_message) {",
									"            console.log('✨ Savings:', responseJson.data.summary.savings_message);",
									"        }",
									"    }",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"package_id\": {{test_package_id}},\n  \"coupon_code\": \"WELCOME10\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/payments/checkout-summary",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"payments",
								"checkout-summary"
							]
						},
						"description": "🛒 Get detailed checkout summary with pricing breakdown, discounts, and coupon calculations before payment initiation.\n\n**Features:**\n- Package pricing calculation\n- Discount application\n- Coupon validation and discount\n- Platform admin fee (Rp 4,000)\n- Total savings calculation\n\n**Optional Parameters:**\n- `coupon_code`: Apply discount coupon\n\n**Auto-saved Variables:**\n- `checkout_id`: Preview order ID\n- `final_amount`: Total amount to pay\n- `package_name`: Selected package name"
					},
					"response": []
				},
				{
					"name": "Initiate Payment",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success && responseJson.data.transaction_id) {",
									"        pm.environment.set('transaction_id', responseJson.data.transaction_id);",
									"        pm.environment.set('payment_amount', responseJson.data.amount);",
									"        pm.environment.set('snap_token', responseJson.data.snap_token);",
									"        pm.environment.set('payment_url', responseJson.data.payment_url);",
									"        console.log('🚀 Payment Initiated Successfully!');",
									"        console.log('💳 Transaction ID:', responseJson.data.transaction_id);",
									"        console.log('💰 Amount: Rp', responseJson.data.amount.toLocaleString());",
									"        console.log('🔗 Payment URL:', responseJson.data.payment_url);",
									"        console.log('');",
									"        console.log('📱 Next Steps:');",
									"        console.log('1. Visit the payment URL to complete payment in Midtrans Sandbox');",
									"        console.log('2. Use test card: 4811111111111114, CVV: 123, Exp: 12/25');",
									"        console.log('3. Or run the webhook simulation request');",
									"    }",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"package_id\": {{test_package_id}}\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/payments/initiate",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"payments",
								"initiate"
							]
						},
						"description": "🚀 Initiate payment for a package and get Midtrans payment token.\n\n**Features:**\n- Creates pending transaction\n- Generates Midtrans Snap token\n- Returns payment URL for testing\n- Prevents duplicate purchases\n\n**Auto-saved Variables:**\n- `transaction_id`: Unique transaction identifier\n- `payment_amount`: Total amount to pay\n- `snap_token`: Midtrans payment token\n- `payment_url`: Direct payment URL for testing"
					},
					"response": []
				},
				{
					"name": "Simulate Midtrans Success Webhook",
					"event": [
						{
							"listen": "prerequest",
							"script": {
								"exec": [
									"// Generate proper Midtrans signature",
									"const orderId = pm.environment.get('transaction_id');",
									"const statusCode = '200';",
									"const grossAmount = pm.environment.get('payment_amount');",
									"const serverKey = pm.environment.get('midtrans_server_key');",
									"",
									"if (!orderId || !grossAmount) {",
									"    console.error('❌ Missing transaction data. Please run \"Initiate Payment\" first.');",
									"    return;",
									"}",
									"",
									"if (!serverKey || serverKey === 'your-sandbox-server-key') {",
									"    console.warn('⚠️  Please set your Midtrans Server Key in environment variables!');",
									"    console.warn('📝 Go to: Variables tab → Set midtrans_server_key to your actual server key');",
									"    console.warn('🔧 Using mock signature for testing...');",
									"    pm.environment.set('webhook_signature', 'mock_signature_for_testing');",
									"} else {",
									"    // Create signature hash (order_id + status_code + gross_amount + server_key)",
									"    const signatureString = orderId + statusCode + grossAmount + serverKey;",
									"    const signature = CryptoJS.SHA512(signatureString).toString();",
									"    pm.environment.set('webhook_signature', signature);",
									"    console.log('🔐 Generated signature for webhook:', signature.substring(0, 20) + '...');",
									"}",
									"",
									"console.log('🔔 Simulating Midtrans success webhook...');"
								],
								"type": "text/javascript"
							}
						},
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success) {",
									"        console.log('✅ Payment webhook processed successfully!');",
									"        console.log('🎉 Package should now be activated for the customer');",
									"    }",
									"} else {",
									"    console.log('❌ Webhook processing failed');",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"order_id\": \"{{transaction_id}}\",\n  \"transaction_status\": \"settlement\",\n  \"gross_amount\": \"{{payment_amount}}\",\n  \"payment_type\": \"credit_card\",\n  \"transaction_time\": \"{{$isoTimestamp}}\",\n  \"status_code\": \"200\",\n  \"status_message\": \"Success, transaction is found\",\n  \"fraud_status\": \"accept\",\n  \"signature_key\": \"{{webhook_signature}}\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/midtrans-notification",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"midtrans-notification"
							]
						},
						"description": "🔔 Simulate successful Midtrans webhook notification to activate the package.\n\n**Features:**\n- Auto-generates proper webhook signature\n- Simulates settlement transaction\n- Activates customer package\n- Updates transaction status\n\n**Requirements:**\n- Set `midtrans_server_key` in environment for proper signature\n- Run \"Initiate Payment\" first to get transaction details\n\n**Test Card for Manual Testing:**\n- Card: 4811111111111114\n- CVV: 123\n- Expiry: 12/25"
					},
					"response": []
				},
				{
					"name": "Open Payment Page (Browser)",
					"request": {
						"method": "GET",
						"header": [],
						"url": {
							"raw": "{{payment_url}}",
							"host": [
								"{{payment_url}}"
							]
						},
						"description": "🌐 Open this URL in your browser to complete payment in Midtrans Sandbox.\n\n**Test Card Details:**\n- Card Number: 4811111111111114\n- CVV: 123\n- Expiry: 12/25\n- Name: Any name\n\n**Alternative Payment Methods:**\n- Bank Transfer: BCA, BNI, Mandiri\n- E-Wallet: GoPay, DANA, OVO\n- Convenience Store: Indomaret, Alfamart\n\n**Note:** This opens the Midtrans Sandbox payment page for manual testing."
					},
					"response": []
				},
				{
					"name": "Check Payment Status",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success) {",
									"        const data = responseJson.data;",
									"        console.log('💳 Payment Status Check:');",
									"        console.log('📊 Status:', data.status);",
									"        console.log('💰 Amount: Rp', data.amount.toLocaleString());",
									"        console.log('🔹 Active:', data.is_active);",
									"        if (data.activation_date) {",
									"            console.log('✅ Activated:', new Date(data.activation_date).toLocaleString());",
									"        }",
									"        if (data.expiry_date) {",
									"            console.log('⏰ Expires:', new Date(data.expiry_date).toLocaleString());",
									"        }",
									"    }",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/payments/status?transaction_id={{transaction_id}}",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"payments",
								"status"
							],
							"query": [
								{
									"key": "transaction_id",
									"value": "{{transaction_id}}"
								}
							]
						},
						"description": "📊 Check the status of a payment transaction.\n\n**Returns:**\n- Transaction status (pending, active, failed)\n- Payment amount and dates\n- Package activation status\n- Expiry information"
					},
					"response": []
				},
				{
					"name": "Get Payment History",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success) {",
									"        const summary = responseJson.data.summary;",
									"        console.log('📊 Payment History Summary:');",
									"        console.log('📈 Total Transactions:', summary.total_transactions);",
									"        console.log('✅ Successful:', summary.successful_transactions);",
									"        console.log('⏳ Pending:', summary.pending_transactions);",
									"        console.log('❌ Failed:', summary.failed_transactions);",
									"        console.log('💰 Total Spent: Rp', summary.total_spent.toLocaleString());",
									"        console.log('📊 Success Rate:', summary.success_rate + '%');",
									"    }",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/payments/history?per_page=10",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"payments",
								"history"
							],
							"query": [
								{
									"key": "per_page",
									"value": "10"
								},
								{
									"key": "status",
									"value": "",
									"disabled": true
								},
								{
									"key": "package_id",
									"value": "",
									"disabled": true
								}
							]
						},
						"description": "📊 Get payment history for the authenticated user.\n\n**Query Parameters:**\n- `per_page`: Number of transactions per page (default: 15)\n- `status`: Filter by status (success, pending, failed)\n- `package_id`: Filter by specific package\n\n**Returns:**\n- Paginated transaction list\n- Payment summary statistics\n- Success rate and totals"
					},
					"response": []
				}
			],
			"description": "💳 Complete payment flow from initiation to verification"
		},
		{
			"name": "5. Post-Purchase Verification",
			"item": [
				{
					"name": "Get My Packages",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success) {",
									"        const packages = responseJson.data;",
									"        const activePackages = packages.filter(pkg => pkg.is_active);",
									"        console.log('📦 My Packages Summary:');",
									"        console.log('📊 Total Packages:', packages.length);",
									"        console.log('✅ Active Packages:', activePackages.length);",
									"        ",
									"        activePackages.forEach(pkg => {",
									"            console.log(`📦 ${pkg.package.name} - Active until ${new Date(pkg.end_date).toLocaleDateString()}`);",
									"        });",
									"    }",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/packages/my",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"packages",
								"my"
							]
						},
						"description": "📦 Get customer's active and inactive packages after purchase.\n\n**Returns:**\n- All customer package subscriptions\n- Activation and expiry dates\n- Package details and status"
					},
					"response": []
				},
				{
					"name": "Get Updated Profile",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    const responseJson = pm.response.json();",
									"    if (responseJson.success) {",
									"        const customer = responseJson.data;",
									"        console.log('👤 Updated Profile:');",
									"        console.log('📧 Email:', customer.email);",
									"        console.log('👤 Name:', customer.name);",
									"        if (customer.active_packages_count !== undefined) {",
									"            console.log('📦 Active Packages:', customer.active_packages_count);",
									"        }",
									"    }",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/auth/me",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"auth",
								"me"
							]
						},
						"description": "👤 Get updated profile to see active packages count and verify purchase success"
					},
					"response": []
				}
			],
			"description": "✅ Verify purchase success and view updated customer data"
		},
		{
			"name": "6. Test Different Scenarios",
			"item": [
				{
					"name": "Test Payment Failure",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"order_id\": \"{{transaction_id}}\",\n  \"transaction_status\": \"cancel\",\n  \"gross_amount\": \"{{payment_amount}}\",\n  \"payment_type\": \"credit_card\",\n  \"transaction_time\": \"{{$isoTimestamp}}\",\n  \"status_code\": \"201\",\n  \"status_message\": \"Transaction is canceled\",\n  \"signature_key\": \"mock_signature_for_testing\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/midtrans-notification",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"midtrans-notification"
							]
						},
						"description": "❌ Simulate failed/canceled payment notification to test failure handling"
					},
					"response": []
				},
				{
					"name": "Test Payment Pending",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"order_id\": \"{{transaction_id}}\",\n  \"transaction_status\": \"pending\",\n  \"gross_amount\": \"{{payment_amount}}\",\n  \"payment_type\": \"bank_transfer\",\n  \"transaction_time\": \"{{$isoTimestamp}}\",\n  \"status_code\": \"201\",\n  \"status_message\": \"Transaction is pending\",\n  \"signature_key\": \"mock_signature_for_testing\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/midtrans-notification",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"midtrans-notification"
							]
						},
						"description": "⏳ Simulate pending payment notification (e.g., bank transfer waiting for payment)"
					},
					"response": []
				},
				{
					"name": "Try Purchasing Same Package Again",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 400) {",
									"    const responseJson = pm.response.json();",
									"    if (!responseJson.success) {",
									"        console.log('✅ Duplicate purchase prevention working correctly');",
									"        console.log('❌ Error:', responseJson.message);",
									"    }",
									"} else if (pm.response.code === 200) {",
									"    console.log('⚠️  Duplicate purchase was allowed - this might be unexpected');",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"package_id\": {{test_package_id}}\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/payments/initiate",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"payments",
								"initiate"
							]
						},
						"description": "🔄 Test duplicate purchase prevention - should return error if already has active subscription"
					},
					"response": []
				},
				{
					"name": "Test Invalid Coupon",
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Authorization",
								"value": "Bearer {{auth_token}}"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"package_id\": {{test_package_id}},\n  \"coupon_code\": \"INVALID123\"\n}"
						},
						"url": {
							"raw": "{{base_url}}/api/payments/checkout-summary",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"payments",
								"checkout-summary"
							]
						},
						"description": "🎫 Test checkout with invalid coupon code to verify error handling"
					},
					"response": []
				}
			],
			"description": "🧪 Test different payment scenarios and edge cases"
		}
	],
	"event": [
		{
			"listen": "prerequest",
			"script": {
				"type": "text/javascript",
				"exec": [
					"// Set base URL if not already set",
					"if (!pm.environment.get('base_url')) {",
					"    pm.environment.set('base_url', 'http://localhost:8000');",
					"    console.log('🔧 Base URL set to default: http://localhost:8000');",
					"}",
					"",
					"// Set default Midtrans server key if not set",
					"if (!pm.environment.get('midtrans_server_key')) {",
					"    pm.environment.set('midtrans_server_key', 'your-sandbox-server-key');",
					"    console.log('🔑 Please set your Midtrans Server Key in environment variables');",
					"}"
				]
			}
		},
		{
			"listen": "test",
			"script": {
				"type": "text/javascript",
				"exec": [
					"// Global test to check response format",
					"pm.test('Response should be JSON', function () {",
					"    pm.response.to.have.header('Content-Type');",
					"    pm.response.to.be.json;",
					"});",
					"",
					"// Log response for debugging (only for errors)",
					"if (pm.response.code >= 400) {",
					"    console.log('❌ Error Response:', pm.response.code, pm.response.status);",
					"    console.log('📄 Response Body:', pm.response.text());",
					"} else {",
					"    console.log('✅ Request successful:', pm.response.code, pm.response.status);",
					"}"
				]
			}
		}
	],
	"variable": [
		{
			"key": "base_url",
			"value": "http://localhost:8000",
			"type": "string",
			"description": "Base URL for the LMS API"
		},
		{
			"key": "auth_token",
			"value": "",
			"type": "string",
			"description": "Bearer token for API authentication (auto-populated)"
		},
		{
			"key": "customer_id",
			"value": "",
			"type": "string",
			"description": "Current customer ID (auto-populated)"
		},
		{
			"key": "test_package_id",
			"value": "",
			"type": "string",
			"description": "Package ID for testing (auto-populated from package list)"
		},
		{
			"key": "test_package_slug",
			"value": "",
			"type": "string",
			"description": "Package slug for testing (auto-populated from package list)"
		},
		{
			"key": "test_package_name",
			"value": "",
			"type": "string",
			"description": "Package name for testing (auto-populated, shared with Coupon collection)"
		},
		{
			"key": "package_current_price",
			"value": "",
			"type": "string",
			"description": "Current package price (discount_price if available, otherwise price)"
		},
		{
			"key": "package_original_price",
			"value": "",
			"type": "string",
			"description": "Package original price (auto-populated, shared with Coupon collection)"
		},
		{
			"key": "package_discount_price",
			"value": "",
			"type": "string",
			"description": "Package discount price (auto-populated, shared with Coupon collection)"
		},
		{
			"key": "checkout_id",
			"value": "",
			"type": "string",
			"description": "Preview checkout ID (auto-populated)"
		},
		{
			"key": "transaction_id",
			"value": "",
			"type": "string",
			"description": "Payment transaction ID (auto-populated)"
		},
		{
			"key": "payment_amount",
			"value": "",
			"type": "string",
			"description": "Payment amount in IDR (auto-populated)"
		},
		{
			"key": "final_amount",
			"value": "",
			"type": "string",
			"description": "Final amount including admin fee (auto-populated)"
		},
		{
			"key": "package_name",
			"value": "",
			"type": "string",
			"description": "Selected package name (auto-populated)"
		},
		{
			"key": "snap_token",
			"value": "",
			"type": "string",
			"description": "Midtrans Snap token (auto-populated)"
		},
		{
			"key": "payment_url",
			"value": "",
			"type": "string",
			"description": "Midtrans payment URL for testing (auto-populated)"
		},
		{
			"key": "midtrans_server_key",
			"value": "your-sandbox-server-key",
			"type": "string",
			"description": "⚠️ IMPORTANT: Set this to your Midtrans Sandbox Server Key for proper webhook signature generation"
		},
		{
			"key": "webhook_signature",
			"value": "",
			"type": "string",
			"description": "Generated webhook signature (auto-populated)"
		}
	]
} 