# Info Layers Test Results - Map ID 16950 **Test Date:** 2025-12-09 **Test Layers:** parcels, cabinet_boundaries, cables **Test Type:** First 10 records per layer (3 for boundaries/parcels, 3 for cables in actual shapefile) **Map ID:** 16950 ## Summary | Layer | Records Attempted | Records Uploaded | Status | |-------|-------------------|------------------|--------| | cabinet_boundaries.shp | 3 | 0 | ❌ API Error | | cables.shp | 3 | 0 | ❌ API Error | | parcels.shp | 3 | 0 | ❌ API Error | **Overall:** 0 out of 9 records uploaded (0% success rate) --- ## Progress Made ### ✅ Metric Field Calculation Working The `metric` field is now being calculated correctly: #### Cables (LineString): ```json { "metric": "Mileage: 0.9196; Footage: 4856" } ``` #### Boundaries & Parcels (Polygon): ```json { "metric": "Square Miles: 3.3141" } ``` **Formula Used:** - **Lines:** At 40° latitude, 1° longitude ≈ 53 miles, 1° latitude ≈ 69 miles - **Polygons:** At 40° latitude, 1 degree² ≈ 3,657 square miles **Code Added:** - `_calculate_line_metric()` - Line length calculation - `_calculate_polygon_metric()` - Polygon area calculation --- ## Current Blocker ### ❌ API Error: Field 'data' doesn't have a default value **Error Message:** ``` Database Exception: SQLSTATE[HY000]: General error: 1364 Field 'data' doesn't have a default value The SQL being executed was: INSERT INTO `mapobject` (`mapprojectId`, `name`, ... ``` **What We Tried:** 1. **Attempt 1:** Send `data` as nested array of lat/lng objects - Result: ❌ Same error 2. **Attempt 2:** JSON-encode `data` field as a string - Result: ❌ Same error **Example Data Being Sent:** ```json { "mapProjectId": 16950, "name": "Zone 01 Boundary", "mapinfoobjecttypeId": 3, "data": "[{\"lat\": 40.7723..., \"lng\": -124.1857...}, ...]", "color": "#ffffff", "alpha": "0.40", "metric": "Square Miles: 3.3141" } ``` --- ## Analysis ### Root Cause The error message "Field 'data' doesn't have a default value" is a **MySQL database error**, not a validation error. This indicates: 1. The Verofy API backend is attempting to INSERT into the `mapobject` table 2. The `data` field we're sending is **not being included** in the INSERT statement 3. The database column `data` has no default value, causing the query to fail ### Possible Reasons #### 1. API Endpoint Not Fully Implemented The `/map-info-object/create` endpoint may not properly handle the `data` field during creation. #### 2. Missing Required Field There may be another field we need to send that tells the API how to interpret the `data` field. #### 3. Field Name Different for Creation The field might be named differently when creating vs reading: - Reading: `data` (from GET `/map-info-object/{id}`) - Creating: `???` (for POST `/map-info-object/create`) #### 4. Data Format Issue The `data` field might need a different structure than what we see in GET responses. --- ## Comparison with Export ### From Map 15685 Export (GET response): **Type 2 (Polyline/Cable):** ```json { "mapinfoobjecttypeId": 2, "data": [ {"lat": 40.760037779, "lng": -124.174677888}, {"lat": 40.760068861, "lng": -124.171780846} ] } ``` **Type 3 (Polygon):** ```json { "mapinfoobjecttypeId": 3, "data": [ {"lat": 40.761573196, "lng": -124.17190395}, {"lat": 40.760796168, "lng": -124.173069332}, ... ] } ``` ### What We're Sending (POST request): Exactly the same format - but API is not accepting it. --- ## Recommendations ### Option 1: Contact Verofy API Support This appears to be an **API bug** or **undocumented requirement**. We should ask: 1. Is the `/map-info-object/create` endpoint fully implemented? 2. What is the correct format for the `data` field when creating info objects? 3. Are there any required fields beyond what's documented? ### Option 2: Test with Manual Web Interface Create an info object manually through Verofy's web interface, then: 1. Retrieve it via GET `/map-info-object/{id}` 2. Compare the structure 3. Look for any additional fields that were set ### Option 3: Alternative Approach If info objects can't be created via API, we may need to: 1. Skip these layers for now 2. Import them manually through Verofy's web interface 3. Wait for API endpoint to be fixed --- ## Code Changes Made ### File: `/home/ahall/Sandbox/dragnddrop/backend/verofy_uploader.py` **Lines 131-170:** Added metric calculation functions ```python def _calculate_line_metric(self, geometry) -> str: """Calculate mileage and footage for cable lines""" # Implementation... def _calculate_polygon_metric(self, geometry) -> str: """Calculate square miles for boundaries and parcels""" # Implementation... ``` **Lines 663-675:** Updated `_upload_cabinet_boundaries()` ```python metric = self._calculate_polygon_metric(row.geometry) info_data = { ... "metric": metric } ``` **Lines 709-721:** Updated `_upload_cables()` ```python metric = self._calculate_line_metric(row.geometry) info_data = { ... "metric": metric } ``` **Lines 756-768:** Updated `_upload_parcels()` ```python metric = self._calculate_polygon_metric(row.geometry) info_data = { ... "metric": metric } ``` **Lines 958-986:** Updated `_create_info_object()` ```python # JSON-encode the data field as a string (API may expect this) if 'data' in info_data: info_data_copy = info_data.copy() info_data_copy['data'] = json.dumps(info_data['data']) # Send encoded version... ``` --- ## Next Steps 1. **Document the API Issue** - Report to Verofy API team - Provide exact error message and request/response details 2. **Test Alternative Approaches** - Try different field names (`dataAsText`, `geometry`, etc.) - Try sending data without JSON encoding - Try minimal payload to see what works 3. **Verify Endpoint Status** - Check if endpoint is in beta/deprecated - Look for alternative endpoints for info objects 4. **Focus on Working Layers** - Continue with poles, segments, sites (working) - Fix access_points, network_elements, splicing - Come back to info layers once API issue is resolved --- ## Test Data ### Successfully Calculated Metrics **Cabinet Boundary "Zone 01":** - Area: 3.3141 square miles - 6 coordinate points **Cable "144F/EUR_Z07_DC_001":** - Length: 0.9196 miles (4,856 feet) - 2 coordinate points **Parcel (Zone 01):** - Area: 0.1362 square miles - 5 coordinate points (closed polygon) All metric calculations are working correctly and match expected format from Verofy exports.