Backend simples e leve para a plataforma IntegraMente de Saúde Mental. Utiliza Node.js, Express e SQLite.
- Node.js v14+
- npm ou yarn
- Instalar dependências
npm install- Configurar variáveis de ambiente
cp .env.example .env
# Editar o arquivo .env com suas configurações
nano .env- Iniciar o servidor
# Modo desenvolvimento (com auto-reload)
npm run dev
# Ou modo produção
npm startO servidor iniciará em http://localhost:5000
POST /api/auth/login
Content-Type: application/json
{
"matricula": "EMP001",
"senha": "integra2024"
}
Response (200):
{
"sucesso": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"usuario": {
"id": 1,
"matricula": "EMP001",
"nome": "João Silva",
"empresa": "TechCorp",
"admin": false
}
}
POST /api/auth/registrar
Content-Type: application/json
{
"matricula": "EMP006",
"senha": "senha_segura_123",
"nome": "Maria Santos",
"empresa": "Empresa Ltda",
"email": "maria@empresa.com",
"telefone": "(11) 98765-4321"
}
Response (201):
{
"sucesso": true,
"mensagem": "Usuário registrado com sucesso",
"usuarioId": 6
}
GET /api/auth/me
Authorization: Bearer {token}
Response (200):
{
"sucesso": true,
"usuario": {
"id": 1,
"matricula": "EMP001",
"nome": "João Silva",
"empresa": "TechCorp",
"email": "joao@empresa.com",
"telefone": "(11) 98765-4321",
"admin": false,
"ativo": 1,
"criado_em": "2024-04-25T08:00:00.000Z"
}
}
PATCH /api/auth/alterar-senha
Authorization: Bearer {token}
Content-Type: application/json
{
"senha_atual": "senha_antiga",
"senha_nova": "senha_nova_123"
}
Response (200):
{
"sucesso": true,
"mensagem": "Senha alterada com sucesso"
}
POST /api/inscricoes
Authorization: Bearer {token}
Content-Type: application/json
{
"tipo_servico": "Consulta Online",
"dados_formulario": {
"nome": "João Silva",
"email": "joao@email.com",
"telefone": "(11) 98765-4321",
"horario": "manha",
"descricao": "Consulta para ansiedade"
}
}
Response (201):
{
"sucesso": true,
"mensagem": "Inscrição realizada com sucesso",
"inscricaoId": 42
}
GET /api/inscricoes
Authorization: Bearer {token}
Response (200):
{
"sucesso": true,
"total": 3,
"inscricoes": [
{
"id": 42,
"usuario_id": 1,
"tipo_servico": "Consulta Online",
"dados_formulario": { ... },
"status": "pendente",
"criado_em": "2024-04-25T10:30:00.000Z"
},
...
]
}
GET /api/inscricoes/{id}
Authorization: Bearer {token}
Response (200):
{
"sucesso": true,
"inscricao": {
"id": 42,
"usuario_id": 1,
"tipo_servico": "Consulta Online",
"dados_formulario": { ... },
"status": "pendente",
"criado_em": "2024-04-25T10:30:00.000Z"
}
}
GET /api/usuarios
Authorization: Bearer {token_admin}
Response (200):
{
"sucesso": true,
"total": 7,
"usuarios": [
{
"id": 1,
"matricula": "ADMIN001",
"nome": "Administrador",
"empresa": "IntegraMente",
"email": "admin@integramente.com",
"ativo": 1,
"criado_em": "2024-04-25T08:00:00.000Z"
},
...
]
}
PATCH /api/usuarios/{id}/desativar
Authorization: Bearer {token_admin}
Response (200):
{
"sucesso": true,
"mensagem": "Usuário desativado"
}
PATCH /api/usuarios/{id}/ativar
Authorization: Bearer {token_admin}
Response (200):
{
"sucesso": true,
"mensagem": "Usuário ativado"
}
GET /api/logs
Authorization: Bearer {token_admin}
Response (200):
{
"sucesso": true,
"total": 25,
"logs": [
{
"id": 1,
"usuario_id": 1,
"usuario_nome": "Administrador",
"acao": "LOGIN",
"detalhes": null,
"ip_address": "::1",
"criado_em": "2024-05-03T12:00:00.000Z"
},
...
]
}
GET /api/health
Response (200):
{
"status": "ok",
"timestamp": "2024-04-25T10:30:00.000Z",
"version": "1.0.0"
}
Todos os endpoints protegidos requerem um token JWT no header:
Authorization: Bearer {token}
O token expira em 8 horas.
id: ID únicomatricula: Identificador único (TEXT)senha: Senha com hash bcryptjsnome: Nome completoempresa: Empresa/Organizaçãoemail: Emailtelefone: Telefoneadmin: Flag admin (0 ou 1)suporte: Flag suporte (0 ou 1)ativo: Ativo/Inativo (0 ou 1)criado_em: Data de criaçãoatualizado_em: Data da última atualização
id: ID únicousuario_id: ID do usuáriotipo_servico: Tipo de serviçodados_formulario: JSON com dados do formuláriostatus: Status (pendente, confirmada, cancelada)criado_em: Data de criação
id: ID únicousuario_id: ID do usuário (pode ser NULL)acao: Ação realizadadetalhes: Detalhes adicionaisip_address: IP do clientecriado_em: Data de criação
# Login
curl -X POST http://localhost:5000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"matricula": "ADMIN001",
"senha": "admin2024"
}'
# Criar inscrição (use o token recebido)
curl -X POST http://localhost:5000/api/inscricoes \
-H "Authorization: Bearer {TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"tipo_servico": "Consulta Online",
"dados_formulario": {
"nome": "João",
"email": "joao@email.com",
"telefone": "(11) 98765-4321"
}
}'- Importe a coleção de endpoints (endpoints.json)
- Configure o ambiente com
BASE_URL=http://localhost:5000 - Execute os requests
-
Vercel (Recomendado para simplecidade)
- Deploy automático do git
- Plano gratuito disponível
- Suporta Node.js
-
Railway
- Simples e rápido
- Banco de dados SQLite incluído
- Dashboard intuitivo
-
Render
- Free tier generoso
- Suporta projetos Node.js
- PostgreSQL disponível
-
Heroku (Deprecated)
- Alternativa: parecido é Render
Certifique-se de:
- ✅ Mudar
JWT_SECRETpara uma chave segura - ✅ Definir
NODE_ENV=production - ✅ Usar HTTPS
- ✅ Configurar CORS corretamente
- ✅ Fazer backup do banco de dados regularmente
PORT=5000 # Porta do servidor
FRONTEND_URL=http://localhost:8000 # URL do frontend (CORS)
JWT_SECRET=chave_segura_aqui # Chave JWT (IMPORTANTE: mude isso!)
NODE_ENV=development # development ou production
DATABASE_PATH=./data/integramente.db # Caminho do banconpm install# Mude a PORT no .env
# Ou mate o processo anterior:
lsof -ti:5000 | xargs kill -9Geralmente significa que há múltiplas instâncias acessando o banco. Reinicie o servidor.
Para dúvidas ou problemas, contacte:
- Email: suporte@integramente.com
- Telefone: (11) 9999-9999
Desenvolvido com ❤️ para IntegraMente