fix: reuse stored google_place_id for GBP audit refresh
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
Companies with an existing google_place_id now skip the name-matching
search and use the verified Place ID directly. This fixes companies like
ALMARES ("PSB Profi Almares" in Google) whose single-word name failed
strict matching. Also removes invalid 'source' kwarg from GBPAudit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
1d39c9190a
commit
76ae1d4fd0
@ -1011,7 +1011,6 @@ def admin_gbp_audit_batch_approve():
|
||||
has_description=data.get('has_description', False),
|
||||
has_services=data.get('has_services', False),
|
||||
has_reviews=data.get('has_reviews', False),
|
||||
source='automated',
|
||||
audit_date=datetime.now(),
|
||||
)
|
||||
db.add(audit)
|
||||
|
||||
@ -1768,42 +1768,63 @@ def fetch_google_business_data(
|
||||
'message': 'Places API (New) skonfigurowany'
|
||||
})
|
||||
|
||||
# Step 1: Search for place
|
||||
result['steps'].append({
|
||||
'step': 'find_place',
|
||||
'status': 'in_progress',
|
||||
'message': f'Szukam firmy "{company.name}" w Google Maps...'
|
||||
})
|
||||
# Step 1: Find place — reuse stored place_id if available (safe, unique Google ID)
|
||||
existing_analysis = db.query(CompanyWebsiteAnalysis).filter(
|
||||
CompanyWebsiteAnalysis.company_id == company_id
|
||||
).order_by(CompanyWebsiteAnalysis.analyzed_at.desc()).first()
|
||||
|
||||
city = company.address_city or 'Wejherowo'
|
||||
search_query = f'{company.name} {city}'
|
||||
stored_place_id = existing_analysis.google_place_id if existing_analysis else None
|
||||
|
||||
# Use Wejherowo coordinates as location bias (most companies are local)
|
||||
location_bias = {'latitude': 54.6059, 'longitude': 18.2350, 'radius': 50000.0}
|
||||
|
||||
place_result = places_service.search_place(search_query, location_bias=location_bias, company_name=company.name)
|
||||
|
||||
if not place_result:
|
||||
result['steps'][-1]['status'] = 'warning'
|
||||
result['steps'][-1]['message'] = 'Nie znaleziono firmy w Google Maps'
|
||||
result['error'] = 'Firma nie ma profilu Google Business lub nazwa jest inna niż w Google'
|
||||
return result
|
||||
|
||||
place_id = place_result.get('id', '')
|
||||
# Places API (New) returns id without 'places/' prefix in search, but needs it for details
|
||||
if not place_id.startswith('places/'):
|
||||
place_id_for_details = place_id
|
||||
if stored_place_id:
|
||||
# Reuse verified place_id — skip name-matching search entirely
|
||||
place_id_for_details = stored_place_id
|
||||
google_name = existing_analysis.google_name or company.name
|
||||
google_address = existing_analysis.google_address or ''
|
||||
result['steps'].append({
|
||||
'step': 'find_place',
|
||||
'status': 'complete',
|
||||
'message': f'Używam zapisanego Place ID: {google_name}'
|
||||
})
|
||||
result['data']['google_place_id'] = place_id_for_details
|
||||
result['data']['google_name'] = google_name
|
||||
result['data']['google_address'] = google_address
|
||||
else:
|
||||
place_id_for_details = place_id.replace('places/', '')
|
||||
# No stored place_id — search Google Maps
|
||||
result['steps'].append({
|
||||
'step': 'find_place',
|
||||
'status': 'in_progress',
|
||||
'message': f'Szukam firmy "{company.name}" w Google Maps...'
|
||||
})
|
||||
|
||||
google_name = place_result.get('displayName', {}).get('text', '')
|
||||
google_address = place_result.get('formattedAddress', '')
|
||||
city = company.address_city or 'Wejherowo'
|
||||
search_query = f'{company.name} {city}'
|
||||
|
||||
result['steps'][-1]['status'] = 'complete'
|
||||
result['steps'][-1]['message'] = f'Znaleziono: {google_name}'
|
||||
result['data']['google_place_id'] = place_id_for_details
|
||||
result['data']['google_name'] = google_name
|
||||
result['data']['google_address'] = google_address
|
||||
# Use Wejherowo coordinates as location bias (most companies are local)
|
||||
location_bias = {'latitude': 54.6059, 'longitude': 18.2350, 'radius': 50000.0}
|
||||
|
||||
place_result = places_service.search_place(search_query, location_bias=location_bias, company_name=company.name)
|
||||
|
||||
if not place_result:
|
||||
result['steps'][-1]['status'] = 'warning'
|
||||
result['steps'][-1]['message'] = 'Nie znaleziono firmy w Google Maps'
|
||||
result['error'] = 'Firma nie ma profilu Google Business lub nazwa jest inna niż w Google'
|
||||
return result
|
||||
|
||||
place_id = place_result.get('id', '')
|
||||
# Places API (New) returns id without 'places/' prefix in search, but needs it for details
|
||||
if not place_id.startswith('places/'):
|
||||
place_id_for_details = place_id
|
||||
else:
|
||||
place_id_for_details = place_id.replace('places/', '')
|
||||
|
||||
google_name = place_result.get('displayName', {}).get('text', '')
|
||||
google_address = place_result.get('formattedAddress', '')
|
||||
|
||||
result['steps'][-1]['status'] = 'complete'
|
||||
result['steps'][-1]['message'] = f'Znaleziono: {google_name}'
|
||||
result['data']['google_place_id'] = place_id_for_details
|
||||
result['data']['google_name'] = google_name
|
||||
result['data']['google_address'] = google_address
|
||||
|
||||
# Step 2: Get full place details
|
||||
result['steps'].append({
|
||||
|
||||
Loading…
Reference in New Issue
Block a user