Backend do projeto de E-commerce usando Node.js + Express, banco PostgreSQL no Neon e Prisma (ORM).
Arquitetura modular por feature com padrão: service → controller → routes.
- Entrypoint:
src/index.js→ chamasrc/server.js - Servidor:
src/server.js→app.listen(...) - App Express:
src/app/app.js→ middlewares + rotas + error handler - Rotas agregadas:
src/app/routes.js - Banco: Neon (Postgres) + Prisma (
prisma/schema.prisma) - Variáveis de ambiente:
src/.env(esrc/.env.example)
Exemplo de módulo já criado:
src/modules/coupons/
coupon.routes.jscoupon.controller.jscoupon.service.js
Cada pessoa deverá criar/seguir esse mesmo padrão para o seu módulo (CRUD com MOCK primeiro).
- Node.js 18+
- Express
- PostgreSQL (Neon)
- Prisma ORM
- (Fase 2) JWT + bcrypt (auth)
- (Fase 2) Swagger (documentação)
- (Fase 2) Jest + Supertest (testes)
- Node.js 18+ (ou 20+)
- Git
- Conta Neon (para o dono do repositório gerar o banco e a connection string)
- Postman/Insomnia (opcional) para testar endpoints
Este repositório é o repositório central (upstream).
Ninguém deve commitar diretamente na branch main do repo do dono.
✅ Fluxo correto:
- Fork do repositório
- Criar branch no seu fork
- Implementar e commitar no seu fork
- Abrir Pull Request (PR) para o repo´sitório inicial
- O líder revisa e faz MERGE
No GitHub do repo do líder:
- Clique em Fork (canto superior direito)
- Isso cria:
SEU_USUARIO/ecommerce-backend
git clone https://github.com/SEU_USUARIO/ecommerce-backend.git
cd ecommerce-backendgit remote add upstream https://github.com/DONO_DO_REPO/ecommerce-backend.git
git remote -v✅ Nunca desenvolver na main.
git checkout -b feature/NOME_DA_TAREFAExemplos:
feature/products-mock-create-readfeature/users-mock-create-readfeature/orders-mock-create-readfeature/reviews-mock-create-readfeature/coupons-mock-create-read
npm iO projeto carrega variáveis de ambiente de src/.env.
cp src/.env.example src/.envAbra src/.env e preencha:
PORTDATABASE_URL(quando for integrar com Neon)JWT_SECRET(quando ativar auth)
npm run devHealth check:
GET http://localhost:3000/api/health
- Dev:
npm run dev- Produção local:
npm start- Prisma (quando usando banco):
npm run prisma:generate
npm run prisma:migrateO dono cria o projeto no Neon e define a connection string oficial.
A string costuma ser assim:
postgresql://USER:PASSWORD@HOST/DB?sslmode=require
No src/.env:
DATABASE_URL="postgresql://....?sslmode=require"npm run prisma:generatenpm run prisma:migrateNesta primeira etapa (até segunda), o time pode trabalhar com MOCK sem precisar rodar migration.
A integração real com DB começa na terça.
Você deve copiar o padrão do módulo coupons.
Exemplo (módulo products):
Crie a pasta:
src/modules/products/
Crie os arquivos:
product.routes.jsproduct.controller.jsproduct.service.js
- routes: define endpoints (GET/POST/PUT/DELETE)
- controller: recebe req/res e chama o service
- service: regra de negócio (e mock/DB)
No src/app/routes.js, adicionar:
router.use("/products", productRoutes);Cada dev deve entregar CREATE + READ com MOCK, seguindo: service → controller → routes
✅ Mock = lista/array em memória (sem DB) + respostas JSON consistentes.
- Não depender do código de outros módulos
- Não travar implementação esperando “pedido depende de produto”
- Não implementar integrações profundas entre módulos
Na terça, o líder fará merge e iniciaremos a fase DB (Prisma/Neon) + validações/middlewares.
git add .
git commit -m "feat: create/read mock p/ products"git push origin feature/NOME_DA_TAREFANo GitHub do seu fork:
- Compare & pull request
- Base repo:
DONO_DO_REPO/ecommerce-backend - Base branch:
main - Head repo:
SEU_USUARIO/ecommerce-backend - Compare branch:
feature/NOME_DA_TAREFA
✅ O líder revisa e faz merge.
Depois que o líder fizer merge:
git checkout main
git fetch upstream
git merge upstream/main
git push origin mainfeat:nova funcionalidadefix:correçãochore:manutençãodocs:documentaçãotest:testes
GET /api/health→ status da API
Não. Até segunda você entrega CREATE + READ com MOCK sem banco.
Na terça, após o merge inicial, iremos:
- definir schema Prisma completo
- rodar migrations
- trocar mocks por DB