API v1

Veículos

Android: /ui/vehicles/ · GridFragment (vehicles) · GridViewModel

Lista de veículos cadastrados na empresa com busca por placa ou modelo, cache offline e migração completa para API v1. Distinto do Grid de Viagens (/ui/grid/), que lista viagens — este módulo lista os veículos em si.

Nomenclatura confusa: o pacote /ui/vehicles/ contém um GridFragment e um GridViewModel — classes com o mesmo nome do módulo Grid de Viagens (/ui/grid/). Diferenciar pelo pacote ao navegar no código.

Fluxo de Carregamento

1

Verifica conectividade (delay de 1 segundo)

Se há rede, chama gridView.searchVehicleV1(jwt_token) e mostra skeleton loading.

2a

Com rede — API v1

GET /v1/vehicles com Bearer JWT. Resposta desempacotada de { "data": [...] }. Salva resultado em cache.

2b

Sem rede — cache local

Carrega ArrayList<VehiclesData> de SharedPreferences("vehicles_cache"), chave "vehicles".

Busca Local

O SearchView filtra em tempo real por placa ou modelo (case-insensitive). Ao não encontrar nenhum resultado, exibe um Toast "No Data Found". A busca opera sobre a lista completa em memória sem nova chamada à API.

Modelo de Dados

data class VehiclesData(
    val id: String,
    val plate: String,      // placa do veículo
    val model: String,      // modelo ("null" → convertido para "")
    val color: String,
    val owner: String,      // proprietário (campo "owner_name" na API v1)
    val renavan: String,    // campo "renavam" na API v1
    val chassi: String      // campo "chassis" na API v1
)

Mapeamento de Campos (Legado → v1)

Campo legadoCampo v1Notas
placaplate
_idid
modelomodelSe retornar "null" (string), converter para ""
corcolor
proprietario_nomeowner_name
renavanrenavamDiferença de grafia entre APIs
chassichassis

Endpoint

GET https://api.monisystem.com/v1/vehicles
Lista todos os veículos da empresa. Autenticação: Bearer JWT (Authorization: Bearer {jwt_token}) + header X-Client-Info com protocolo do cliente. Timeout: 30s para connect, read e write.
O endpoint legado era GET https://api.monisat.online/allVehicles/{company_id} com campos em português. Ainda presente no código como fetchDataFromApi() mas não é chamado na versão atual (comentado).

Cache Offline

SharedPreferencesChaveConteúdo
vehicles_cachevehiclesJSON serializado de ArrayList<VehiclesData> via Gson
jwt_tokensjwt_tokenBearer JWT para chamadas v1

Header X-Client-Info

Todas as chamadas v1 do GridViewModel incluem o header X-Client-Info gerado por ClientInfo.getProtocolHeader(). Esse header identifica a versão do cliente e plataforma para o backend.