Skip to content

Code Review — Segurança, Arquitetura e Boas Práticas#1

Open
MirandaSls wants to merge 1 commit into
mainfrom
review/code-review-activity
Open

Code Review — Segurança, Arquitetura e Boas Práticas#1
MirandaSls wants to merge 1 commit into
mainfrom
review/code-review-activity

Conversation

@MirandaSls

Copy link
Copy Markdown
Owner

Sobre esta revisão

Code review do projeto RevoAPP cobrindo 23 pontos organizados em 4 categorias: segurança crítica, arquitetura e padrões de projeto, bugs e semântica HTTP, e code smells de qualidade.

O arquivo CODE_REVIEW.md contém todos os comentários detalhados.


Resumo dos problemas encontrados

🔴 Segurança Crítica (5)

  1. Senha em texto purouser.ts:86 — sem hash (bcrypt/argon2)
  2. @ts-ignore mascarando bug de segurançauser.ts:130 — comparação de senha quebrada em runtime
  3. Log de credenciais em produçãouser.ts:69console.log(body) expõe email e senha
  4. URL hardcodeduser.ts:7 e event.ts:11 — deve vir de variável de ambiente
  5. Ausência de autenticação — qualquer cliente pode modificar dados de qualquer usuário

🟠 Arquitetura e Padrões de Projeto (6)

  1. Ausência de Service Layer — lógica de negócio misturada com handlers de rota (viola SRP)
  2. PrismaClient instanciado múltiplas vezes — deve ser Singleton compartilhado
  3. Violação do princípio DRYproductionURL duplicada em dois arquivos
  4. Sem tratamento de erros — nenhum try/catch nas rotas, crash em exceptions do banco
  5. Sem validação de input — campos do body usados sem validação (sugestão: zod)
  6. Padrão Repository ausente — acoplamento direto com Prisma em toda a aplicação

🟡 Bugs e HTTP Semântico (6)

  1. Status HTTP incorretosGET /event/ retorna 302 (redirect) em vez de 200
  2. Bug: forEach atribuído a variávelevent.ts:329goalId sempre undefined
  3. const reatribuídaLogin/index.js:24TypeError em runtime
  4. Comparação de resposta por string JSONLogin/index.js:13 — frágil e quebrável
  5. Date() sem newcreateEvent/index.js:14 — ignora o argumento, usa data atual
  6. Rotas GET com efeitos colaterais — convites e amizades criados via GET (violação RFC 7231)

🔵 Code Smells e Qualidade (6)

  1. Typos em nomes de modelosponsership, recevied, accepte_route, exixst
  2. Mensagens de erro em português e inglês misturadas
  3. Sem paginação em findMany — pode retornar milhares de registros
  4. console.log de debug em produçãouser.ts:454, event.ts:345
  5. XMLHttpRequest vs Fetch — inconsistência tecnológica no frontend
  6. indicadores.ts é código morto — funcionalidade idêntica a GET /user/, sem implementação real

Padrões de projeto sugeridos

  • Service Layer — separar lógica de negócio dos handlers de rota
  • Repository Pattern — desacoplar acesso ao banco da lógica de negócio
  • Singleton — instância única do PrismaClient
  • Middleware de autenticação JWT — proteger rotas autenticadas
  • Schema Validation com Zod — validar inputs na fronteira da aplicação

PR mantido aberto para avaliação do professor @joaopauloaramuni

Copilot AI review requested due to automatic review settings May 28, 2026 02:52

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a standalone CODE_REVIEW.md document to the repository to record a structured code review of RevoAPP, covering security, architecture/patterns, HTTP semantics/bugs, and general code quality findings.

Changes:

  • Introduces CODE_REVIEW.md with 23 review points grouped by category.
  • Includes suggested remediations and example snippets (bcrypt/JWT/env config/pagination/etc.).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread CODE_REVIEW.md
Comment on lines +65 to +68
**Sugestão:** Usar variável de ambiente:

```ts
const productionURL = process.env.BASE_URL ?? "http://localhost:3333"
Comment thread CODE_REVIEW.md
Comment on lines +81 to +89
export function authenticate(req, res, next) {
const token = req.headers.authorization?.split(" ")[1]
if (!token) return res.status(401).json({ message: "Não autenticado" })
try {
const payload = jwt.verify(token, process.env.JWT_SECRET)
req.userId = payload.sub
next()
} catch {
res.status(401).json({ message: "Token inválido" })
Comment thread CODE_REVIEW.md

### [9] Ausência de tratamento de erros (try/catch) — todas as rotas

**Problema:** Nenhuma rota possui `try/catch`. Se o banco de dados cair ou o Prisma lançar uma exceção inesperada, o Express não captura a promise rejeitada e o servidor derruba com `UnhandledPromiseRejection`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants