chore: update docs and configs

This commit is contained in:
Esdras Renan 2025-11-05 20:49:19 -03:00
parent 7718f77d4c
commit 1079111de2
23 changed files with 102 additions and 10467 deletions

View file

@ -16,7 +16,7 @@ BETTER_AUTH_SECRET=change-me
BETTER_AUTH_URL=http://localhost:3000
# Banco de dados (Prisma)
DATABASE_URL=file:./prisma/db.sqlite
DATABASE_URL=file:./prisma/db.dev.sqlite
# Seeds automáticos (Better Auth)
# Por padrão (true), garantindo apenas existência dos usuários padrão sem resetar senhas

View file

@ -6,7 +6,6 @@ Aplicação **Next.js 16 (App Router)** com **React 19**, **Convex** e **Better
- Bun >= 1.3 (recomendado 1.3.1). Após instalar via script oficial, adicione `export PATH="$HOME/.bun/bin:$PATH"` ao seu shell (ex.: `.bashrc`) para ter `bun` disponível globalmente.
- Node.js >= 20 (necessário para ferramentas auxiliares como Prisma CLI e Next.js em modo fallback).
- pnpm >= 10 (opcional, usado apenas para fluxos do app desktop/Tauri ou como plano B).
- CLI do Convex (`bunx convex dev` instalará automaticamente no primeiro uso, se ainda não estiver presente).
## Configuração rápida

View file

@ -64,8 +64,8 @@ bun run build:bun
- Produção: `https://tickets.esdrasrenan.com.br`
- DEV: configure `apps/desktop/.env` (exemplo fornecido).
- Comandos:
- `pnpm -C apps/desktop tauri dev` — desenvolvimento (porta 1420).
- `pnpm -C apps/desktop tauri build` — gera instaladores.
- `bun run --cwd apps/desktop tauri dev` — desenvolvimento (porta 1420).
- `bun run --cwd apps/desktop tauri build` — gera instaladores.
- **Fluxo do agente**:
1. Coleta perfil da dispositivo (hostname, OS, MAC, seriais, métricas).
2. Provisiona via `POST /api/machines/register` usando `MACHINE_PROVISIONING_SECRET`, informando perfil de acesso (Colaborador/Gestor) + dados do colaborador.
@ -92,7 +92,7 @@ bun run build:bun
- Executar `bun test -- --watch` apenas quando precisar de modo interativo.
- **Build**: `bun run build:bun` (`next build --turbopack`).
- **CI**: falhas mais comuns
- `ERR_PNPM_OUTDATED_LOCKFILE`: mantenha `pnpm-lock.yaml` atualizado (principalmente após alterar dependências do desktop).
- `ERR_BUN_LOCKFILE_OUTDATED`: confirme que o `bun.lock` foi regenerado (`bun install`) após alterar dependências, especialmente do app desktop.
- Variáveis Better Auth ausentes (`BETTER_AUTH_SECRET`): definidas no workflow (`Quality Checks`).
- Falha de host: confira `src/config/allowed-hosts.ts`; o middleware retorna 403 quando o domínio do Traefik não está listado.
@ -110,7 +110,7 @@ bun run build:bun
docker run --rm -it -e DATABASE_URL=file:/app/data/db.sqlite \
-v /home/renan/apps/sistema.current:/app \
-v sistema_sistema_db:/app/data -w /app \
node:20-bullseye bash -lc 'corepack enable; corepack prepare pnpm@10.20.0 --activate; pnpm i --no-frozen-lockfile; pnpm exec prisma migrate resolve --rolled-back <migration>; pnpm exec prisma migrate deploy'
oven/bun:1 bash -lc "bun install --frozen-lockfile && bun x prisma migrate resolve --rolled-back <migration> && bun x prisma migrate deploy"
docker service scale sistema_web=1
```

View file

@ -22,11 +22,11 @@ VITE_API_BASE_URL=
## Comandos
- Dev (abre janela Tauri e Vite em 1420):
- `pnpm -C apps/desktop tauri dev`
- `bun run --cwd apps/desktop tauri dev`
- Build frontend (somente Vite):
- `pnpm -C apps/desktop build`
- `bun run --cwd apps/desktop build`
- Build executável (bundle):
- `pnpm -C apps/desktop tauri build`
- `bun run --cwd apps/desktop tauri build`
Saída dos pacotes: `apps/desktop/src-tauri/target/release/bundle/`.
@ -48,7 +48,7 @@ Saída dos pacotes: `apps/desktop/src-tauri/target/release/bundle/`.
Build rápido e leve em dev:
```bash
pnpm -C apps/desktop tauri build --bundles nsis
bun run --cwd apps/desktop tauri build --bundles nsis
```
Assinatura do updater (opcional em dev):
@ -56,7 +56,7 @@ Assinatura do updater (opcional em dev):
$privB64 = '<COLE_SUA_CHAVE_PRIVADA_EM_BASE64>'
$env:TAURI_SIGNING_PRIVATE_KEY = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($privB64))
$env:TAURI_SIGNING_PRIVATE_KEY_PASSWORD = 'SENHA_AQUI'
pnpm -C apps/desktop tauri build --bundles nsis
bun run --cwd apps/desktop tauri build --bundles nsis
```
## Prérequisitos Tauri

View file

@ -159,10 +159,11 @@
## 5. Gerar chaves do updater Tauri
1. Em qualquer dispositivo com Node/pnpm (pode ser seu computador local):
1. Em qualquer dispositivo com Bun instalado (pode ser seu computador local):
```bash
pnpm install
pnpm --filter appsdesktop tauri signer generate
bun install
bun install --cwd apps/desktop
bun run --cwd apps/desktop tauri signer generate
```
2. O comando gera:
- Chave privada (`tauri.private.key`).
@ -236,19 +237,16 @@
1. Baixe e instale os pré-requisitos:
- Git para Windows.
- Node.js 20 (instalação inclui npm).
- Habilite o Corepack: abra o PowerShell como administrador e rode:
```powershell
corepack enable
corepack prepare pnpm@latest --activate
```
- Bun 1.3+: instale via instalador oficial (`iwr https://bun.sh/install.ps1 | invoke-expression`) e garanta que `bun` esteja no `PATH`.
- Node.js 20 (opcional, caso precise rodar scripts em Node durante o build).
- Rust toolchain: https://rustup.rs (instale padrão).
- Visual Studio Build Tools (C++ build tools) ou `Desktop development with C++`.
- WebView2 Runtime (https://developer.microsoft.com/microsoft-edge/webview2/).
2. Opcional: instale as dependências do Tauri rodando uma vez:
```powershell
pnpm install
pnpm --filter appsdesktop tauri info
bun install
bun install --cwd apps/desktop
bun run --cwd apps/desktop tauri info
```
3. No GitHub → *Settings**Actions**Runners**New self-hosted runner* → escolha Windows x64 e copie URL/token.
4. Em `C:\actions-runner` (recomendado):
@ -326,14 +324,10 @@
steps:
- uses: actions/checkout@v4
- name: Setup pnpm & Node
uses: pnpm/action-setup@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
bun-version: 1.3.1
- name: Deploy stack (Docker Swarm)
working-directory: ${{ env.APP_DIR }}
@ -350,20 +344,16 @@
steps:
- uses: actions/checkout@v4
- name: Setup pnpm & Node
uses: pnpm/action-setup@v4
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
bun-version: 1.3.1
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install deps
run: pnpm install --frozen-lockfile
run: bun install --frozen-lockfile
- name: Build + Sign + Release (tauri-action)
uses: tauri-apps/tauri-action@v0
@ -389,7 +379,7 @@
target: ${{ env.VPS_UPDATES_DIR }}
overwrite: true
```
2. Ajuste o bloco de deploy conforme seu processo (por exemplo, use `pnpm build && pm2 restart` se não usar Docker ou substitua por chamada à API do Portainer caso faça o deploy por lá).
2. Ajuste o bloco de deploy conforme seu processo (por exemplo, use `bun run build && pm2 restart` se não usar Docker ou substitua por chamada à API do Portainer caso faça o deploy por lá).
3. Faça commit desse arquivo e suba para o GitHub (`git add .github/workflows/ci-cd-web-desktop.yml`, `git commit`, `git push`).
---

View file

@ -4,9 +4,9 @@
"version": "0.1.6",
"identifier": "br.com.esdrasrenan.sistemadechamados",
"build": {
"beforeDevCommand": "pnpm run dev",
"beforeDevCommand": "bun run dev",
"devUrl": "http://localhost:1420",
"beforeBuildCommand": "pnpm run build",
"beforeBuildCommand": "bun run build",
"frontendDist": "../dist"
},
"app": {

View file

@ -5,7 +5,7 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
## Resumo rápido
- **Bun (runtime padrão)**: 1.3+ já instalado no runner e VPS (`bun --version`). Após instalar localmente, exporte `PATH="$HOME/.bun/bin:$PATH"` para tornar o binário disponível. Use `bun install`, `bun run dev:bun`, `bun run convex:dev:bun`, `bun run build:bun` e `bun test` como fluxo principal (scripts Node continuam disponíveis como fallback).
- **Node/pnpm**: Node 20.9+ permanece obrigatório para ferramentas CLI; pnpm 10 está disponível como alternativa apenas para fluxos do desktop/Tauri.
- **Node.js**: mantenha a versão 20.9+ instalada para ferramentas auxiliares (Prisma CLI, scripts legados em Node) quando não estiver usando o runtime do Bun.
- **Next.js 15.5.5**: Projeto voltou para a versão estável (`next@15.5.5`) com Turbopack como bundler padrão e whitelist de domínios garantida pelo middleware.
- **Lint/Test/Build**: `bun run lint`, `bun test`, `bun run build:bun`. O test runner do Bun já roda em modo não interativo; utilize `bunx vitest --watch` apenas quando precisar do modo watch manualmente.
- **Banco DEV**: SQLite em `prisma/prisma/db.dev.sqlite`. Defina `DATABASE_URL="file:./prisma/db.dev.sqlite"` ao chamar CLI do Prisma.
@ -28,7 +28,7 @@ Este documento consolida o estado atual do ambiente de desenvolvimento, descreve
```bash
bun run dev:bun
```
> Alternativas: `pnpm dev` (Node) ou `bun run dev:webpack` se precisar do fallback oficial.
> Alternativas: `bun run dev` (Node) ou `bun run dev:webpack` se precisar do fallback oficial.
3. Credenciais padrão (seed): `admin@sistema.dev / admin123`.
4. Herdou dados antigos? Execute `node scripts/remove-legacy-demo-users.mjs` para limpar contas demo legadas.
@ -74,7 +74,7 @@ O workflow dispara em todo `push`/`pull_request` para `main` e fornece feedback
## Testes rápidos via curl (Convites & acessos)
1. Rode `bun run dev:bun` (ou `pnpm dev` se preferir Node) e autentique-se em `http://localhost:3000/login` usando `admin@sistema.dev / admin123`.
1. Rode `bun run dev:bun` (ou `bun run dev` se preferir Node) e autentique-se em `http://localhost:3000/login` usando `admin@sistema.dev / admin123`.
2. Copie o valor do cookie `BETTER_AUTH_SESSION` e exporte no shell: `export COOKIE="BETTER_AUTH_SESSION=<valor>"`.
### Usuários
@ -140,11 +140,11 @@ curl -i -X PATCH http://localhost:3000/api/admin/invites/$INVITE_ID \
### Build local
```bash
corepack enable && corepack prepare pnpm@10.20.0 --activate
pnpm -C apps/desktop install
bun install
bun install --cwd apps/desktop
VITE_APP_URL=http://localhost:3000 \
VITE_API_BASE_URL=http://localhost:3000 \
pnpm -C apps/desktop tauri build
bun run --cwd apps/desktop tauri build
```
Artefatos: `apps/desktop/src-tauri/target/release/bundle/`.
@ -163,11 +163,11 @@ img.save("icons/icon.ico", sizes=[(16,16),(24,24),(32,32),(48,48),(64,64),(128,1
PY
```
- Depois de regerar `icon.ico`, faça o commit e rode novamente `pnpm -C apps/desktop tauri build` para empacotar o instalador com o ícone correto.
- Depois de regerar `icon.ico`, faça o commit e rode novamente `bun run --cwd apps/desktop tauri build` para empacotar o instalador com o ícone correto.
### Atualizações OTA
1. Gere chaves (`pnpm tauri signer generate`).
1. Gere chaves (`bun run --cwd apps/desktop tauri signer generate`).
2. Defina `TAURI_SIGNING_PRIVATE_KEY` (+ password) no ambiente de build.
3. Publique os pacotes e um `latest.json` em release GitHub.
4. O app verifica ao iniciar e pelo botão “Verificar atualizações”.
@ -176,9 +176,9 @@ PY
| Sintoma | Causa | Correção |
| --- | --- | --- |
| `ERR_PNPM_OUTDATED_LOCKFILE` no pipeline | Dependências do desktop alteradas sem atualizar `pnpm-lock.yaml` | Rodar `pnpm install` na raiz e commitar o lockfile. |
| `ERR_BUN_LOCKFILE_OUTDATED` no pipeline | Dependências do desktop alteradas sem atualizar o `bun.lock` | Rodar `bun install` (raiz e `apps/desktop`) e commitar o lockfile. |
| Prisma falha com `P2021` / tabelas Better Auth inexistentes | CLI leu `.env` da raiz (produção) | Usar `DATABASE_URL="file:./prisma/db.dev.sqlite"` nos comandos. |
| Vitest trava em modo watch | Script `pnpm test` sem `--run` e CI detecta TTY | Ajustado para `vitest --run --passWithNoTests`. Localmente, use `pnpm test -- --watch` se quiser. |
| Vitest trava em modo watch | Script `bun test` sem `--run` e CI detecta TTY | Ajustado para `vitest --run --passWithNoTests`. Localmente, use `bun test -- --watch` se quiser. |
| Desktop não encontra updater | Falta `latest.json` ou assinatura inválida | Publicar release com `*.sig` e `latest.json` apontando para os pacotes corretos. |
## Cronômetro dos tickets

View file

@ -159,7 +159,7 @@ Observação: o CI já força `docker service update --force` após `stack deplo
## App Desktop (Tauri)
- Build local por SO:
- Linux: `pnpm -C apps/desktop tauri build`
- Linux: `bun run --cwd apps/desktop tauri build`
- Windows/macOS: executar o mesmo comando no respectivo sistema (o Tauri gera .msi/.dmg/.app).
- Por padrão, o executável em modo release usa `https://tickets.esdrasrenan.com.br` como `APP_URL` e `API_BASE_URL`.
- Para customizar, crie `apps/desktop/.env` com `VITE_APP_URL` e `VITE_API_BASE_URL`.
@ -203,7 +203,7 @@ docker run --rm -it \
-w /app \
-e CONVEX_SELF_HOSTED_URL=https://convex.esdrasrenan.com.br \
-e CONVEX_SELF_HOSTED_ADMIN_KEY='COLE_A_CHAVE_AQUI' \
node:20-bullseye bash -lc "corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm install --frozen-lockfile --prod=false && pnpm exec convex deploy"
oven/bun:1 bash -lc "bun install --frozen-lockfile && bun x convex deploy"
```
Observação
@ -231,10 +231,10 @@ docker run --rm -it \
-v /srv/apps/sistema:/app -w /app \
-e CONVEX_SELF_HOSTED_URL=https://convex.esdrasrenan.com.br \
-e CONVEX_SELF_HOSTED_ADMIN_KEY='COLE_A_CHAVE' \
node:20-bullseye bash -lc "set -euo pipefail; corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm i --frozen-lockfile --prod=false; \
oven/bun:1 bash -lc "set -euo pipefail; bun install --frozen-lockfile; \
unset CONVEX_DEPLOYMENT; \
pnpm exec convex env set MACHINE_PROVISIONING_SECRET 'seu-hex' -y; \
pnpm exec convex env list"
bun x convex env set MACHINE_PROVISIONING_SECRET 'seu-hex' -y; \
bun x convex env list"
```
### Smoke test pósdeploy (CI)
@ -270,7 +270,7 @@ cd /srv/apps/sistema
git pull
docker stack deploy --with-registry-auth -c stack.yml sistema
```
- Convex (functions): repetir o container `node:20` com `pnpm exec convex deploy` (ver seção Convex).
- Convex (functions): repetir o container `oven/bun:1` com `bun x convex deploy` (ver seção Convex).
- Reiniciar serviços sem alterar o stack: `docker service update --force sistema_web` (ou `sistema_convex_backend`).
## CI/CD (GitHub Actions + runner selfhosted)
@ -281,8 +281,8 @@ docker stack deploy --with-registry-auth -c stack.yml sistema
- `cd /srv/apps/sistema && git pull`
- `docker stack deploy --with-registry-auth -c stack.yml sistema`
3. Adicionar job `convex_deploy` (opcional) no mesmo runner:
- Executar container `node:20-bullseye` com envs `CONVEX_SELF_HOSTED_URL` e `CONVEX_SELF_HOSTED_ADMIN_KEY` (secrets do GitHub)
- Rodar `pnpm exec convex deploy`
- Executar container `oven/bun:1` com envs `CONVEX_SELF_HOSTED_URL` e `CONVEX_SELF_HOSTED_ADMIN_KEY` (secrets do GitHub)
- Rodar `bun x convex deploy`
Secrets necessários no GitHub (Repo → Settings → Secrets and variables → Actions)
- `CONVEX_SELF_HOSTED_URL` = `https://convex.esdrasrenan.com.br`
@ -306,12 +306,12 @@ Benefícios
- DNS/Traefik incorretos → confirmar labels/hostnames e DNS.
- `MAILER_SENDER_EMAIL` com erro de parsing:
- Adicionar aspas no `.env`.
- `pnpm` reclama de workspace:
- O `pnpm-workspace.yaml` inclui `apps/desktop`. No deploy do web isso não impacta pois usamos filtros/paths do projeto. Se preferir isolar, ajuste para apenas `.`.
- Lockfile desatualizado:
- Rode `bun install --frozen-lockfile` sempre que ajustar dependências para manter o `bun.lock` consistente em produção.
- Portainer erro de bind relativo:
- Usar caminho absoluto `/srv/apps/sistema:/app` no stack (feito).
- Prisma CLI “not found”:
- Instalar devDependencies no build (`NPM_CONFIG_PRODUCTION=false` e `pnpm install --prod=false`).
- Execute `bun install` no container de build garantindo a instalação das devDependencies (Prisma CLI fica disponível via `bun x prisma ...`).
- Convex CLI pedindo interação:
- Não usar CLI em produção; usamos imagem oficial `convex-backend` e `convex deploy` via container transitório com Admin Key.

View file

@ -11,7 +11,7 @@
- [x] Botão de reabrir disponível para solicitante/equipe até o fim do prazo; timeline registra `TICKET_REOPENED`.
- [x] Chat em tempo real incorporado ao detalhe do ticket (listagem live, envio, leitura automática, bloqueio pós-prazo).
- [x] Formulários dinâmicos para admissão/desligamento com escopo e permissões por empresa/usuário; `create` envia `formTemplate` e `customFields`.
- [x] Corrigidos mocks/tipagens das rotinas de resolução e reabertura (`resolveTicketHandler`, `reopenTicketHandler`) garantindo `pnpm lint`, `pnpm test` e `pnpm build` verdes.
- [x] Corrigidos mocks/tipagens das rotinas de resolução e reabertura (`resolveTicketHandler`, `reopenTicketHandler`) garantindo `bun run lint`, `bun test` e `bun run build:bun` verdes.
- [x] Atualizado schema/tipagens (`TicketWithDetails`, `ChartTooltipContent`) e dashboards CSAT para suportar reabertura com prazos e tooltips formatados.
- [x] Reatribuição de chamado sem motivo obrigatório; comentário interno só é criado quando o motivo é preenchido.
- [x] Botão “Novo dispositivo” reutiliza o mesmo primário padrão do shadcn usado em “Nova empresa”, mantendo a identidade visual.

View file

@ -16,31 +16,31 @@ export CONVEX_SELF_HOSTED_ADMIN_KEY='convex-self-hosted|011c148069bd37e4a3f1c10b
docker run --rm -it \
-v /srv/apps/sistema:/app -w /app \
-e CONVEX_SELF_HOSTED_URL -e CONVEX_SELF_HOSTED_ADMIN_KEY \
node:20-bullseye bash -lc "set -euo pipefail; \
corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm i --frozen-lockfile --prod=false; \
oven/bun:1 bash -lc "set -euo pipefail; \
bun install --frozen-lockfile; \
unset CONVEX_DEPLOYMENT; \
pnpm exec convex env set MACHINE_PROVISIONING_SECRET '71daa9ef54cb224547e378f8121ca898b614446c142a132f73c2221b4d53d7d6' -y; \
pnpm exec convex env list"
bun x convex env set MACHINE_PROVISIONING_SECRET '71daa9ef54cb224547e378f8121ca898b614446c142a132f73c2221b4d53d7d6' -y; \
bun x convex env list"
3) (Opcional) Definir MACHINE_TOKEN_TTL_MS (padrão 30 dias)
docker run --rm -it \
-v /srv/apps/sistema:/app -w /app \
-e CONVEX_SELF_HOSTED_URL -e CONVEX_SELF_HOSTED_ADMIN_KEY \
node:20-bullseye bash -lc "set -euo pipefail; \
corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm i --frozen-lockfile --prod=false; \
oven/bun:1 bash -lc "set -euo pipefail; \
bun install --frozen-lockfile; \
unset CONVEX_DEPLOYMENT; \
pnpm exec convex env set MACHINE_TOKEN_TTL_MS '2592000000' -y; \
pnpm exec convex env list"
bun x convex env set MACHINE_TOKEN_TTL_MS '2592000000' -y; \
bun x convex env list"
4) (Opcional) Definir FLEET_SYNC_SECRET
docker run --rm -it \
-v /srv/apps/sistema:/app -w /app \
-e CONVEX_SELF_HOSTED_URL -e CONVEX_SELF_HOSTED_ADMIN_KEY \
node:20-bullseye bash -lc "set -euo pipefail; \
corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm i --frozen-lockfile --prod=false; \
oven/bun:1 bash -lc "set -euo pipefail; \
bun install --frozen-lockfile; \
unset CONVEX_DEPLOYMENT; \
pnpm exec convex env set FLEET_SYNC_SECRET '' -y; \
pnpm exec convex env list"
bun x convex env set FLEET_SYNC_SECRET '' -y; \
bun x convex env list"
5) Testar registro (gera machineToken) — substitua o hostname se quiser
HOST="vm-teste-$(date +%s)"; \

View file

@ -24,8 +24,8 @@ Resultado: front/back sobem com o novo código sem editar o stack a cada release
- Mount fixo: `/home/renan/apps/sistema.current:/app` (não interpolar APP_DIR).
- Comando inline (sem script), com migrations na subida:
- `command: ["bash","-lc","corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm exec prisma migrate deploy && pnpm start -p 3000"]`
- **Se você optar por usar `/app/scripts/start-web.sh`** (como no workflow atual), ele já garante `pnpm@10.20.0` via Corepack/NPM antes de rodar Prisma/Next. Certifique-se de copiar esse arquivo para o build publicado; sem ele, a task cai com `pnpm: command not found`.
- `command: ["bash","-lc","bun install --frozen-lockfile && bun x prisma migrate deploy && bun run start:bun"]`
- **Se você optar por usar `/app/scripts/start-web.sh`** (como no workflow atual), garanta que o script execute `bun install` antes de rodar Prisma/Next. Certifique-se de copiar esse arquivo para o build publicado; sem ele, a task cai com `bun: command not found`.
- Env obrigatórias (URLs válidas):
- `DATABASE_URL=file:/app/data/db.sqlite`
- `NEXT_PUBLIC_CONVEX_URL=http://sistema_convex_backend:3210`
@ -43,7 +43,7 @@ APP_DIR=/home/renan/apps/sistema.current
docker run --rm -it \
-e DATABASE_URL=file:/app/data/db.sqlite \
-v "$APP_DIR:/app" -v sistema_sistema_db:/app/data -w /app \
node:20-bullseye bash -lc 'corepack enable; corepack prepare pnpm@10.20.0 --activate; pnpm i --no-frozen-lockfile; pnpm exec prisma migrate status'
oven/bun:1 bash -lc "bun install --frozen-lockfile && bun x prisma migrate status"
```
## Diagnóstico rápido
@ -74,7 +74,7 @@ Causas encontradas:
- Correção determinística:
- `docker service scale sistema_web=0`
- `prisma migrate resolve --rolled-back 20251015223259_add_company_provisioning_code` no volume `sistema_sistema_db` (comando acima em "Prisma/SQLite do stack").
- `pnpm exec prisma migrate deploy`
- `bun x prisma migrate deploy`
- `docker service scale sistema_web=1` (ou `update --force`).
3) Rollback por script ausente (`/app/scripts/start-web.sh`).
@ -99,7 +99,7 @@ Causas encontradas:
docker service update \
--mount-rm target=/app \
--mount-add type=bind,src=/home/renan/apps/sistema.current,dst=/app \
--args 'bash -lc "corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm exec prisma migrate deploy && pnpm start -p 3000"' \
--args 'bash -lc "bun install --frozen-lockfile && bun x prisma migrate deploy && bun run start:bun"' \
sistema_web
```
@ -110,7 +110,7 @@ APP_DIR=/home/renan/apps/sistema.current
docker service scale sistema_web=0
docker run --rm -it -e DATABASE_URL=file:/app/data/db.sqlite \
-v "$APP_DIR:/app" -v sistema_sistema_db:/app/data -w /app \
node:20-bullseye bash -lc 'corepack enable; corepack prepare pnpm@10.20.0 --activate; pnpm i --no-frozen-lockfile; pnpm exec prisma migrate resolve --rolled-back 20251015223259_add_company_provisioning_code; pnpm exec prisma migrate deploy'
oven/bun:1 bash -lc "bun install --frozen-lockfile && bun x prisma migrate resolve --rolled-back 20251015223259_add_company_provisioning_code && bun x prisma migrate deploy"
docker service scale sistema_web=1
```

View file

@ -54,7 +54,7 @@ Legenda: ✅ concluído · 🔄 em andamento · ⏳ a fazer.
- `VITE_APP_URL` → aponta para a interface Next (padrao produção: `https://tickets.esdrasrenan.com.br`).
- `VITE_API_BASE_URL` → base usada nas chamadas REST (`/api/machines/*`), normalmente igual ao `APP_URL`.
- Após provisionar ou encontrar token válido, o agente dispara `/machines/handshake?token=...` que autentica a dispositivo no Better Auth, devolve cookies e redireciona para a UI. Em produção, mantemos a navegação toplevel pelo handshake para garantir a aceitação de cookies na WebView (mesmo quando `POST /api/machines/sessions` é tentado antes).
- `apps/desktop/src-tauri/tauri.conf.json` ajustado para rodar `pnpm run dev/build`, servir `dist/` e abrir janela 1100x720.
- `apps/desktop/src-tauri/tauri.conf.json` ajustado para rodar `bun run dev/build`, servir `dist/` e abrir janela 1100x720.
- Novas tabelas Convex: `machines` (fingerprint, heartbeat, vínculo com AuthUser) e `machineTokens` (hash + TTL).
- Novos endpoints Next:
- `POST /api/machines/register` — provisiona dispositivo, gera token e usuário Better Auth (role `machine`).

View file

@ -18,7 +18,6 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
- `.github/workflows/ci-cd-web-desktop.yml` — pipeline de deploy web + desktop + deploy do Convex.
- `docs/OPERACAO-PRODUCAO.md` — runbook de operação (deploy, seeds, CI/CD, troubleshooting).
- `docs/SETUP-HISTORICO.md` — este histórico.
- `pnpm-workspace.yaml` — inclui `packages: ['.', 'apps/desktop']` para permitir comandos e builds do desktop. No deploy do web usamos filtros/paths; se preferir isolar, volte para apenas `'.'`.
- `scripts/deploy-from-git.sh` — fallback de deploy pullbased na VPS (sem Actions).
## Gestão de .env
@ -35,7 +34,7 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
## Convex selfhosted
- Evitamos `convex dev` no Swarm (CLI interativo). Adotada imagem oficial `ghcr.io/get-convex/convex-backend`.
- Geração de Admin Key dentro do container: `./generate_admin_key.sh`.
- Publicação de functions com `pnpm exec convex deploy` via container Node (`CONVEX_SELF_HOSTED_URL` + `CONVEX_SELF_HOSTED_ADMIN_KEY`).
- Publicação de functions com `bun x convex deploy` via container transitório (`CONVEX_SELF_HOSTED_URL` + `CONVEX_SELF_HOSTED_ADMIN_KEY`).
- Adicionado `convex_dashboard` opcional (DNS `convex-admin.*`).
## CI/CD (GitHub Actions)
@ -59,7 +58,7 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
4) `prisma: not found` no build
- Causa: instalar só prod deps.
- Solução: `NPM_CONFIG_PRODUCTION=false` e `pnpm install --prod=false` no container de build.
- Solução: garantir `bun install` completo (não apenas deps de produção) no container de build.
5) Lockfile/Workspace quebrando CI
- Causa: conflito de versões quando o desktop entrou no workspace.
@ -80,14 +79,14 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
## Checklists de operação
- Deploy manual (pullbased): `bash /srv/apps/sistema/scripts/deploy-from-git.sh`.
- Deploy via Actions: commit em `main`.
- Seeds: `https://tickets.../dev/seed` e `docker exec ... pnpm auth:seed`.
- Seeds: `https://tickets.../dev/seed` e `docker exec ... bun run auth:seed`.
- Verificação: `docker stack services sistema` e logs dos serviços.
## Melhorias futuras
- Rodar job de "Detect changes" também em runner selfhosted (zero minutos GitHubhosted).
- Fixar versão do `convex-backend` (ao invés de `latest`) para releases mais controladas.
- Substituir bindmount por imagens construídas no CI (tempo de deploy menor, reprodutibilidade).
- Adicionar cache de dependências pnpm no container de build.
- Adicionar cache das dependências do Bun no container de build.
## TODOs (próximos técnicos)
@ -95,7 +94,7 @@ Conteúdo mantido como registro. Para operação e deploy atuais, ver `docs/oper
- Sintoma: Tipos gerados do Prisma não exibem os campos `isAvulso` e `contractedHoursPerMonth` em `CompanyCreateInput`/`CompanyUpdateInput`.
- Temporário: rotas `src/app/api/admin/companies/[id]/route.ts` e mapeamento em `src/app/admin/companies/page.tsx` possuem guardas/casts para compilar.
- Ação:
1. Rodar `pnpm prisma:generate` no mesmo ambiente de build/execução (VPS e local) para regenerar o client.
1. Rodar `bun run prisma:generate` no mesmo ambiente de build/execução (VPS e local) para regenerar o client.
2. Confirmar que os campos aparecem nos tipos gerados.
3. Remover casts e `eslint-disable` do update; reintroduzir campos no `create` se desejado (com tipagem estrita).
4. Se ainda não existirem fisicamente na base, aplicar migração que adicione os campos ao modelo `Company`.

View file

@ -4,7 +4,7 @@ Documento de referência sobre o estado atual do sistema (web + desktop), melhor
## 1. Panorama
- **Web (Next.js 15 + Convex)**: build limpo (`pnpm build`), lint sem avisos e testes estáveis (Vitest em modo não interativo).
- **Web (Next.js 15 + Convex)**: build limpo (`bun run build:bun`), lint sem avisos e testes estáveis (Vitest em modo não interativo).
- **Desktop (Tauri)**: fluxo de provisionamento e heartbeat operacional; inventário consolidado com coleta multi-plataforma; atualizações OTA suportadas.
- **CI**: workflow `Quality Checks` roda lint/test/build em todo push/PR na `main`; pipeline de deploy (`ci-cd-web-desktop.yml`) permanece responsável por sincronizar com a VPS.
- **Infra**: deploy documentado no runbook (Swarm com symlink `sistema.current`). Migrações Prisma e variáveis críticas mapeadas.
@ -19,7 +19,7 @@ Documento de referência sobre o estado atual do sistema (web + desktop), melhor
| **Upgrade para Next.js 16 beta** | Dependências atualizadas (`next@16.0.0-beta.0`, `eslint-config-next@16.0.0-beta.0`), cache de filesystem do Turbopack habilitado, scripts de lint/test/build ajustados ao novo fluxo. | Projeto pronto para validar as novidades do Next 16 (React Compiler opcional, prefetch incremental, etc.); builds e testes já rodando com sucesso. |
| **Posture / inventário** | Type guards e normalização de métricas SMART/serviços (`convex/machines.ts`). | Reduziu `any`, melhorou detecção de alertas e consistência do metadata. |
| **Docs** | Revisão completa de `docs/DEV.md`, novo `STATUS-2025-10-16.md`, estrutura uniforme e casos de erro registrados. | Documentação enxuta e atualizada, com trilhas claras para DEV/CI/Deploy. |
| **Testes no CI** | Novo workflow `.github/workflows/quality-checks.yml` e script `pnpm test` em modo não-interativo. | Previne “travamentos” e garante checagens de qualidade automáticas. |
| **Testes no CI** | Novo workflow `.github/workflows/quality-checks.yml` e script `bun test` em modo não-interativo. | Previne “travamentos” e garante checagens de qualidade automáticas. |
## 3. Pontos de atenção (curto prazo)
@ -40,7 +40,7 @@ Documento de referência sobre o estado atual do sistema (web + desktop), melhor
| Cenário | Sintoma | Como resolver |
| --- | --- | --- |
| Token de dispositivo revogado | POST `/api/machines/sessions` retorna 401 e desktop volta ao onboarding | Reprovisionar pela UI do agente; garantir que `machineToken` foi atualizado. |
| Falha de heartbeat | Logs com `Falha ao registrar heartbeat` + status 500 | Verificar `NEXT_PUBLIC_CONVEX_URL` e conectividade. Roda `pnpm convext:dev` em DEV para confirmar schema. |
| Falha de heartbeat | Logs com `Falha ao registrar heartbeat` + status 500 | Verificar `NEXT_PUBLIC_CONVEX_URL` e conectividade. Rode `bun run convex:dev:bun` em DEV para confirmar schema. |
| Updater sem atualização | Desktop fica em “Procurando atualização” indefinidamente | Confirmar release publicado com `latest.json` apontando para URLs públicas do bundle e assinaturas válidas. |
## 6. Próximos passos imediatos

View file

@ -3,8 +3,8 @@
Guia rápido para gerar instaladores do app desktop em cada sistema operacional.
## Prérequisitos
- Node.js 20+ e pnpm (Corepack habilitado):
- `corepack enable && corepack prepare pnpm@10.20.0 --activate`
- Bun >= 1.3 instalado e disponível no `PATH`.
- Node.js 20+ (recomendado) caso precise executar scripts auxiliares em Node.
- Rust toolchain (stable) instalado.
- Dependências nativas por SO:
- Linux (Debian/Ubuntu):
@ -27,11 +27,11 @@ Guia rápido para gerar instaladores do app desktop em cada sistema operacional.
## Comandos de build
- Linux/macOS/Windows (rodar no próprio sistema):
```bash
pnpm -C apps/desktop tauri build
bun run --cwd apps/desktop tauri build
```
- Apenas frontend (Vite):
```bash
pnpm -C apps/desktop build
bun run --cwd apps/desktop build
```
Saída de artefatos: `apps/desktop/src-tauri/target/release/bundle/`.
@ -40,9 +40,9 @@ Saída de artefatos: `apps/desktop/src-tauri/target/release/bundle/`.
- Primeira compilação do Rust pode demorar (download de crates e linkedição).
- Se o linkeditor for lento no Linux, considere instalar `lld` e usar:
```bash
RUSTFLAGS="-Clink-arg=-fuse-ld=lld" pnpm -C apps/desktop tauri build
RUSTFLAGS="-Clink-arg=-fuse-ld=lld" bun run --cwd apps/desktop tauri build
```
- Para logs detalhados em dev, rode `pnpm -C apps/desktop tauri dev`.
- Para logs detalhados em dev, rode `bun run --cwd apps/desktop tauri dev`.
## Diagnóstico de sessão (Desktop → Portal)
- Durante testes, navegue até `/portal/debug` (o desktop pode redirecionar automaticamente) para ver:

View file

@ -8,7 +8,7 @@ Este guia consolida tudo o que precisa ser feito para que o auto-update do Tauri
1. **Gerar o par de chaves** (Linux ou WSL)
```bash
pnpm -C apps/desktop tauri signer generate -w ~/.tauri/raven.key
bun run --cwd apps/desktop tauri signer generate -w ~/.tauri/raven.key
```
- Privada: `~/.tauri/raven.key` (nunca compartilhar)
- Pública: `~/.tauri/raven.key.pub` (cole em `tauri.conf.json > plugins.updater.pubkey`)
@ -39,7 +39,7 @@ Este guia consolida tudo o que precisa ser feito para que o auto-update do Tauri
2. **Build do front (gera `dist/` para o Tauri)**
```bash
pnpm -C apps/desktop build
bun run --cwd apps/desktop build
```
3. **Exportar variáveis do assinador** (no mesmo shell em que vai buildar):
@ -51,7 +51,7 @@ Este guia consolida tudo o que precisa ser feito para que o auto-update do Tauri
4. **Gerar os instaladores + `.sig`**
```bash
pnpm -C apps/desktop tauri build
bun run --cwd apps/desktop tauri build
```
Os artefatos ficam em `apps/desktop/src-tauri/target/release/bundle/`:
@ -102,9 +102,9 @@ Este guia consolida tudo o que precisa ser feito para que o auto-update do Tauri
## 5. Resumo rápido
1. `pnpm -C apps/desktop build`
1. `bun run --cwd apps/desktop build`
2. `export TAURI_SIGNING_PRIVATE_KEY=...` / `export TAURI_SIGNING_PRIVATE_KEY_PASSWORD=...`
3. `pnpm -C apps/desktop tauri build`
3. `bun run --cwd apps/desktop tauri build`
4. Upload dos bundles + `.sig` → atualizar `latest.json`
5. Testar o instalador antigo para garantir que atualiza sozinho

View file

@ -33,7 +33,7 @@ VITE_API_BASE_URL=https://tickets.esdrasrenan.com.br
2) Rodar dev:
```
cd apps\desktop
pnpm tauri dev
bun run tauri dev
```
3) Provisionar:
- Usar o botão de olho para conferir o segredo, sem espaços.

View file

@ -4,9 +4,9 @@ Este documento resume a configuração atual de testes e como aproveitá-la para
## Comandos principais
- `pnpm test` &rarr; roda a suíte unitária em ambiente Node/JSdom.
- `pnpm test:browser` &rarr; executa os testes de navegador via Playwright (Chromium headless).
- `pnpm test:all` &rarr; executa as duas suítes de uma vez (requer Playwright instalado).
- `bun test` &rarr; roda a suíte unitária em ambiente Node/JSdom.
- `bun run test:browser` &rarr; executa os testes de navegador via Playwright (Chromium headless).
- `bun run test:all` &rarr; executa as duas suítes de uma vez (requer Playwright instalado).
> Sempre que adicionar novos testes, priorize mantê-los compatíveis com esses dois ambientes.
@ -15,16 +15,16 @@ Este documento resume a configuração atual de testes e como aproveitá-la para
1. Dependências JavaScript já estão listadas em `package.json` (`vitest`, `@vitest/browser-playwright`, `playwright`, `jsdom`, etc.).
2. Baixe os binários do Playwright uma vez:
```bash
pnpm exec playwright install chromium
bun x playwright install chromium
```
3. Em ambientes Linux “puros”, instale as bibliotecas de sistema recomendadas:
```bash
sudo apt-get install libnspr4 libnss3 libasound2t64
# ou
sudo pnpm exec playwright install-deps
sudo bun x playwright install-deps
```
Se o Playwright avisar sobre dependências ausentes ao rodar `pnpm test:browser`, instale-as e repita o comando.
Se o Playwright avisar sobre dependências ausentes ao rodar `bun run test:browser`, instale-as e repita o comando.
## Estrutura de setup
@ -59,8 +59,8 @@ setupFiles: process.env.VITEST_BROWSER
## Fluxo sugerido no dia a dia
1. Rode `pnpm test` localmente antes de abrir PRs.
2. Para alterações visuais/lógicas que afetem UI, adicione/atualize um teste em `tests/browser` e valide com `pnpm test:browser`.
1. Rode `bun test` localmente antes de abrir PRs.
2. Para alterações visuais/lógicas que afetem UI, adicione/atualize um teste em `tests/browser` e valide com `bun run test:browser`.
3. Se novos snapshots forem criados ou alterados, confirme visualmente e inclua os arquivos em commit.
4. Para tarefas de automação futuras (por exemplo, smoke-tests que renderizam componentes críticos), utilize a mesma estrutura:
- Setup mínimo no `tests/setup.browser.ts`.

View file

@ -17,8 +17,8 @@
"test:all": "cross-env VITEST_BROWSER=true bunx vitest --run --passWithNoTests",
"auth:seed": "node scripts/seed-auth.mjs",
"queues:ensure": "node scripts/ensure-default-queues.mjs",
"desktop:dev": "pnpm --filter appsdesktop tauri dev",
"desktop:build": "pnpm --filter appsdesktop tauri build",
"desktop:dev": "bun run --cwd apps/desktop tauri dev",
"desktop:build": "bun run --cwd apps/desktop tauri build",
"dev:bun": "cross-env NODE_ENV=development bun run --bun dev",
"convex:dev:bun": "cross-env NODE_ENV=development bun run --bun convex:dev",
"build:bun": "cross-env NODE_ENV=production bun run --bun build",

10341
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

View file

@ -1,12 +0,0 @@
packages:
- .
- apps/desktop
ignoredBuiltDependencies:
- '@prisma/client'
- '@prisma/engines'
- '@tailwindcss/oxide'
- esbuild
- prisma
- sharp
- unrs-resolver

View file

@ -42,7 +42,7 @@ if echo "$CHANGED" | grep -q '^convex/'; then
-v "$APP_DIR":/app \
-w /app \
--env-file .ci.env \
node:20-bullseye bash -lc "corepack enable && corepack prepare pnpm@10.20.0 --activate && pnpm install --no-frozen-lockfile --prod=false && pnpm exec convex deploy"
oven/bun:1 bash -lc "bun install --frozen-lockfile && bun x convex deploy"
else
echo "[deploy] convex/ changed but .ci.env missing; skip Convex deploy"
fi

View file

@ -125,7 +125,7 @@ export async function POST(request: Request) {
return NextResponse.json(
{
error: "Backend do Convex desatualizado",
detail: "Recompile/deploy as funções Convex (ex.: `pnpm convex:dev` em desenvolvimento ou `npx convex deploy`) para aplicar o suporte a múltiplos acessos remotos.",
detail: "Recompile/deploy as funções Convex (ex.: `bun run convex:dev:bun` em desenvolvimento ou `bun x convex deploy`) para aplicar o suporte a múltiplos acessos remotos.",
},
{ status: 409 }
)