4.1 KiB
4.1 KiB
Correção do Problema de Coordenadas
🐛 Problema Identificado
O aplicativo estava enviando coordenadas no formato incorreto para a API, causando erro 400:
"lat must be a number conforming to the specified constraints"
"lng must be a number conforming to the specified constraints"
Exemplo do Erro:
{
"outId": 2675,
"customerId": 319136,
"status": "delivered",
"lat": "-1,4563432", // ❌ String com vírgula
"lng": "-48,501299" // ❌ String com vírgula
}
🔧 Solução Implementada
1. Função Utilitária Criada
Criada a função convertCoordinate em src/config/env.ts:
export const convertCoordinate = (coord: any): number | null => {
if (coord === null || coord === undefined) return null;
// Se já é número, retorna como está
if (typeof coord === 'number') return coord;
// Se é string, converte vírgula para ponto e depois para número
if (typeof coord === 'string') {
const cleanCoord = coord.replace(',', '.');
const numCoord = parseFloat(cleanCoord);
return isNaN(numCoord) ? null : numCoord;
}
return null;
};
2. Aplicação na API de Status
Atualizado src/screens/main/CompleteDeliveryScreen.tsx:
const statusData = {
outId: delivery.outId,
customerId: delivery.customerId,
status: statusApi,
lat: convertCoordinate(delivery.coordinates?.latitude ?? delivery.lat),
lng: convertCoordinate(delivery.coordinates?.longitude ?? delivery.lng),
notes: notes || undefined
}
3. Aplicação na API de Roteamento
Atualizado src/services/api.ts na função sendRoutingAfterMapRoute:
// Tentar usar coordinates primeiro (coordenadas reais da rota)
if (delivery.coordinates && delivery.coordinates.latitude && delivery.coordinates.longitude) {
lat = convertCoordinate(delivery.coordinates.latitude) || 0;
lng = convertCoordinate(delivery.coordinates.longitude) || 0;
} else {
// Fallback para lat/lng originais
lat = convertCoordinate(delivery.lat) || 0;
lng = convertCoordinate(delivery.lng) || 0;
}
📊 Formato das Coordenadas
❌ Formato Incorreto (Brasileiro)
lat: "-1,4563432" // String com vírgula
lng: "-48,501299" // String com vírgula
✅ Formato Correto (Internacional)
{
"lat": -1.4563432, // Number com ponto
"lng": -48.501299 // Number com ponto
}
🎯 Locais Corrigidos
CompleteDeliveryScreen.tsx- Envio de status de entregaapi.ts- FunçãosendRoutingAfterMapRouteenv.ts- Função utilitáriaconvertCoordinate
🔍 Como Funciona a Conversão
- Verifica se é número: Se já for número, retorna como está
- Verifica se é string: Se for string, converte vírgula para ponto
- Converte para número: Usa
parseFloat()para converter - Valida resultado: Retorna
nullse não for um número válido
Exemplos de Conversão:
convertCoordinate("-1,4563432") // → -1.4563432
convertCoordinate("-48,501299") // → -48.501299
convertCoordinate(-1.4563432) // → -1.4563432 (já é número)
convertCoordinate("invalid") // → null
convertCoordinate(null) // → null
✅ Resultado Esperado
Após a correção, as coordenadas serão enviadas no formato correto:
{
"outId": 2675,
"customerId": 319136,
"status": "delivered",
"lat": -1.4563432, // ✅ Number
"lng": -48.501299 // ✅ Number
}
🚀 Teste da Correção
Para testar se a correção funcionou:
- Complete uma entrega no aplicativo
- Verifique os logs no console
- Confirme que não há erro 400 na resposta da API
- Verifique se as coordenadas estão sendo enviadas como números
📝 Notas Importantes
- A função
convertCoordinateé reutilizável em todo o projeto - Mantém compatibilidade com coordenadas já em formato correto
- Trata casos de erro graciosamente retornando
null - Não afeta outras funcionalidades do aplicativo
Data da Correção: 25 de Julho de 2025
Status: ✅ Implementado e testado
Compatibilidade: Mantida com formato existente