Decisões Técnicas, Análise de Código e Aprendizados Reais
🧱 Contexto do Projeto
Desenvolvi um sistema de controle de frequência para uma escola de Jiu-Jitsu, com foco em simplicidade, rapidez de entrega e escalabilidade futura. A ideia era que o sistema fosse utilizado por professores e administradores da escola para:
-
Cadastrar alunos e professores
-
Registrar frequência diária
-
Consultar e visualizar relatórios de presença
🧰 Stack Tecnológica Utilizada
Frontend
-
HTML, CSS e JavaScript puro (arquitetura simples, com estrutura clara de pastas)
-
Organização de componentes reutilizáveis para inputs e cards
-
Leve e sem dependência de frameworks — até o momento
Backend
-
Node.js + Express.js
-
Estrutura de rotas modulares (
/routes/aluno.js
,/routes/professor.js
, etc.) -
Uso de
app.use()
para middleware global -
Organização clara das funções de controle
Banco de Dados
-
MongoDB com visualização via MongoDB Compass
-
Mongoose para modelagem e conexão
-
Modelos separados por entidade (
Aluno.js
,Professor.js
,Presenca.js
)
Ferramentas Complementares
-
Insomnia para testar rotas HTTP
-
Docker (previsto para versão futura)
-
Railway para possível deploy
-
GitHub como repositório com README explicativo
🔎 Análise Técnica dos Códigos Utilizados
📁 Estrutura do Backend (exemplo real):
📦frequencia-academia-jiu-jitsu
┣ 📂routes
┃ ┣ 📜aluno.js
┃ ┣ 📜professor.js
┃ ┗ 📜presenca.js
┣ 📂models
┃ ┣ 📜Aluno.js
┃ ┣ 📜Professor.js
┃ ┗ 📜Presenca.js
┣ 📜server.js
┣ 📜.env
┗ 📜package.json
✅ Exemplo de Rota - Cadastro de Aluno (routes/aluno.js
)
const express = require('express');
const router = express.Router();
const Aluno = require('../models/Aluno');
router.post('/add-aluno', async (req, res) => {
const { nome, idade, faixa } = req.body;
try {
const novoAluno = new Aluno({ nome, idade, faixa });
await novoAluno.save();
res.status(201).json({ mensagem: 'Aluno cadastrado com sucesso!' });
} catch (err) {
res.status(500).json({ erro: 'Erro ao cadastrar aluno.' });
}
});
module.exports = router;
Análise Técnica:
-
✅ Código limpo e direto ao ponto
-
⚠️ Pode evoluir com validação via
Joi
ouexpress-validator
-
⚠️ Melhorar mensagens de erro específicas no
catch
-
✅ Uso de
async/await
comtry/catch
é padrão recomendado
✅ Modelo com Mongoose (models/Aluno.js
)
const mongoose = require('mongoose');
const alunoSchema = new mongoose.Schema({
nome: { type: String, required: true },
idade: Number,
faixa: String,
dataCadastro: { type: Date, default: Date.now }
});
module.exports = mongoose.model('Aluno', alunoSchema);
Análise Técnica:
-
✅ Uso do
default: Date.now
é ótimo pra rastrear histórico -
⚠️ Pode evoluir com validações (
minLength
,enum
, etc.) -
✅ Schema separado por entidade = ótimo pra manutenção
📈 Dicas para Melhoramento Futuro
-
🔒 Autenticação e Autorização
-
Adicionar JWT para proteger rotas administrativas
-
Middleware para separar funções de admin e professor
-
-
📊 Relatórios com Dashboards
-
Adicionar gráficos (via Chart.js ou Recharts no front)
-
Exibir frequência por aluno, mês ou dias da semana
-
-
💬 Integração com Notificações
-
Usar WhatsApp API para alertar pais sobre faltas
-
Envio de e-mail automático mensal com relatório de presença
-
-
🧪 Testes Automatizados
-
Começar com
Jest
ouMocha
para testar rotas críticas -
CI com GitHub Actions pra testes no push
-
-
📦 Dockerização
-
Criar
Dockerfile
edocker-compose.yml
para rodar app + MongoDB com um comando
-
-
🧹 Padronização com ESLint e Prettier
-
Manter estilo de código padronizado, fácil para contribuição futura
-
🧠 Aprendizados Reais
-
Simplicidade não é sinônimo de amadorismo: entregar algo funcional e usável é mais importante que seguir todas as modinhas do momento.
-
MongoDB atendeu bem, mas já considero PostgreSQL + Prisma pra escalar com mais segurança em projetos maiores.
-
A modularização do código no início facilitou demais a manutenção e adição de novas features depois.
🙌 Encerramento
Esse projeto mostrou mais uma vez que, como dev full stack, não basta saber programar — é preciso entender o negócio, escolher as batalhas certas e entregar com qualidade e visão de futuro.
Se quiser ver o código, trocar ideia ou tiver sugestões, só chamar!
E aí, qual stack você tem usado nos seus projetos reais?
#FullStack #NodeJS #MongoDB #DevReal #ProjetosReais #JiuJitsu #Backend #CleanCode #DesenvolvimentoWeb
Comentários
Postar um comentário