docs: README completo com Tauri, downloads, stack
This commit is contained in:
@@ -87,11 +87,13 @@ fechamento-caixa/
|
||||
|
||||
O mesmo código gera 3 binários diferentes conforme a variável de ambiente `DOBRADO_LOJA`:
|
||||
|
||||
| Binário | Loja | Como buildar |
|
||||
|---------|------|-------------|
|
||||
| `fc-uniao.exe` | **Travada: UNIÃO** | `DOBRADO_LOJA=Uniao cargo build --release --target x86_64-pc-windows-gnu` |
|
||||
| `fc-alianca.exe` | **Travada: ALIANÇA** | `DOBRADO_LOJA=Alianca cargo build --release --target x86_64-pc-windows-gnu` |
|
||||
| `fc-ambos.exe` | **Livre (União / Aliança)** | `cargo build --release --target x86_64-pc-windows-gnu` (sem env) |
|
||||
## Downloads
|
||||
|
||||
| Binário | Loja | Download |
|
||||
|---------|------|----------|
|
||||
| `fc-uniao.exe` | **Travada: UNIÃO** | [Baixar](https://git.ofrangao.com.br/filipe/fechamento-caixa/releases/download/v2.0.0-uniao/fc-uniao.exe) |
|
||||
| `fc-alianca.exe` | **Travada: ALIANÇA** | [Baixar](https://git.ofrangao.com.br/filipe/fechamento-caixa/releases/download/v2.0.0-alianca/fc-alianca.exe) |
|
||||
| `fc-ambos.exe` | **Seletor livre** | [Baixar](https://git.ofrangao.com.br/filipe/fechamento-caixa/releases/download/v2.0.0-ambos/fc-ambos.exe) |
|
||||
|
||||
Quando a loja é fixa, o seletor de loja no formulário é **escondido via JavaScript** e tentativas de mudar via API retornam erro.
|
||||
|
||||
@@ -129,6 +131,60 @@ Quando a loja é fixa, o seletor de loja no formulário é **escondido via JavaS
|
||||
|
||||
---
|
||||
|
||||
## Tauri — o runtime desktop
|
||||
|
||||
O app roda como **Tauri 2**, um runtime que embute um navegador WebView2 (Windows) dentro de um processo Rust.
|
||||
|
||||
### O que o Tauri fornece
|
||||
|
||||
| Recurso | Como é usado |
|
||||
|---------|-------------|
|
||||
| **Janela nativa** | A janela do app com barra de título, controls de redimensionar, ícone |
|
||||
| **Sistema de arquivos** | Lê/escreve `config.json` e `fechamento.db` em `%LOCALAPPDATA%/FechamentoCaixa/` |
|
||||
| **Invocação de comandos Rust** | Frontend JS chama `invoke('nome_comando', args)` → Rust executa e retorna |
|
||||
| **HTTP client** | Plugin `supabase.rs` usa `reqwest` para falar com o Supabase |
|
||||
| **Shell** | Abre diálogo de impressoras, executa `cmd /C copy` para impressão |
|
||||
| **Diálogos nativos** | `tauri_plugin_dialog` para escolher arquivos, pastas, impressora |
|
||||
|
||||
### Comandos Tauri (Rust → JS)
|
||||
|
||||
O frontend **nunca acessa** Supabase, SQLite ou impressora diretamente. Tudo passa por `invoke`:
|
||||
|
||||
```javascript
|
||||
// Salvar fechamento (SQLite + Supabase)
|
||||
await invoke('salvar_fechamento', { estado });
|
||||
|
||||
// Sync com Supabase
|
||||
await invoke('sb_salvar_fechamento', { estado });
|
||||
|
||||
// Detectar impressora
|
||||
await invoke('detectar_impressora');
|
||||
|
||||
// Imprimir
|
||||
await invoke('imprimir_recibo', { html: reciboHTML });
|
||||
```
|
||||
|
||||
### Estrutura dos plugins Rust
|
||||
|
||||
```
|
||||
src-tauri/src/plugins/
|
||||
├── app.rs — Config da app (loja, operador default, sync)
|
||||
├── storage.rs — SQLite local (fonte primária offline)
|
||||
├── supabase.rs — Cliente HTTP para Supabase (service_role JWT)
|
||||
├── printer.rs — Detecção EPSON TM-T20, fallback para window.print()
|
||||
└── escpos.rs — Helpers ESCPOS (alinhamento, negrito, corte)
|
||||
```
|
||||
|
||||
### Onde os dados ficam
|
||||
|
||||
| Dado | Local |
|
||||
|------|-------|
|
||||
| Config (SUPABASE keys, loja default) | `%LOCALAPPDATA%/FechamentoCaixa/config.json` |
|
||||
| Banco SQLite (fechamentos) | `%LOCALAPPDATA%/FechamentoCaixa/fechamento.db` |
|
||||
| Rascunho auto-save | `%LOCALAPPDATA%/FechamentoCaixa/fechamento_rascunho.db` |
|
||||
|
||||
---
|
||||
|
||||
## Autores & Contexto
|
||||
|
||||
- **Desenvolvedor:** Filipe.Tavares
|
||||
|
||||
Reference in New Issue
Block a user