2
respostas

Fazendo projeto

Eu to tentando fazer esse mesmo projeto: https://github.com/EncodeDecodeStepByStep/EncodeDecodeStepByStep, só que ele é feito em Java e eu estou usando o Node.js. Minha dúvida é qual deve ser a ordem de criação das coisas, quando deve ser o momento de cada commit e quando entra o swagger? To usando o ChatGPT pra auxiliar, e ele me deu a seguinte ordem:
1-Criar a pasta "backend", dentro dela, a pasta "src", dentro da "src" as pastas "routes", "controllers" e "services".
2- No terminal, dentro da pasta "backend" rodar "npm init y", no "package.json" q foi criado colocar no script ""dev": "nodemon src/server.js"", e colocar "type:module".
3-No terminal, dentro da pasta "backend" rodar "npm install express" e "npm install --save-dev nodemon"
4- Dentro da pasta "backend" criar o arquivo "app.js" e "server.js", testar o comando "npm run dev" no terminal, testar tbm no navegador a rota teste. Se der tudo certo commitar(não esquecer de criar o arquivo "gitIgnore" e colocar o "node_modules" nele).
5- Criar "src/routes/goulombRoutes.js", "src/controllers/goulombController.js", "src/services/goulombService.js"
6-Conectar no app.js, testar e se der certo commitar.

O passo a passo está certo? Sempre tem um passo a passo quando começa um novo projeto né? Seriam esses? Claro q vai mudar alguma coisa.

Outra dúvida é q no projeto em "Java", o "goulombController.js" usa vários outros arquivos como ""Codification", o "ReaderWriterWrapper", o "encodeRequest", "new Thread" e "try/catch"", mas eu ainda não tenho esses arquivos. Então eu devo fazer no começo uma versão mínima e segura?
Como o chatGPT disse, faça agora:
1- recebe request
2 - pega numero e k
3 - chama service
4 - devolve resposta

e depois
1- recebe request
2 - define divisor
3 - altera estado global Codification
4 - cria Reader/Writer
5 - inicia processamento em outra thread
6 - chama service
7 - trata erro

2 respostas

Ola!

Tem um ajuste importante: esse tipo de passo a passo não é uma “receita fixa”, é mais um esqueleto inicial. O que você precisa mesmo é organizar por incrementos pequenos e funcionais, não por uma ordem rígida de arquivos.

Sobre o fluxo que você montou: ele está bom, só que está um pouco “engessado” e faltando uma preocupação com evolução do projeto.

A parte inicial (criar estrutura, instalar dependências, subir servidor e testar rota) está correta. Isso é o mínimo pra validar que o projeto roda. E sim, faz sentido commitar aí primeiro commit geralmente é algo como “setup inicial do projeto”.

Agora, o ponto mais importante: você não precisa (e nem deve) tentar replicar toda a complexidade do Java logo de cara.

Esse projeto em Java provavelmente tem:

  • múltiplas classes auxiliares
  • controle de estado
  • concorrência (threads)
  • abstrações mais pesadas

Se você tentar portar tudo direto, vai se perder.

O melhor caminho é exatamente esse que você sugeriu no final — começar com uma versão mínima funcional.

Comece assim, sem complicar:

  • rota recebe requisição
  • controller valida entrada (número, k, etc.)
  • chama o service
  • service retorna um resultado simples
  • controller devolve resposta

Isso já te dá um fluxo completo funcionando. E aqui entra um ponto importante: esse já é um commit.

Depois disso, você começa a evoluir aos poucos:

Primeiro evolui a regra de negócio (service).
Depois começa a extrair partes (ex: algo equivalente ao “Codification”).
Depois pensa em abstrações como Reader/Writer (se fizer sentido em Node).

Sobre threads: aqui tem um detalhe importante.

Java usa Thread, mas no Node.js isso não é equivalente direto.

Node é single-thread por padrão. Se você realmente precisar de paralelismo, aí sim você olha para:

  • worker_threads
  • filas (ex: BullMQ)
  • processamento assíncrono

Mas não tente encaixar “thread” só porque existe no Java isso é um erro comum.

Agora sobre commits, uma regra prática que funciona bem:

Faça commit quando:

  • algo passou a funcionar
  • você fechou uma pequena etapa lógica
  • o código está estável (mesmo que incompleto)

Exemplos no seu fluxo:

  • commit 1: setup inicial (express rodando)
  • commit 2: primeira rota funcionando
  • commit 3: controller + service integrados
  • commit 4: lógica inicial implementada
  • commit 5: refatoração (extração de módulos)

Sobre o Swagger: você não precisa colocar no começo.

Coloque quando:

  • você já tem pelo menos algumas rotas estáveis
  • o contrato da API não está mudando toda hora

Senão você vai ficar atualizando documentação o tempo todo sem necessidade.

Outra dúvida: eu fiz a rota "encode/golomb", com o controller e service. Fui fazer os testes do service logo em seguida, mas me deparei que as validações que verificam se o usuário passou certo as entradas está na camada do controller, o service está somente focado na lógica, ele já espera as estradas no formato correto. Mas acho que precisa colocar também as validações no service né? Mas se eu colocar vai ficar código duplicado de validação, a mesma validação no controller e no service. Então vendo com o ChatGPT, ele me deu a sugestão de criar:

  1. Finalizar teste do service com caso válido
  2. Commitar
  3. Criar ErroValidacao
  4. Criar validação compartilhada do Golomb
  5. Atualizar service para usar validação
  6. Criar middleware global de erro
  7. Atualizar controller para usar next(erro)
  8. Atualizar app.js para usar errorHandler
  9. Criar testes de erro do service
  10. Criar testes do controller
  11. Criar testes da rota/app com supertest
  12. Commitar de novo

Minha dúvida fica de quando commitar? Tipo tem muita coisa entre o passo 2 e 12 pra commitar. Tá certo isso? Ou devo inserir alguns commits no meio entre o 2 e 12? E se devo inserir alguns commits eu faço isso em tempo real ou somente depois de já ter feito tudo daí eu vou dando uns "add caminho_arquivo" e commits? O ChatGPT sugeriu assim mas nao sei se é bom, ele disse depois de já ter feito todos esses passos, fazer assim:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Link do github: https://github.com/Luidi1/AlgoritmosCompressao
Nome do commit: Primeiro teste de golombService.
Código do commit: c4a932f