// Test Examples for Device Bulk Operations with Images // You can use these examples with Postman, fetch API, or any HTTP client // ============================================================================= // Example 1: Bulk Create Devices with Images (JavaScript/Fetch) // ============================================================================= async function bulkCreateDevicesWithImages() { const formData = new FormData(); // Define devices const devices = [ { device_code: "ODP-BULK-001", device_type: "ODP", longitude: 106.8456, latitude: -6.2088, port_amount: 8, status: "active", province: "DKI Jakarta", city: "Jakarta Selatan", district: "Kebayoran Baru", olt_id: "550e8400-e29b-41d4-a716-446655440000" // Optional: Replace with real OLT ID }, { device_code: "OTB-BULK-001", device_type: "OTB", longitude: 106.8556, latitude: -6.2188, port_amount: 16, status: "active", province: "DKI Jakarta", city: "Jakarta Pusat", tower_id: "550e8400-e29b-41d4-a716-446655440001" // Optional: Replace with real Tower ID }, { device_code: "CLOSURE-BULK-001", device_type: "closure", longitude: 106.8656, latitude: -6.2288, port_amount: 0, status: "active", province: "DKI Jakarta", city: "Jakarta Utara" } ]; formData.append('devices', JSON.stringify(devices)); // Image distribution: // - Device 0 (ODP-BULK-001): 3 images // - Device 1 (OTB-BULK-001): 2 images // - Device 2 (CLOSURE-BULK-001): 1 image formData.append('image_indexes', JSON.stringify([3, 2, 1])); // Add images (total 6 files: 3+2+1) // NOTE: Replace these with actual File objects from file input // formData.append('images', odpImage1); // formData.append('images', odpImage2); // formData.append('images', odpImage3); // formData.append('images', otbImage1); // formData.append('images', otbImage2); // formData.append('images', closureImage1); try { const response = await fetch('http://localhost:8080/device/bulk/create', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_JWT_TOKEN_HERE' }, body: formData }); const result = await response.json(); console.log('Success:', result); return result; } catch (error) { console.error('Error:', error); } } // ============================================================================= // Example 2: Bulk Create without Images (Simple JSON) // ============================================================================= async function bulkCreateDevicesNoImages() { const requestBody = { devices: [ { device_code: "ODP-NO-IMG-001", device_type: "ODP", longitude: 106.8456, latitude: -6.2088, port_amount: 8, status: "active", province: "DKI Jakarta", city: "Jakarta Selatan" }, { device_code: "ODP-NO-IMG-002", device_type: "ODP", longitude: 106.8556, latitude: -6.2188, port_amount: 12, status: "active", province: "DKI Jakarta", city: "Jakarta Timur" } ] }; try { const response = await fetch('http://localhost:8080/device/bulk/create', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_JWT_TOKEN_HERE', 'Content-Type': 'application/json' }, body: JSON.stringify(requestBody) }); const result = await response.json(); console.log('Success:', result); return result; } catch (error) { console.error('Error:', error); } } // ============================================================================= // Example 3: Bulk Update Devices with Images (Append Mode) // ============================================================================= async function bulkUpdateDevicesAppendImages() { const formData = new FormData(); // Device IDs to update (replace with actual UUIDs from your database) const deviceIds = [ "550e8400-e29b-41d4-a716-446655440010", "550e8400-e29b-41d4-a716-446655440011" ]; formData.append('device_ids', JSON.stringify(deviceIds)); // Fields to update const updates = { status: "maintenance", province: "DKI Jakarta" }; formData.append('updates', JSON.stringify(updates)); // Image distribution: // - Device 0: add 2 new images // - Device 1: add 1 new image formData.append('image_indexes', JSON.stringify([2, 1])); // Append mode: keep existing images and add new ones formData.append('replace_images', 'false'); // Add images (total 3 files: 2+1) // NOTE: Replace these with actual File objects // formData.append('images', newImage1); // formData.append('images', newImage2); // formData.append('images', newImage3); try { const response = await fetch('http://localhost:8080/device/bulk/update', { method: 'PUT', headers: { 'Authorization': 'Bearer YOUR_JWT_TOKEN_HERE' }, body: formData }); const result = await response.json(); console.log('Success:', result); return result; } catch (error) { console.error('Error:', error); } } // ============================================================================= // Example 4: Bulk Update Devices with Images (Replace Mode) // ============================================================================= async function bulkUpdateDevicesReplaceImages() { const formData = new FormData(); const deviceIds = [ "550e8400-e29b-41d4-a716-446655440010" ]; formData.append('device_ids', JSON.stringify(deviceIds)); const updates = { status: "active" }; formData.append('updates', JSON.stringify(updates)); // Add 3 new images, replacing all old ones formData.append('image_indexes', JSON.stringify([3])); formData.append('replace_images', 'true'); // Replace mode // Add images (total 3 files) // formData.append('images', replacementImage1); // formData.append('images', replacementImage2); // formData.append('images', replacementImage3); try { const response = await fetch('http://localhost:8080/device/bulk/update', { method: 'PUT', headers: { 'Authorization': 'Bearer YOUR_JWT_TOKEN_HERE' }, body: formData }); const result = await response.json(); console.log('Success:', result); return result; } catch (error) { console.error('Error:', error); } } // ============================================================================= // Example 5: Bulk Update without Images // ============================================================================= async function bulkUpdateDevicesNoImages() { const requestBody = { device_ids: [ "550e8400-e29b-41d4-a716-446655440010", "550e8400-e29b-41d4-a716-446655440011", "550e8400-e29b-41d4-a716-446655440012" ], updates: { status: "inactive", province: "Jawa Barat", city: "Bandung" } }; try { const response = await fetch('http://localhost:8080/device/bulk/update', { method: 'PUT', headers: { 'Authorization': 'Bearer YOUR_JWT_TOKEN_HERE', 'Content-Type': 'application/json' }, body: JSON.stringify(requestBody) }); const result = await response.json(); console.log('Success:', result); return result; } catch (error) { console.error('Error:', error); } } // ============================================================================= // Example 6: Bulk Delete Devices // ============================================================================= async function bulkDeleteDevices() { const requestBody = { device_ids: [ "550e8400-e29b-41d4-a716-446655440010", "550e8400-e29b-41d4-a716-446655440011" ] }; try { const response = await fetch('http://localhost:8080/device/bulk/delete', { method: 'DELETE', headers: { 'Authorization': 'Bearer YOUR_JWT_TOKEN_HERE', 'Content-Type': 'application/json' }, body: JSON.stringify(requestBody) }); const result = await response.json(); console.log('Success:', result); return result; } catch (error) { console.error('Error:', error); } } // ============================================================================= // Example 7: HTML Form for File Upload // ============================================================================= /*