remove arquivos desnecessarios
This commit is contained in:
@@ -1,84 +0,0 @@
|
||||
# 🔐 Guia de Variáveis de Ambiente - Backend Convex
|
||||
|
||||
## 📋 Variáveis Obrigatórias
|
||||
|
||||
### 1. BETTER_AUTH_SECRET
|
||||
|
||||
**Status:** 🔴 **OBRIGATÓRIO em Produção**
|
||||
|
||||
**Descrição:** Chave secreta para criptografia de tokens de autenticação
|
||||
|
||||
**Como gerar:**
|
||||
|
||||
```powershell
|
||||
# Windows PowerShell
|
||||
[Convert]::ToBase64String([System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32))
|
||||
```
|
||||
|
||||
```bash
|
||||
# Linux/Mac
|
||||
openssl rand -base64 32
|
||||
```
|
||||
|
||||
**Onde configurar:** Convex Dashboard > Settings > Environment Variables
|
||||
|
||||
---
|
||||
|
||||
### 2. SITE_URL
|
||||
|
||||
**Status:** 🔴 **OBRIGATÓRIO**
|
||||
|
||||
**Descrição:** URL base da aplicação
|
||||
|
||||
**Valores:**
|
||||
- Desenvolvimento: `http://localhost:5173`
|
||||
- Produção: `https://sgse.pe.gov.br` (substitua pela URL real)
|
||||
|
||||
**Onde configurar:** Convex Dashboard > Settings > Environment Variables
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Como as variáveis são usadas
|
||||
|
||||
Estas variáveis são carregadas em `packages/backend/convex/auth.ts`:
|
||||
|
||||
```typescript
|
||||
// Fallback para desenvolvimento local
|
||||
const siteUrl = process.env.SITE_URL || process.env.CONVEX_SITE_URL || "http://localhost:5173";
|
||||
const authSecret = process.env.BETTER_AUTH_SECRET;
|
||||
```
|
||||
|
||||
### Comportamento:
|
||||
|
||||
1. **`siteUrl`:**
|
||||
- Primeiro tenta usar `SITE_URL`
|
||||
- Se não existir, tenta `CONVEX_SITE_URL`
|
||||
- Se nenhum estiver configurado, usa `http://localhost:5173` (apenas para desenvolvimento)
|
||||
|
||||
2. **`authSecret`:**
|
||||
- Usa `BETTER_AUTH_SECRET` se configurado
|
||||
- Se não configurado, Better Auth usará um secret padrão (⚠️ INSEGURO em produção!)
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist de Configuração
|
||||
|
||||
### Desenvolvimento Local
|
||||
|
||||
- [ ] Sistema funciona sem configurar (usa valores padrão)
|
||||
- [ ] Mensagens de aviso são esperadas e podem ser ignoradas
|
||||
|
||||
### Produção
|
||||
|
||||
- [ ] `BETTER_AUTH_SECRET` configurado no Convex Dashboard
|
||||
- [ ] `SITE_URL` configurado no Convex Dashboard
|
||||
- [ ] Secret gerado usando método seguro
|
||||
- [ ] URL de produção está correta
|
||||
- [ ] Mensagens de erro não aparecem mais
|
||||
|
||||
---
|
||||
|
||||
## 📖 Mais Informações
|
||||
|
||||
Consulte o arquivo `CONFIGURACAO_PRODUCAO.md` na raiz do projeto para instruções detalhadas.
|
||||
|
||||
@@ -123,9 +123,9 @@ export const criarOuBuscarConversaIndividual = mutation({
|
||||
handler: async (ctx, args) => {
|
||||
// TENTAR BETTER AUTH PRIMEIRO
|
||||
const identity = await ctx.auth.getUserIdentity();
|
||||
|
||||
|
||||
let usuarioAtual = null;
|
||||
|
||||
|
||||
if (identity && identity.email) {
|
||||
// Buscar por email (Better Auth)
|
||||
usuarioAtual = await ctx.db
|
||||
@@ -133,7 +133,7 @@ export const criarOuBuscarConversaIndividual = mutation({
|
||||
.withIndex("by_email", (q) => q.eq("email", identity.email!))
|
||||
.first();
|
||||
}
|
||||
|
||||
|
||||
// SE NÃO ENCONTROU, BUSCAR POR SESSÃO ATIVA (Sistema customizado)
|
||||
if (!usuarioAtual) {
|
||||
const sessaoAtiva = await ctx.db
|
||||
@@ -141,7 +141,7 @@ export const criarOuBuscarConversaIndividual = mutation({
|
||||
.filter((q) => q.eq(q.field("ativo"), true))
|
||||
.order("desc")
|
||||
.first();
|
||||
|
||||
|
||||
if (sessaoAtiva) {
|
||||
usuarioAtual = await ctx.db.get(sessaoAtiva.usuarioId);
|
||||
}
|
||||
@@ -184,7 +184,11 @@ export const enviarMensagem = mutation({
|
||||
args: {
|
||||
conversaId: v.id("conversas"),
|
||||
conteudo: v.string(),
|
||||
tipo: v.union(v.literal("texto"), v.literal("arquivo"), v.literal("imagem")),
|
||||
tipo: v.union(
|
||||
v.literal("texto"),
|
||||
v.literal("arquivo"),
|
||||
v.literal("imagem")
|
||||
),
|
||||
arquivoId: v.optional(v.id("_storage")),
|
||||
arquivoNome: v.optional(v.string()),
|
||||
arquivoTamanho: v.optional(v.number()),
|
||||
@@ -362,7 +366,10 @@ export const reagirMensagem = mutation({
|
||||
} else {
|
||||
// Adicionar reação
|
||||
await ctx.db.patch(args.mensagemId, {
|
||||
reagiuPor: [...reacoes, { usuarioId: usuarioAtual._id, emoji: args.emoji }],
|
||||
reagiuPor: [
|
||||
...reacoes,
|
||||
{ usuarioId: usuarioAtual._id, emoji: args.emoji },
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
@@ -659,7 +666,9 @@ export const listarConversas = query({
|
||||
m.remetenteId !== usuarioAtual._id
|
||||
).length;
|
||||
} else {
|
||||
naoLidas = mensagens.filter((m) => m.remetenteId !== usuarioAtual._id).length;
|
||||
naoLidas = mensagens.filter(
|
||||
(m) => m.remetenteId !== usuarioAtual._id
|
||||
).length;
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -757,10 +766,15 @@ export const obterMensagensAgendadas = query({
|
||||
|
||||
// Filtrar apenas as do usuário atual
|
||||
const minhasMensagensAgendadas = mensagens.filter(
|
||||
(m) => m.remetenteId === usuarioAtual._id && m.agendadaPara && m.agendadaPara > Date.now()
|
||||
(m) =>
|
||||
m.remetenteId === usuarioAtual._id &&
|
||||
m.agendadaPara &&
|
||||
m.agendadaPara > Date.now()
|
||||
);
|
||||
|
||||
return minhasMensagensAgendadas.sort((a, b) => (a.agendadaPara || 0) - (b.agendadaPara || 0));
|
||||
return minhasMensagensAgendadas.sort(
|
||||
(a, b) => (a.agendadaPara || 0) - (b.agendadaPara || 0)
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
@@ -784,9 +798,7 @@ export const obterNotificacoes = query({
|
||||
|
||||
let query = ctx.db
|
||||
.query("notificacoes")
|
||||
.withIndex("by_usuario", (q) =>
|
||||
q.eq("usuarioId", usuarioAtual._id)
|
||||
);
|
||||
.withIndex("by_usuario", (q) => q.eq("usuarioId", usuarioAtual._id));
|
||||
|
||||
if (args.apenasPendentes) {
|
||||
query = ctx.db
|
||||
@@ -935,11 +947,11 @@ export const buscarMensagens = query({
|
||||
|
||||
let mensagens: any[] = [];
|
||||
|
||||
if (args.conversaId) {
|
||||
if (args.conversaId !== undefined) {
|
||||
// Buscar em conversa específica
|
||||
const mensagensConversa = await ctx.db
|
||||
.query("mensagens")
|
||||
.withIndex("by_conversa", (q) => q.eq("conversaId", args.conversaId))
|
||||
.withIndex("by_conversa", (q) => q.eq("conversaId", args.conversaId!))
|
||||
.collect();
|
||||
mensagens = mensagensConversa;
|
||||
} else {
|
||||
@@ -1008,7 +1020,9 @@ export const obterDigitando = query({
|
||||
.collect();
|
||||
|
||||
// Filtrar usuário atual e buscar informações
|
||||
const digitandoFiltrado = digitando.filter((d) => d.usuarioId !== usuarioAtual._id);
|
||||
const digitandoFiltrado = digitando.filter(
|
||||
(d) => d.usuarioId !== usuarioAtual._id
|
||||
);
|
||||
|
||||
const usuarios = await Promise.all(
|
||||
digitandoFiltrado.map(async (d) => {
|
||||
@@ -1054,7 +1068,9 @@ export const contarNaoLidas = query({
|
||||
|
||||
if (leitura) {
|
||||
return mensagens.filter(
|
||||
(m) => m.enviadaEm > (leitura.lidaEm || 0) && m.remetenteId !== usuarioAtual._id
|
||||
(m) =>
|
||||
m.enviadaEm > (leitura.lidaEm || 0) &&
|
||||
m.remetenteId !== usuarioAtual._id
|
||||
).length;
|
||||
}
|
||||
|
||||
@@ -1143,4 +1159,3 @@ export const limparIndicadoresDigitacao = internalMutation({
|
||||
return indicadoresAntigos.length;
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -1,114 +0,0 @@
|
||||
# Script para criar arquivo .env
|
||||
# Usar: .\criar-env.ps1
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "════════════════════════════════════════════════════════════" -ForegroundColor Cyan
|
||||
Write-Host " 🔐 CRIAR ARQUIVO .env - SGSE (Convex Local)" -ForegroundColor Cyan
|
||||
Write-Host "════════════════════════════════════════════════════════════" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# Verificar se .env já existe
|
||||
if (Test-Path ".env") {
|
||||
Write-Host "⚠️ ATENÇÃO: Arquivo .env já existe!" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
$resposta = Read-Host "Deseja sobrescrever? (S/N)"
|
||||
|
||||
if ($resposta -ne "S" -and $resposta -ne "s") {
|
||||
Write-Host ""
|
||||
Write-Host "❌ Operação cancelada. Arquivo .env mantido." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
pause
|
||||
exit
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "[1/3] Criando arquivo .env..." -ForegroundColor Yellow
|
||||
|
||||
$conteudo = @"
|
||||
# ══════════════════════════════════════════════════════════
|
||||
# CONFIGURAÇÃO DE AMBIENTE - SGSE
|
||||
# ══════════════════════════════════════════════════════════
|
||||
|
||||
# Segurança Better Auth
|
||||
BETTER_AUTH_SECRET=+Nfg4jTxPv1giF5MlmyYTxpU/VkS3QaDOvgSWd+QmbY=
|
||||
|
||||
# URL da aplicação
|
||||
SITE_URL=http://localhost:5173
|
||||
|
||||
# ══════════════════════════════════════════════════════════
|
||||
# IMPORTANTE - SEGURANÇA
|
||||
# ══════════════════════════════════════════════════════════
|
||||
# 1. Este arquivo NÃO deve ser commitado no Git
|
||||
# 2. Antes de ir para produção, gere um NOVO secret
|
||||
# 3. Em produção, altere SITE_URL para a URL real
|
||||
# ══════════════════════════════════════════════════════════
|
||||
"@
|
||||
|
||||
try {
|
||||
$conteudo | Out-File -FilePath ".env" -Encoding UTF8 -NoNewline
|
||||
Write-Host "✅ Arquivo .env criado com sucesso!" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "❌ ERRO ao criar arquivo .env: $_" -ForegroundColor Red
|
||||
pause
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "[2/3] Verificando .gitignore..." -ForegroundColor Yellow
|
||||
|
||||
if (Test-Path ".gitignore") {
|
||||
$gitignoreContent = Get-Content ".gitignore" -Raw
|
||||
if ($gitignoreContent -notmatch "\.env") {
|
||||
Add-Content -Path ".gitignore" -Value "`n.env`n.env.local`n.env.*.local"
|
||||
Write-Host "✅ .env adicionado ao .gitignore" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "✅ .env já está no .gitignore" -ForegroundColor Green
|
||||
}
|
||||
} else {
|
||||
@"
|
||||
.env
|
||||
.env.local
|
||||
.env.*.local
|
||||
"@ | Out-File -FilePath ".gitignore" -Encoding UTF8
|
||||
Write-Host "✅ .gitignore criado" -ForegroundColor Green
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "[3/3] Resumo da configuração:" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host "┌─────────────────────────────────────────────────────────┐" -ForegroundColor Cyan
|
||||
Write-Host "│ ✅ Arquivo criado: packages/backend/.env │" -ForegroundColor Cyan
|
||||
Write-Host "│ │" -ForegroundColor Cyan
|
||||
Write-Host "│ Variáveis configuradas: │" -ForegroundColor Cyan
|
||||
Write-Host "│ • BETTER_AUTH_SECRET: Configurado ✅ │" -ForegroundColor Cyan
|
||||
Write-Host "│ • SITE_URL: http://localhost:5173 ✅ │" -ForegroundColor Cyan
|
||||
Write-Host "└─────────────────────────────────────────────────────────┘" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "════════════════════════════════════════════════════════════" -ForegroundColor Cyan
|
||||
Write-Host " 📋 PRÓXIMOS PASSOS" -ForegroundColor Cyan
|
||||
Write-Host "════════════════════════════════════════════════════════════" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "1. Reinicie o servidor Convex:" -ForegroundColor White
|
||||
Write-Host " > bunx convex dev" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "2. Reinicie o servidor Web (em outro terminal):" -ForegroundColor White
|
||||
Write-Host " > cd ..\..\apps\web" -ForegroundColor Gray
|
||||
Write-Host " > bun run dev" -ForegroundColor Gray
|
||||
Write-Host ""
|
||||
Write-Host "3. Verifique que as mensagens de erro pararam ✅" -ForegroundColor White
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "════════════════════════════════════════════════════════════" -ForegroundColor Cyan
|
||||
Write-Host " ⚠️ LEMBRE-SE" -ForegroundColor Cyan
|
||||
Write-Host "════════════════════════════════════════════════════════════" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "• NÃO commite o arquivo .env no Git" -ForegroundColor Yellow
|
||||
Write-Host "• Gere um NOVO secret antes de ir para produção" -ForegroundColor Yellow
|
||||
Write-Host "• Altere SITE_URL quando for para produção" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "Pressione qualquer tecla para continuar..." -ForegroundColor Gray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
# ══════════════════════════════════════════════════════════
|
||||
# CONFIGURAÇÃO DE AMBIENTE - SGSE
|
||||
# ══════════════════════════════════════════════════════════
|
||||
|
||||
# Segurança Better Auth
|
||||
BETTER_AUTH_SECRET=+Nfg4jTxPv1giF5MlmyYTxpU/VkS3QaDOvgSWd+QmbY=
|
||||
|
||||
# URL da aplicação
|
||||
SITE_URL=http://localhost:5173
|
||||
|
||||
# ══════════════════════════════════════════════════════════
|
||||
# IMPORTANTE - SEGURANÇA
|
||||
# ══════════════════════════════════════════════════════════
|
||||
# 1. Este arquivo NÃO deve ser commitado no Git
|
||||
# 2. Antes de ir para produção, gere um NOVO secret
|
||||
# 3. Em produção, altere SITE_URL para a URL real
|
||||
# ══════════════════════════════════════════════════════════
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
# Script para iniciar Convex local e popular o banco de dados
|
||||
|
||||
Write-Host "🚀 SGSE - Inicialização do Convex Local" -ForegroundColor Cyan
|
||||
Write-Host "========================================" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
# 1. Verificar se já está rodando
|
||||
$convexRunning = Get-NetTCPConnection -LocalPort 3210 -ErrorAction SilentlyContinue
|
||||
if ($convexRunning) {
|
||||
Write-Host "✅ Convex já está rodando na porta 3210" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "⏳ Iniciando Convex local..." -ForegroundColor Yellow
|
||||
Start-Process powershell -ArgumentList "-NoExit", "-Command", "cd '$PSScriptRoot'; bunx convex dev"
|
||||
Write-Host "⏳ Aguardando Convex inicializar (20 segundos)..." -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 20
|
||||
}
|
||||
|
||||
# 2. Verificar se o banco foi criado
|
||||
if (Test-Path ".convex") {
|
||||
Write-Host "✅ Banco de dados local criado!" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "❌ Erro: Banco não foi criado" -ForegroundColor Red
|
||||
Write-Host "⏳ Aguardando mais 10 segundos..." -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 10
|
||||
}
|
||||
|
||||
# 3. Popular banco com dados iniciais
|
||||
Write-Host ""
|
||||
Write-Host "🌱 Populando banco de dados com dados iniciais..." -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
try {
|
||||
bunx convex run seed:seedDatabase
|
||||
Write-Host ""
|
||||
Write-Host "✅ Banco populado com sucesso!" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "🔑 CREDENCIAIS DE ACESSO:" -ForegroundColor Yellow
|
||||
Write-Host " Admin: matrícula 0000, senha Admin@123" -ForegroundColor White
|
||||
Write-Host " Funcionários: usar matrícula, senha Mudar@123" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "🌐 Acesse: http://localhost:5173" -ForegroundColor Cyan
|
||||
} catch {
|
||||
Write-Host "❌ Erro ao popular banco: $_" -ForegroundColor Red
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "Pressione qualquer tecla para continuar..."
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
# Script para iniciar o Convex Local
|
||||
Write-Host "🚀 Iniciando Convex Local..." -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "📍 O Convex estará disponível em: http://localhost:3210" -ForegroundColor Cyan
|
||||
Write-Host "💾 Os dados serão armazenados em: .convex/local_storage" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
Write-Host "⚠️ Para parar o servidor, pressione Ctrl+C" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
|
||||
# Iniciar o Convex em modo local
|
||||
bunx convex dev --run-local
|
||||
|
||||
Reference in New Issue
Block a user