Sistema de ERP para Maple Bear - Backend API desenvolvido com Fastify.
- ✅ Cadastro de funcionários com upload de foto
- ✅ Integração com Cloudinary para armazenamento de imagens
- ✅ Banco de dados PostgreSQL (Neon)
- ✅ Validações robustas de entrada
- ✅ CORS configurado adequadamente
- ✅ Health check com verificação de serviços
- ✅ Logs detalhados para debugging
- ✅ CI/CD com GitHub Actions
- Node.js 18+
- PostgreSQL (ou conta no Neon)
- Conta no Cloudinary
- Git
- Clone o repositório:
git clone https://github.com/kirestein/maple-erp-backend.git
cd maple-erp-backend- Instale as dependências:
npm install- Configure as variáveis de ambiente:
cp .env.example .envEdite o arquivo .env com suas credenciais:
# Database
DATABASE_URL=postgresql://username:password@host:port/database
# Cloudinary
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
# Server
PORT=4000
NODE_ENV=development
HOST=0.0.0.0
# Frontend (para CORS em produção)
FRONTEND_URL=https://your-frontend-domain.com- Execute o servidor:
# Desenvolvimento
npm run dev
# Produção
npm startGET /health-checkRetorna o status dos serviços (banco de dados, Cloudinary, etc.).
POST /employees
Content-Type: multipart/form-data
fullName: string (obrigatório, 2-100 caracteres)
jobFunctions: string (obrigatório, 2-100 caracteres)
birthday: string (opcional, formato YYYY-MM-DD)
file: arquivo (obrigatório, JPG/PNG, máximo 5MB)Resposta de sucesso (201):
{
"id": 1,
"full_name": "João Silva",
"job_functions": "Desenvolvedor",
"birthday": "1990-01-15",
"photo_url": "https://res.cloudinary.com/...",
"created_at": "2025-06-06T21:06:59.234Z"
}O CORS está configurado para permitir:
Desenvolvimento:
http://localhost:3000,http://localhost:3001,http://localhost:5173http://127.0.0.1:3000,http://127.0.0.1:3001,http://127.0.0.1:5173- Qualquer origem (para testes)
Produção:
- Apenas o domínio configurado em
FRONTEND_URL
Métodos permitidos: GET, POST, PUT, DELETE, OPTIONS
Headers permitidos: Content-Type, Authorization, X-Requested-With
Credentials: Habilitado
# Executar testes
npm test
# Executar linter
npm run lint- Conecte seu repositório GitHub ao Render
- Configure as variáveis de ambiente no painel do Render
- O deploy será automático a cada push na branch
main
O projeto inclui configuração para:
- Railway (
railway.json) - Render (
render.yaml) - Docker (Dockerfile)
Os logs são detalhados e incluem:
- Requisições recebidas
- Processamento de multipart/form-data
- Uploads para Cloudinary
- Operações no banco de dados
- Erros com stack trace
Para visualizar logs em tempo real:
npm run dev- Validação rigorosa de entrada
- Sanitização de dados
- Limitação de tamanho de arquivo (5MB)
- Validação de tipos de arquivo (apenas JPG/PNG)
- CORS configurado adequadamente
- Headers de segurança
- Crie uma branch para sua feature:
git checkout -b feature/nova-funcionalidade - Faça commit das mudanças:
git commit -m 'feat: adiciona nova funcionalidade' - Push para a branch:
git push origin feature/nova-funcionalidade - Abra um Pull Request
Este projeto segue a Conventional Commits:
feat:nova funcionalidadefix:correção de bugdocs:alterações na documentaçãostyle:formatação, sem alteração de códigorefactor:refatoração de códigotest:adição ou correção de testeschore:atualizações de build, configurações, etc
Este projeto está sob a licença ISC.
Para dúvidas ou problemas:
- Verifique os logs do servidor
- Consulte a documentação da API
- Abra uma issue no GitHub