# Guia de DEV — Banco (Prisma), Auth e Desktop (Tauri) Este guia descreve o que foi corrigido, por quê e como seguir no DEV, incluindo como gerar o executável do Desktop (Tauri) localmente. ## O que foi feito e por quê - Ajuste do Prisma no DEV (P2021) - Problema: o Prisma CLI lia o `.env` da raiz (produção) e o banco local não tinha as tabelas do Better Auth (ex.: `AuthUser`, `AuthSession`). - Decisão: evitar conflito entre `.env` (raiz) e `prisma/.env` — usamos `DATABASE_URL=...` inline nos comandos do Prisma, apontando para `./prisma/db.dev.sqlite` apenas no DEV. - Resultado: banco `prisma/prisma/db.dev.sqlite` criado/sincronizado e seed de usuários executado. - Migração das abas do Desktop para shadcn/Radix - O Tauri não roda Next.js. Para manter o visual consistente com o web, migramos as abas para um wrapper shadcn-like usando Radix Tabs e Tailwind (`apps/desktop/src/components/ui/tabs.tsx`). - Incluímos badge de status equivalente ao web e o botão “Enviar inventário agora” (POST `/api/machines/inventory`). - CI (GitHub Actions) e lockfile - Erro resolvido: `ERR_PNPM_OUTDATED_LOCKFILE` em `apps/desktop`. Atualizamos o `pnpm-lock.yaml` para refletir as novas dependências do Desktop. - O workflow do desktop usa `--frozen-lockfile`; manter o lockfile em sincronia evita falhas. ## Fluxo de banco (DEV) - Banco de DEV: `file:./prisma/db.dev.sqlite` (arquivo: `prisma/prisma/db.dev.sqlite`). - Comandos (forçar alvo de DEV no terminal atual): ``` DATABASE_URL="file:./prisma/db.dev.sqlite" pnpm exec prisma db push DATABASE_URL="file:./prisma/db.dev.sqlite" pnpm prisma:generate DATABASE_URL="file:./prisma/db.dev.sqlite" pnpm auth:seed ``` - Rodar app local (Next): ``` pnpm dev ``` - Login de teste (DEV): `admin@sistema.dev / admin123` - Prisma Studio (DEV): ``` DATABASE_URL="file:./prisma/db.dev.sqlite" pnpm exec prisma studio ``` Observação: evitar `prisma/.env` nesse setup, pois causa conflito com o `.env` da raiz (o Prisma acusa conflitos e falha o comando). Manter o override inline é a forma mais segura de isolar DEV sem tocar produção. ## Desktop (Tauri) - Onde foram feitas as mudanças principais: - `apps/desktop/src/components/ui/tabs.tsx` (Tabs Radix + estilos shadcn-like) - `apps/desktop/src/main.tsx` (layout com abas: Resumo/Inventário/Diagnóstico/Configurações; status badge; botão “Enviar inventário agora”; seleção do perfil de acesso colaborador/gestor e sincronização do usuário vinculado). - `apps/desktop/src-tauri/src/agent.rs` (coleta e normalização de hardware, discos, GPUs e inventário estendido por SO). - Variáveis de ambiente do Desktop (em tempo de build): - `VITE_APP_URL` e `VITE_API_BASE_URL` — por padrão, use a URL da aplicação web. ### Atualizações automáticas (GitHub) 1. Gere o par de chaves do updater (`pnpm tauri signer generate -- -w ~/.tauri/raven.key`) e configure as variáveis de ambiente `TAURI_SIGNING_PRIVATE_KEY` e `TAURI_SIGNING_PRIVATE_KEY_PASSWORD` antes de rodar `pnpm -C apps/desktop tauri build`. 2. Garanta que `bundle.createUpdaterArtifacts` esteja habilitado (já configurado) para gerar os pacotes `.nsis`/`.AppImage` e os arquivos `.sig`. 3. Publique os artefatos de cada SO em um release do GitHub e atualize o `latest.json` público (ex.: no próprio repositório ou em um gist) com `version`, `notes`, `pub_date` e as entradas por plataforma (`url` e `signature`). 4. O agente já consulta o updater ao iniciar e também possui o botão “Verificar atualizações” na aba Configurações. Ao detectar nova versão o download é feito em segundo plano e o app reinicia automaticamente após o `downloadAndInstall`. ### Build do executável localmente Você pode gerar o executável local sem precisar da VPS. O que muda é apenas o sistema operacional alvo (Linux/Windows/macOS). O Tauri recomenda compilar em cada SO para obter o bundle nativo desse SO. Em produção, o GitHub Actions já faz isso em matriz. 1) Pré-requisitos gerais - Node 20 + pnpm 9 (via Corepack) - Rust (stable) — `rustup` instalado - Dependências do sistema (Linux): - `libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev libxdo-dev libssl-dev build-essential curl wget file` 2) Instalar deps do desktop e buildar ``` corepack enable && corepack prepare pnpm@9 --activate pnpm -C apps/desktop install VITE_APP_URL=http://localhost:3000 \ VITE_API_BASE_URL=http://localhost:3000 \ pnpm -C apps/desktop tauri build ``` 3) Saída do build - Os artefatos ficam em: `apps/desktop/src-tauri/target/release/bundle/` - No Linux: `.AppImage`/`.deb`/`.rpm` (conforme target) - No Windows/macOS: executável/instalador específicos do SO (para assinatura, usar chaves/AC, se desejado) - Para liberar atualizações OTA, publique release no GitHub com artefatos e `latest.json` — o plugin de updater verifica a URL configurada em `tauri.conf.json`. ### Build na VPS x Local - Não há diferença funcional além do SO alvo e de possíveis chaves de assinatura. Use a VPS apenas se quiser gerar pacotes Linux em ambiente isolado. Para Windows/macOS, é preferível buildar nesses SOs ou usar a matriz do GitHub Actions (já configurada). ## CI/CD — Observações - `desktop-release.yml` (Tauri): instala dependências, faz build por SO e publica artefatos. Mantendo o `pnpm-lock.yaml` atualizado, o passo `--frozen-lockfile` passa. - `ci-cd-web-desktop.yml`: já usa `pnpm install --no-frozen-lockfile` no web, evitando falhas em pipelines de integração. - Smoke de provisionamento pode ser desligado definindo `RUN_MACHINE_SMOKE=false` (default); quando quiser exercitar o fluxo complete register/heartbeat, defina `RUN_MACHINE_SMOKE=true`. ## Troubleshooting - Sign-in 500 após `db push`/seed: - Verifique o terminal do app e confirme a existência da tabela `AuthUser` no Prisma Studio (alvo DEV). - `ERR_PNPM_OUTDATED_LOCKFILE` no Desktop: - Atualize `pnpm-lock.yaml` no root após alterar dependências de `apps/desktop/package.json`. - Alternativa: usar `--no-frozen-lockfile` (não recomendado para releases reproduzíveis).