- Implement local-first architecture with SQLite - Add bidirectional sync with Django via ChangeLog - JWT authentication with auto-refresh token - REST API for products, orders, commands, payments - Stock management with automatic deduction
2.3 KiB
2.3 KiB
Guia de Sincronização: Django <-> Middleware Go
Este documento descreve o funcionamento do sistema de ChangeLog implementado no Django para permitir que o middleware em Go mantenha uma cópia local (local-first) dos dados de forma eficiente.
1. Funcionamento Técnico
Rastreamento de Mudanças (Django Signals)
Foi criada uma aplicação chamada sync que utiliza Django Signals. Sempre que um dos modelos abaixo é criado, editado ou excluído, uma entrada é gerada automaticamente na tabela ChangeLog:
ProductComandaProductComandaOrderClientCategoriesMesaPayments
Tabela de Log (ChangeLog)
Cada registro no log contém:
id: Identificador sequencial da mudança.model_name: Nome do modelo (ex: "Product").object_id: ID do objeto que mudou.action: "SAVE" (para criação/edição) ou "DELETE".timestamp: Quando a mudança ocorreu.
2. API de Sincronização
O middleware Go deve consumir o seguinte endpoint:
Endpoint: GET /api/v1/sync/
Parâmetros:
since_id(opcional): Retorna apenas mudanças com ID maior que este valor.
Exemplo de Fluxo no Go:
- Estado Inicial: O Go armazena o
last_sync_id(começando em 0). - Polling: De tempos em tempos (ex: a cada 5 segundos), o Go chama:
GET http://seu-servidor/api/v1/sync/?since_id=100(supondo que o último ID processado foi 100). - Processamento:
- O Django retorna uma lista de mudanças (ex: IDs 101, 102, 103).
- Para cada mudança
SAVEno log, o Go deve fazer umGETno endpoint específico do modelo para buscar os dados atualizados:- Se
model_name == "Product", buscar emGET /api/v1/products/{object_id}/.
- Se
- Para cada mudança
DELETE, o Go deve remover o item correspondente do seu banco de dados local.
- Atualização: O Go atualiza seu
last_sync_idpara o maior ID recebido (neste caso, 103).
3. Vantagens
- Performance: O Go não precisa baixar todos os produtos/pedidos toda vez. Ele só baixa o que realmente mudou.
- Detecção de Deleção: O sistema informa explicitamente o que foi apagado no Django.
- Resiliência: Se a conexão cair, ao reconectar, o Go apenas retoma a partir do último ID que ele conhece, garantindo que nenhuma mudança seja perdida.
Configurado em: 28 de Março de 2026