O onboarding do Player (e a criação de Venue) já aceita latitude/longitude via GPS do navegador, mas nem sempre o usuário permite localização. Precisamos de um fallback confiável para obter coordenadas a partir do endereço, sem expor a chave da API no frontend.
no_record=1 por padrão (privacidade), com opção via .env.OPENCAGE_API_KEY via .envconfig/services.php adiciona services.opencage.*geocoding_cache_entries guarda resultados por provider + query_hash (consulta no DB antes de chamar o provedor externo)OPENCAGE_NO_RECORD=true, o texto do endereço não é persistidoKolos\Shared\Infrastructure\OpenCage\OpenCageGeocodingClienthttps://api.opencagedata.com/geocode/v1/json com:
q (query montada do endereço)limit=1countrycode=brlanguage=pt-BRno_annotations=1no_record=1 (configurável)geocoding_cache_entries por hash da query normalizada (consulta o banco antes; só chama OpenCage se não houver cadastro)RegisterPlayerOnboardingAction (Player)CreateVenueAction (Venue).env:
OPENCAGE_API_KEY=...sail artisan migratesail artisan testlatitude/longitude chegam como null, o sistema chama OpenCage e persiste as coordenadas.config/services.phpsrc/Modules/Player/Actions/RegisterPlayerOnboardingAction.phpsrc/Modules/Venue/Actions/CreateVenueAction.php.env.exampletests/Feature/Onboarding/RegisterPlayerOnboardingActionTest.phpdatabase/migrations/2026_01_18_120000_create_geocoding_cache_entries_table.phpsrc/Shared/Infrastructure/OpenCage/OpenCageGeocodingClient.phpsrc/Shared/Infrastructure/Geocoding/Models/GeocodingCacheEntry.phpsrc/Shared/DTOs/GeocodedPointData.phptests/Feature/Shared/OpenCageGeocodingClientTest.php