App mobile para leitura de QR Codes de ativos e operação de objetos RackTables via Integration API
Aplicativo mobile construído com Expo e React Native para leitura de QR Codes de ativos (patrimônio) e operação de objetos do RackTables através da RackTables Integration API.
Consome a API sob o prefixo
/v1/racktables— veja o repositório da API para detalhes de endpoints e Swagger.
O app possui dois fluxos principais:
- Fluxo QR Code: lê um payload JSON dinâmico com dados de patrimônio e renderiza uma tela de detalhes customizada a partir dos campos presentes.
- Fluxo de ID manual: permite ao usuário digitar um ID de objeto do RackTables, buscar o resumo do objeto na API e visualizar suas operações.
Usuários administradores também podem criar e gerenciar recursos do RackTables a partir da tela Home.
| Tecnologia | Uso |
|---|---|
| Expo SDK 56 | Base do projeto |
| React Native | UI mobile |
| React Navigation | Navegação entre telas |
| Expo Camera | Leitura de QR Code |
| AsyncStorage | Persistência da URL da API |
| TypeScript | Tipagem estática |
- Login com UI baseada em role (papel do usuário)
- Scanner de QR Code para payload dinâmico de patrimônio
- Busca manual de objeto por ID
- Renderização dinâmica do resumo do objeto
- Configuração da URL da API em runtime, com persistência entre reinicializações
- Verificação de status da API pelo menu de opções
- Editar resumo do objeto
- Adicionar comentários
- Alocar objeto em rack
- Mover objeto entre racks
- Desalocar objeto
- Excluir objeto
- Criar objeto
- Visualizar tipos de objeto
- Criar rack
- Criar/excluir linhas (rows)
- Adicionar/remover localização de uma linha
- Criar/excluir localizações
O app espera que a RackTables Integration API esteja disponível com o prefixo:
/v1/racktables
| Ambiente | URL |
|---|---|
| Emulador Android | http://10.0.2.2:8000 |
| Simulador iOS / Web / Local | http://localhost:8000 |
| Dispositivo físico | IP da máquina host, ex: http://192.168.0.10:8000 |
⚠️ Não inclua/v1/racktablesao configurar a URL da API no app — o prefixo é adicionado automaticamente.
Home -> ... -> Ajustes
A URL configurada é persistida localmente via AsyncStorage.
Home -> ... -> API atual -> Verificar status
Isso dispara a chamada:
GET /v1/racktables/status/
O QR Code não é utilizado como ID de objeto do RackTables. Ele contém dados de ativo, geralmente no seguinte formato:
{
"patrimonio": {
"numero_patrimonio": "2026-000451",
"numero_serie": "SN-8873421X",
"descricao": "Servidor Rack Dell PowerEdge R750",
"categoria": "Equipamento de Informática",
"localizacao": {
"unidade": "INPE/CPTEC",
"rack": "Rack 07",
"posicao_u": "12-14U"
}
}
}O payload é dinâmico: seções e campos desconhecidos também são renderizados automaticamente.
A UI suporta dois papéis:
| Role | Permissões |
|---|---|
visitor |
Somente visualização de dados |
admin |
Visualização e mutação de objetos/recursos |
Comportamento atual de desenvolvimento:
const role = 'admin';Isso está forçado em
src/screens/home/index.tsxapenas para manter a UI de admin visível durante o desenvolvimento. Deve ser revertido para vir do fluxo de autenticação antes de produção.
Instale as dependências:
npm installInicie o Expo:
npm startRodar em Android:
npm run androidRodar em iOS:
npm run iosRodar na Web:
npm run websrc/
├── assets/ # Imagens e ícones do app
├── components/ # Componentes de UI reutilizáveis
├── screens/ # Telas do app
│ ├── home/ # Scanner de QR, ID manual, ações de admin
│ ├── login/ # Tela de login
│ ├── object_info/ # Detalhes e operações de objeto do RackTables
│ └── patrimonio_info/ # Exibição do payload dinâmico do QR
├── service/ # Cliente da API
├── types/ # Tipos de navegação e domínio
└── utils/ # Constantes compartilhadas
Validação de tipos TypeScript (sem gerar build):
npx tsc --noEmit- Use pacotes compatíveis com Expo SDK 56.
- Não inclua
/v1/racktablesao configurar a URL da API no app — o prefixo é adicionado automaticamente pelo cliente da API. - Para dispositivos físicos, configure a URL da API para o IP da máquina host (ex:
http://192.168.0.10:8000), já quelocalhostaponta para o próprio dispositivo.