Initial commit SteelBase - Oficiais e Funcionando
This commit is contained in:
419
.kiro/specs/sistema-cache-perfis/design.md
Normal file
419
.kiro/specs/sistema-cache-perfis/design.md
Normal file
@@ -0,0 +1,419 @@
|
||||
# Design Document - Sistema de Cache de Perfis
|
||||
|
||||
## Overview
|
||||
|
||||
Sistema de cache intermediário usando IndexedDB para armazenar dados de perfis estruturais. O sistema fornece uma camada de abstração entre os arquivos CSV originais e o aplicativo, permitindo carregamento rápido, sincronização sob demanda, e gerenciamento flexível de fontes de dados.
|
||||
|
||||
## Architecture
|
||||
|
||||
### High-Level Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Application Layer │
|
||||
│ (UI Components, Sections, Calculations) │
|
||||
└────────────────────┬────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ Data Service API │
|
||||
│ getPerfis() | searchPerfis() | getPerfilById() │
|
||||
└────────────────────┬────────────────────────────────────┘
|
||||
│
|
||||
┌────────────┴────────────┐
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ Cache Layer │ │ CSV Loader │
|
||||
│ (IndexedDB) │◄────────►│ (Fetch API) │
|
||||
└──────────────┘ └──────────────┘
|
||||
│ │
|
||||
▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐
|
||||
│ Browser │ │ BD/perfis/ │
|
||||
│ Storage │ │ *.csv │
|
||||
└──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
### Component Diagram
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ CacheManager │
|
||||
│ - init() │
|
||||
│ - checkHealth() │
|
||||
│ - clearAll() │
|
||||
└────────────────────┬────────────────────────────────────┘
|
||||
│
|
||||
┌────────────┼────────────┬────────────┐
|
||||
▼ ▼ ▼ ▼
|
||||
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
|
||||
│ DataStore│ │SyncManager│ │CSVParser │ │DataService│
|
||||
│ │ │ │ │ │ │ │
|
||||
│ -get() │ │ -sync() │ │ -parse() │ │ -query() │
|
||||
│ -set() │ │ -check() │ │ -validate│ │ -filter()│
|
||||
│ -delete()│ │ -update()│ │ │ │ -search()│
|
||||
└──────────┘ └──────────┘ └──────────┘ └──────────┘
|
||||
```
|
||||
|
||||
## Components and Interfaces
|
||||
|
||||
### 1. CacheManager (Core)
|
||||
|
||||
**Responsabilidade:** Gerenciar ciclo de vida do cache e coordenar componentes
|
||||
|
||||
```javascript
|
||||
class CacheManager {
|
||||
constructor(config) {
|
||||
this.dbName = 'AcoCalcProDB';
|
||||
this.version = 1;
|
||||
this.db = null;
|
||||
this.config = config;
|
||||
}
|
||||
|
||||
async init() {
|
||||
// Inicializar IndexedDB
|
||||
// Criar object stores
|
||||
// Verificar versão
|
||||
}
|
||||
|
||||
async checkHealth() {
|
||||
// Verificar integridade do cache
|
||||
// Retornar estatísticas
|
||||
}
|
||||
|
||||
async clearAll() {
|
||||
// Limpar todo o cache
|
||||
}
|
||||
|
||||
getStats() {
|
||||
// Retornar estatísticas de uso
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. DataStore (Storage Layer)
|
||||
|
||||
**Responsabilidade:** Interface com IndexedDB
|
||||
|
||||
```javascript
|
||||
class DataStore {
|
||||
constructor(db) {
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
async get(storeName, key) {
|
||||
// Buscar item por chave
|
||||
}
|
||||
|
||||
async getAll(storeName) {
|
||||
// Buscar todos os itens
|
||||
}
|
||||
|
||||
async set(storeName, data) {
|
||||
// Armazenar dados
|
||||
}
|
||||
|
||||
async delete(storeName, key) {
|
||||
// Deletar item
|
||||
}
|
||||
|
||||
async clear(storeName) {
|
||||
// Limpar store
|
||||
}
|
||||
|
||||
async count(storeName) {
|
||||
// Contar itens
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. SyncManager (Synchronization)
|
||||
|
||||
**Responsabilidade:** Sincronizar dados entre CSV e cache
|
||||
|
||||
```javascript
|
||||
class SyncManager {
|
||||
constructor(dataStore, csvParser) {
|
||||
this.dataStore = dataStore;
|
||||
this.csvParser = csvParser;
|
||||
this.sources = {}; // Mapeamento tipo -> caminho CSV
|
||||
}
|
||||
|
||||
async syncAll(progressCallback) {
|
||||
// Sincronizar todos os tipos
|
||||
}
|
||||
|
||||
async syncType(tipo, progressCallback) {
|
||||
// Sincronizar tipo específico
|
||||
}
|
||||
|
||||
async checkUpdates() {
|
||||
// Verificar se há atualizações disponíveis
|
||||
}
|
||||
|
||||
async getLastSync(tipo) {
|
||||
// Retornar timestamp da última sincronização
|
||||
}
|
||||
|
||||
async calculateHash(csvText) {
|
||||
// Calcular hash MD5 do CSV
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. CSVParser (Data Processing)
|
||||
|
||||
**Responsabilidade:** Parse e validação de arquivos CSV
|
||||
|
||||
```javascript
|
||||
class CSVParser {
|
||||
async parse(csvText, schema) {
|
||||
// Parse CSV para objetos
|
||||
// Validar contra schema
|
||||
// Retornar dados processados
|
||||
}
|
||||
|
||||
validate(data, schema) {
|
||||
// Validar estrutura dos dados
|
||||
}
|
||||
|
||||
transform(data, transformFn) {
|
||||
// Aplicar transformações
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. DataService (API Layer)
|
||||
|
||||
**Responsabilidade:** API pública para acesso aos dados
|
||||
|
||||
```javascript
|
||||
class DataService {
|
||||
constructor(cacheManager, syncManager) {
|
||||
this.cache = cacheManager;
|
||||
this.sync = syncManager;
|
||||
}
|
||||
|
||||
async getPerfis(tipo, options = {}) {
|
||||
// Buscar perfis do cache ou CSV
|
||||
// options: { forceRefresh, includeMetadata }
|
||||
}
|
||||
|
||||
async searchPerfis(tipo, filters) {
|
||||
// Buscar com filtros
|
||||
// filters: { nome, peso_min, peso_max, etc }
|
||||
}
|
||||
|
||||
async getPerfilById(tipo, id) {
|
||||
// Buscar perfil específico
|
||||
}
|
||||
|
||||
async getMetadata(tipo) {
|
||||
// Retornar metadados (última sync, count, etc)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Data Models
|
||||
|
||||
### IndexedDB Schema
|
||||
|
||||
```javascript
|
||||
const DB_SCHEMA = {
|
||||
name: 'AcoCalcProDB',
|
||||
version: 1,
|
||||
stores: {
|
||||
// Store para cada tipo de perfil
|
||||
cantoneiras: {
|
||||
keyPath: 'id',
|
||||
indexes: [
|
||||
{ name: 'nome', keyPath: 'nome', unique: false },
|
||||
{ name: 'tipo', keyPath: 'tipo', unique: false },
|
||||
{ name: 'peso_kg_m', keyPath: 'peso_kg_m', unique: false }
|
||||
]
|
||||
},
|
||||
perfis_w: {
|
||||
keyPath: 'id',
|
||||
indexes: [
|
||||
{ name: 'nome', keyPath: 'nome', unique: false },
|
||||
{ name: 'peso', keyPath: 'peso', unique: false }
|
||||
]
|
||||
},
|
||||
// ... outros tipos
|
||||
|
||||
// Store para metadados
|
||||
_metadata: {
|
||||
keyPath: 'tipo',
|
||||
indexes: []
|
||||
},
|
||||
|
||||
// Store para configuração
|
||||
_config: {
|
||||
keyPath: 'key',
|
||||
indexes: []
|
||||
}
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
### Metadata Model
|
||||
|
||||
```javascript
|
||||
{
|
||||
tipo: 'cantoneiras',
|
||||
lastSync: 1699564800000, // timestamp
|
||||
hash: 'a1b2c3d4e5f6...', // MD5 hash do CSV
|
||||
count: 39,
|
||||
version: '1.0',
|
||||
source: 'BD/perfis/cantoneiras_brasil_completo.csv',
|
||||
size: 12345 // bytes
|
||||
}
|
||||
```
|
||||
|
||||
### Config Model
|
||||
|
||||
```javascript
|
||||
{
|
||||
key: 'csv_sources',
|
||||
value: {
|
||||
cantoneiras: 'BD/perfis/cantoneiras_brasil_completo.csv',
|
||||
perfis_w: 'BD/perfis/perfis_w_brasil_completo.csv',
|
||||
// ... outros
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
### Error Types
|
||||
|
||||
```javascript
|
||||
class CacheError extends Error {
|
||||
constructor(message, code, details) {
|
||||
super(message);
|
||||
this.name = 'CacheError';
|
||||
this.code = code;
|
||||
this.details = details;
|
||||
}
|
||||
}
|
||||
|
||||
// Códigos de erro
|
||||
const ERROR_CODES = {
|
||||
DB_NOT_AVAILABLE: 'DB_NOT_AVAILABLE',
|
||||
SYNC_FAILED: 'SYNC_FAILED',
|
||||
CSV_PARSE_ERROR: 'CSV_PARSE_ERROR',
|
||||
DATA_NOT_FOUND: 'DATA_NOT_FOUND',
|
||||
QUOTA_EXCEEDED: 'QUOTA_EXCEEDED'
|
||||
};
|
||||
```
|
||||
|
||||
### Fallback Strategy
|
||||
|
||||
```
|
||||
1. Tentar carregar do cache
|
||||
↓ (falha)
|
||||
2. Tentar carregar do CSV
|
||||
↓ (falha)
|
||||
3. Usar dados em memória (se disponível)
|
||||
↓ (falha)
|
||||
4. Exibir erro ao usuário
|
||||
```
|
||||
|
||||
## Testing Strategy
|
||||
|
||||
### Unit Tests
|
||||
|
||||
- DataStore: CRUD operations
|
||||
- CSVParser: Parse e validação
|
||||
- SyncManager: Lógica de sincronização
|
||||
- DataService: API pública
|
||||
|
||||
### Integration Tests
|
||||
|
||||
- Fluxo completo: CSV → Cache → UI
|
||||
- Sincronização com múltiplos tipos
|
||||
- Fallback quando IndexedDB não disponível
|
||||
|
||||
### Performance Tests
|
||||
|
||||
- Tempo de carregamento do cache
|
||||
- Tempo de sincronização
|
||||
- Uso de memória
|
||||
- Tamanho do banco de dados
|
||||
|
||||
## Migration Strategy
|
||||
|
||||
### Phase 1: Implementação Base
|
||||
- Criar estrutura do cache
|
||||
- Implementar DataStore e CSVParser
|
||||
- Testes unitários
|
||||
|
||||
### Phase 2: Integração
|
||||
- Integrar com código existente
|
||||
- Manter compatibilidade
|
||||
- Testes de integração
|
||||
|
||||
### Phase 3: UI Admin
|
||||
- Painel de administração
|
||||
- Botões de sincronização
|
||||
- Estatísticas
|
||||
|
||||
### Phase 4: Otimizações
|
||||
- Web Workers para parsing
|
||||
- Compressão de dados
|
||||
- Lazy loading
|
||||
|
||||
## Configuration
|
||||
|
||||
### Default Configuration
|
||||
|
||||
```javascript
|
||||
const DEFAULT_CONFIG = {
|
||||
dbName: 'AcoCalcProDB',
|
||||
version: 1,
|
||||
autoSync: false, // Sincronizar automaticamente na inicialização
|
||||
syncInterval: null, // Intervalo de sincronização automática (ms)
|
||||
cacheExpiry: 7 * 24 * 60 * 60 * 1000, // 7 dias
|
||||
enableCompression: false,
|
||||
enableWebWorkers: false,
|
||||
debug: false,
|
||||
sources: {
|
||||
cantoneiras: 'BD/perfis/cantoneiras_brasil_completo.csv',
|
||||
barras: 'BD/perfis/barras_brasil_completo.csv',
|
||||
// ... outros
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## Performance Considerations
|
||||
|
||||
### Optimization Techniques
|
||||
|
||||
1. **Indexing**: Criar índices para campos frequentemente buscados
|
||||
2. **Lazy Loading**: Carregar apenas dados necessários
|
||||
3. **Compression**: Comprimir dados grandes antes de armazenar
|
||||
4. **Web Workers**: Parse de CSV em background thread
|
||||
5. **Batch Operations**: Inserir múltiplos registros de uma vez
|
||||
|
||||
### Expected Performance
|
||||
|
||||
- Cache hit: < 100ms
|
||||
- Cache miss + CSV load: < 2s
|
||||
- Sync all types: < 10s
|
||||
- Search with filters: < 50ms
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- IndexedDB é isolado por origem (same-origin policy)
|
||||
- Dados não são criptografados (não contêm informações sensíveis)
|
||||
- Validar dados do CSV antes de armazenar
|
||||
- Limitar tamanho máximo do cache (50MB)
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
1. **Sync com servidor remoto**: Permitir sincronizar com API REST
|
||||
2. **Versionamento de dados**: Manter histórico de versões
|
||||
3. **Diff e merge**: Detectar conflitos entre versões
|
||||
4. **Export/Import**: Exportar cache para backup
|
||||
5. **Compression**: Comprimir dados automaticamente
|
||||
6. **Service Worker**: Cache de arquivos CSV para offline completo
|
||||
152
.kiro/specs/sistema-cache-perfis/requirements.md
Normal file
152
.kiro/specs/sistema-cache-perfis/requirements.md
Normal file
@@ -0,0 +1,152 @@
|
||||
# Requirements Document - Sistema de Cache de Perfis
|
||||
|
||||
## Introduction
|
||||
|
||||
Sistema de cache intermediário para armazenar dados de perfis estruturais carregados de arquivos CSV. O sistema permitirá carregar dados uma vez, armazená-los localmente no navegador (IndexedDB), e fornecer uma interface para atualizar/sincronizar quando os arquivos CSV forem modificados.
|
||||
|
||||
## Glossary
|
||||
|
||||
- **IndexedDB**: Banco de dados NoSQL do navegador para armazenamento local persistente
|
||||
- **CSV Source**: Arquivos CSV originais em `BD/perfis/`
|
||||
- **Cache Layer**: Camada intermediária que armazena dados processados
|
||||
- **Sync Manager**: Componente responsável por sincronizar dados entre CSV e cache
|
||||
- **Data Service**: API unificada para acesso aos dados de perfis
|
||||
- **Admin Panel**: Interface administrativa para gerenciar o cache
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement 1: Armazenamento Local com IndexedDB
|
||||
|
||||
**User Story:** Como desenvolvedor, quero armazenar dados de perfis localmente no navegador, para que o aplicativo não precise carregar CSVs repetidamente.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN o aplicativo inicializa, THE Sistema SHALL criar um banco IndexedDB chamado "AcoCalcProDB"
|
||||
2. THE Sistema SHALL criar object stores separadas para cada tipo de perfil (cantoneiras, perfis_w, perfis_i, etc.)
|
||||
3. THE Sistema SHALL armazenar metadados incluindo timestamp de última atualização e versão dos dados
|
||||
4. THE Sistema SHALL persistir dados entre sessões do navegador
|
||||
5. THE Sistema SHALL suportar até 50MB de dados armazenados
|
||||
|
||||
### Requirement 2: Carregamento Inteligente de Dados
|
||||
|
||||
**User Story:** Como usuário, quero que o aplicativo carregue dados rapidamente, para que eu não precise esperar toda vez que abrir uma seção.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN o usuário acessa uma seção de perfil, THE Sistema SHALL verificar se dados existem no cache local
|
||||
2. IF dados existem no cache, THEN THE Sistema SHALL carregar do cache em menos de 100ms
|
||||
3. IF dados não existem no cache, THEN THE Sistema SHALL carregar do CSV e armazenar no cache
|
||||
4. THE Sistema SHALL exibir indicador de loading durante carregamento inicial
|
||||
5. THE Sistema SHALL funcionar offline após primeiro carregamento
|
||||
|
||||
### Requirement 3: Interface de Sincronização
|
||||
|
||||
**User Story:** Como administrador, quero atualizar os dados do cache quando modificar arquivos CSV, para que as alterações sejam refletidas no aplicativo.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Sistema SHALL fornecer botão "🔄 Atualizar Dados" no painel administrativo
|
||||
2. WHEN usuário clica em atualizar, THE Sistema SHALL recarregar todos os CSVs
|
||||
3. THE Sistema SHALL mostrar progresso da sincronização (0-100%)
|
||||
4. THE Sistema SHALL exibir timestamp da última sincronização
|
||||
5. THE Sistema SHALL permitir atualização seletiva por tipo de perfil
|
||||
|
||||
### Requirement 4: Versionamento e Validação
|
||||
|
||||
**User Story:** Como desenvolvedor, quero detectar quando dados estão desatualizados, para que o sistema possa atualizar automaticamente.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Sistema SHALL armazenar hash MD5 de cada arquivo CSV
|
||||
2. WHEN aplicativo inicializa, THE Sistema SHALL comparar hashes dos arquivos
|
||||
3. IF hash mudou, THEN THE Sistema SHALL marcar dados como desatualizados
|
||||
4. THE Sistema SHALL exibir notificação quando dados estiverem desatualizados
|
||||
5. THE Sistema SHALL permitir configurar atualização automática ou manual
|
||||
|
||||
### Requirement 5: API Unificada de Acesso
|
||||
|
||||
**User Story:** Como desenvolvedor, quero uma API simples para acessar dados, para que não precise me preocupar se vêm do cache ou CSV.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Sistema SHALL fornecer função `getPerfis(tipo)` que retorna dados do cache ou CSV
|
||||
2. THE Sistema SHALL fornecer função `searchPerfis(tipo, filtros)` para busca com filtros
|
||||
3. THE Sistema SHALL fornecer função `getPerfilById(tipo, id)` para busca por ID
|
||||
4. THE Sistema SHALL retornar Promises para todas operações assíncronas
|
||||
5. THE Sistema SHALL tratar erros gracefully com fallback para CSV
|
||||
|
||||
### Requirement 6: Gerenciamento de Espaço
|
||||
|
||||
**User Story:** Como usuário, quero gerenciar o espaço usado pelo cache, para que não ocupe muito armazenamento do navegador.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Sistema SHALL exibir espaço total usado pelo cache no painel admin
|
||||
2. THE Sistema SHALL permitir limpar cache de tipos específicos de perfis
|
||||
3. THE Sistema SHALL permitir limpar todo o cache com um botão
|
||||
4. THE Sistema SHALL avisar quando espaço disponível for menor que 10MB
|
||||
5. THE Sistema SHALL funcionar mesmo se IndexedDB não estiver disponível (fallback para CSV)
|
||||
|
||||
### Requirement 7: Migração e Compatibilidade
|
||||
|
||||
**User Story:** Como desenvolvedor, quero migrar dados existentes para o novo sistema, para que não haja perda de funcionalidade.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Sistema SHALL detectar se é primeira execução
|
||||
2. WHEN primeira execução, THE Sistema SHALL carregar todos os CSVs e popular cache
|
||||
3. THE Sistema SHALL manter compatibilidade com código existente
|
||||
4. THE Sistema SHALL permitir desabilitar cache via configuração
|
||||
5. THE Sistema SHALL migrar automaticamente entre versões do schema
|
||||
|
||||
### Requirement 8: Monitoramento e Debug
|
||||
|
||||
**User Story:** Como desenvolvedor, quero monitorar operações do cache, para que possa debugar problemas.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Sistema SHALL logar todas operações de cache no console (modo debug)
|
||||
2. THE Sistema SHALL exibir estatísticas de hit/miss do cache
|
||||
3. THE Sistema SHALL permitir exportar dados do cache para JSON
|
||||
4. THE Sistema SHALL permitir importar dados de JSON para cache
|
||||
5. THE Sistema SHALL fornecer ferramenta de diagnóstico no painel admin
|
||||
|
||||
### Requirement 9: Performance e Otimização
|
||||
|
||||
**User Story:** Como usuário, quero que o aplicativo seja rápido, para que eu possa trabalhar eficientemente.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Sistema SHALL carregar dados do cache em menos de 100ms
|
||||
2. THE Sistema SHALL indexar campos comuns (nome, tipo) para busca rápida
|
||||
3. THE Sistema SHALL usar Web Workers para parsing de CSV em background
|
||||
4. THE Sistema SHALL implementar lazy loading para perfis não utilizados
|
||||
5. THE Sistema SHALL comprimir dados antes de armazenar (se >1MB)
|
||||
|
||||
### Requirement 10: Configuração Flexível de Fontes
|
||||
|
||||
**User Story:** Como administrador, quero configurar caminhos dos arquivos CSV, para que possa reorganizar estrutura de pastas.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Sistema SHALL permitir configurar caminho base dos CSVs no painel admin
|
||||
2. THE Sistema SHALL permitir configurar nome de arquivo para cada tipo de perfil
|
||||
3. THE Sistema SHALL validar se arquivos existem antes de tentar carregar
|
||||
4. THE Sistema SHALL salvar configuração no localStorage
|
||||
5. THE Sistema SHALL fornecer configuração padrão funcional
|
||||
|
||||
## Technical Constraints
|
||||
|
||||
- Deve funcionar em navegadores modernos (Chrome 60+, Firefox 60+, Safari 12+, Edge 79+)
|
||||
- Deve usar apenas JavaScript vanilla (sem frameworks)
|
||||
- Deve ser compatível com código existente
|
||||
- Deve funcionar offline após primeiro carregamento
|
||||
- Deve ter fallback para CSV se IndexedDB não disponível
|
||||
|
||||
## Non-Functional Requirements
|
||||
|
||||
- **Performance**: Carregamento do cache < 100ms
|
||||
- **Reliability**: Taxa de sucesso > 99.9%
|
||||
- **Usability**: Interface intuitiva no painel admin
|
||||
- **Maintainability**: Código modular e bem documentado
|
||||
- **Scalability**: Suportar até 10.000 registros por tipo de perfil
|
||||
168
.kiro/specs/sistema-cache-perfis/tasks.md
Normal file
168
.kiro/specs/sistema-cache-perfis/tasks.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# Implementation Plan - Sistema de Cache de Perfis
|
||||
|
||||
## Overview
|
||||
|
||||
Este plano implementa um sistema de cache intermediário usando IndexedDB para armazenar dados de perfis estruturais, permitindo carregamento rápido, sincronização sob demanda, e gerenciamento flexível de fontes de dados.
|
||||
|
||||
## Tasks
|
||||
|
||||
- [ ] 1. Criar estrutura base do sistema de cache
|
||||
|
||||
|
||||
- Criar arquivo `js/core/cache-manager.js` com classe CacheManager
|
||||
- Implementar inicialização do IndexedDB
|
||||
- Criar schema do banco de dados com stores para cada tipo de perfil
|
||||
- Implementar tratamento de erros e fallback
|
||||
- _Requirements: 1.1, 1.2, 1.3, 1.4_
|
||||
|
||||
- [ ] 2. Implementar DataStore (camada de armazenamento)
|
||||
- Criar arquivo `js/core/data-store.js` com classe DataStore
|
||||
- Implementar operações CRUD (get, getAll, set, delete, clear)
|
||||
- Implementar contagem de registros
|
||||
- Adicionar suporte a índices para busca rápida
|
||||
- _Requirements: 1.2, 1.3, 9.2_
|
||||
|
||||
- [ ] 3. Implementar CSVParser (processamento de dados)
|
||||
- Criar arquivo `js/core/csv-parser.js` com classe CSVParser
|
||||
- Implementar parse de CSV para objetos JavaScript
|
||||
- Adicionar validação de schema
|
||||
- Implementar transformações de dados (trim, parseFloat, etc)
|
||||
- Tratar linhas vazias e caracteres especiais
|
||||
- _Requirements: 2.3, 4.2_
|
||||
|
||||
- [ ] 4. Implementar SyncManager (sincronização)
|
||||
- Criar arquivo `js/core/sync-manager.js` com classe SyncManager
|
||||
- Implementar sincronização de todos os tipos de perfis
|
||||
- Implementar sincronização seletiva por tipo
|
||||
- Adicionar cálculo de hash MD5 para detecção de mudanças
|
||||
- Implementar callback de progresso
|
||||
- Armazenar metadados de sincronização (timestamp, hash, count)
|
||||
- _Requirements: 3.1, 3.2, 3.3, 4.1, 4.2, 4.3_
|
||||
|
||||
- [ ] 5. Implementar DataService (API pública)
|
||||
- Criar arquivo `js/core/data-service.js` com classe DataService
|
||||
- Implementar `getPerfis(tipo, options)` com fallback para CSV
|
||||
- Implementar `searchPerfis(tipo, filters)` com suporte a múltiplos filtros
|
||||
- Implementar `getPerfilById(tipo, id)` para busca por ID
|
||||
- Implementar `getMetadata(tipo)` para informações de sincronização
|
||||
- Adicionar cache em memória para dados frequentemente acessados
|
||||
- _Requirements: 2.1, 2.2, 5.1, 5.2, 5.3, 5.5_
|
||||
|
||||
- [ ] 6. Integrar sistema de cache com código existente
|
||||
- Atualizar `app.js` para inicializar CacheManager na inicialização
|
||||
- Modificar `carregarCantoneiras()` para usar DataService
|
||||
- Adicionar tratamento de erros com fallback para CSV
|
||||
- Manter compatibilidade com código existente
|
||||
- Testar carregamento de cantoneiras com cache
|
||||
- _Requirements: 2.1, 2.2, 2.4, 7.3, 7.4_
|
||||
|
||||
- [ ] 7. Criar interface de administração do cache
|
||||
- Adicionar seção "Cache Manager" no painel administrativo
|
||||
- Criar botão "🔄 Sincronizar Todos" com barra de progresso
|
||||
- Exibir estatísticas de cache (espaço usado, última sync, count)
|
||||
- Adicionar botões para sincronizar tipos individuais
|
||||
- Implementar botão "🗑️ Limpar Cache" com confirmação
|
||||
- Exibir timestamp da última sincronização por tipo
|
||||
- _Requirements: 3.1, 3.2, 3.3, 3.4, 6.1, 6.2, 6.3_
|
||||
|
||||
- [ ] 8. Implementar configuração de fontes de dados
|
||||
- Adicionar seção "Configurar Fontes CSV" no painel admin
|
||||
- Permitir editar caminho base dos CSVs
|
||||
- Permitir editar nome de arquivo para cada tipo
|
||||
- Validar se arquivos existem antes de salvar
|
||||
- Salvar configuração no localStorage
|
||||
- Fornecer botão "Restaurar Padrões"
|
||||
- _Requirements: 10.1, 10.2, 10.3, 10.4, 10.5_
|
||||
|
||||
- [ ] 9. Implementar detecção automática de atualizações
|
||||
- Calcular hash MD5 dos arquivos CSV na inicialização
|
||||
- Comparar com hash armazenado no cache
|
||||
- Exibir notificação quando dados estiverem desatualizados
|
||||
- Adicionar opção de atualização automática ou manual
|
||||
- Implementar configuração de intervalo de verificação
|
||||
- _Requirements: 4.1, 4.2, 4.3, 4.4, 4.5_
|
||||
|
||||
- [ ] 10. Adicionar ferramentas de diagnóstico e debug
|
||||
- Criar seção "Diagnóstico" no painel admin
|
||||
- Exibir estatísticas de hit/miss do cache
|
||||
- Implementar botão "Exportar Cache" (JSON)
|
||||
- Implementar botão "Importar Cache" (JSON)
|
||||
- Adicionar modo debug com logs detalhados no console
|
||||
- Exibir informações de saúde do IndexedDB
|
||||
- _Requirements: 8.1, 8.2, 8.3, 8.4, 8.5_
|
||||
|
||||
- [ ] 11. Implementar gerenciamento de espaço
|
||||
- Calcular espaço total usado pelo cache
|
||||
- Exibir espaço disponível no navegador
|
||||
- Implementar aviso quando espaço < 10MB
|
||||
- Adicionar botão para limpar tipos específicos
|
||||
- Implementar limpeza automática de dados antigos (opcional)
|
||||
- _Requirements: 6.1, 6.2, 6.3, 6.4_
|
||||
|
||||
- [ ] 12. Implementar fallback e compatibilidade
|
||||
- Detectar se IndexedDB está disponível
|
||||
- Implementar fallback completo para CSV quando IndexedDB não disponível
|
||||
- Adicionar opção para desabilitar cache via configuração
|
||||
- Garantir que aplicativo funciona sem cache
|
||||
- Testar em navegadores sem IndexedDB
|
||||
- _Requirements: 6.5, 7.4, 7.5_
|
||||
|
||||
- [ ] 13. Otimizações de performance
|
||||
- Implementar lazy loading para perfis não utilizados
|
||||
- Adicionar cache em memória para dados recentes
|
||||
- Otimizar queries com índices apropriados
|
||||
- Implementar batch insert para sincronização rápida
|
||||
- Medir e otimizar tempo de carregamento
|
||||
- _Requirements: 9.1, 9.2, 9.4, 9.5_
|
||||
|
||||
- [ ]* 14. Implementar Web Workers para parsing (opcional)
|
||||
- Criar Web Worker para parse de CSV em background
|
||||
- Mover processamento pesado para worker thread
|
||||
- Implementar comunicação via postMessage
|
||||
- Testar performance com arquivos grandes
|
||||
- _Requirements: 9.3_
|
||||
|
||||
- [ ]* 15. Implementar compressão de dados (opcional)
|
||||
- Adicionar biblioteca de compressão (pako.js ou similar)
|
||||
- Comprimir dados antes de armazenar se > 1MB
|
||||
- Descomprimir ao carregar
|
||||
- Medir ganho de espaço vs overhead de CPU
|
||||
- _Requirements: 9.5_
|
||||
|
||||
- [ ] 16. Criar documentação do sistema
|
||||
- Documentar API pública do DataService
|
||||
- Criar guia de uso para desenvolvedores
|
||||
- Documentar configurações disponíveis
|
||||
- Adicionar exemplos de uso
|
||||
- Documentar troubleshooting comum
|
||||
- _Requirements: Todos_
|
||||
|
||||
- [ ] 17. Aplicar sistema de cache a todos os tipos de perfis
|
||||
- Atualizar funções de carregamento de barras redondas
|
||||
- Atualizar funções de carregamento de tubos circulares
|
||||
- Atualizar funções de carregamento de perfis I
|
||||
- Atualizar funções de carregamento de perfis W
|
||||
- Atualizar funções de carregamento de tubos RHS
|
||||
- Atualizar funções de carregamento de chapas
|
||||
- Atualizar funções de carregamento de perfis HP
|
||||
- Atualizar funções de carregamento de barras roscadas
|
||||
- Atualizar funções de carregamento de barras chatas
|
||||
- _Requirements: 2.1, 2.2, 5.1_
|
||||
|
||||
- [ ] 18. Testes de integração e validação final
|
||||
- Testar carregamento inicial (primeira vez)
|
||||
- Testar carregamento do cache (segunda vez)
|
||||
- Testar sincronização manual
|
||||
- Testar detecção de atualizações
|
||||
- Testar fallback quando CSV não disponível
|
||||
- Testar limpeza de cache
|
||||
- Testar configuração de fontes
|
||||
- Validar performance (< 100ms para cache hit)
|
||||
- _Requirements: Todos_
|
||||
|
||||
## Notes
|
||||
|
||||
- Tarefas marcadas com * são opcionais e podem ser implementadas posteriormente
|
||||
- Cada tarefa deve ser testada individualmente antes de prosseguir
|
||||
- Manter compatibilidade com código existente durante toda implementação
|
||||
- Priorizar funcionalidade básica antes de otimizações avançadas
|
||||
Reference in New Issue
Block a user