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

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:
Maciej Pienczyn 2026-03-13 12:52:56 +01:00
parent 1d39c9190a
commit 76ae1d4fd0
2 changed files with 52 additions and 32 deletions

View File

@ -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)

View File

@ -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({