Conclusão
O TamoJunto agora tem um banco de dados com duas tabelas relacionadas, 12
eventos de teste e um endpoint HTTP que os serve como JSON. É pouco, mas é a
base sobre a qual tudo mais se constrói — o frontend que vamos criar no próximo
capítulo vai consumir exatamente essa resposta de GET /api/events.
Exercícios
-
Adicione uma coluna
statusà tabelaevents(valores possíveis:scheduled,cancelled,completed). Escreva a migration SQL. Qual tipo de coluna você usaria? Pesquise sobreVARCHARcomCHECKversus o tipoENUMno PostgreSQL e justifique sua escolha. -
O seed data atual insere eventos com datas futuras. Adicione 3 eventos com datas no passado e status
completed. Verifique que oSELECTretorna todos os 15 eventos comORDER BY date ASC. -
Escreva uma query SQL que retorne apenas os eventos organizados pela Carla, mostrando título, local e data. Use
WHEREcom o nome dela (via JOIN), não com oiddiretamente. -
O script
migrate.tsatual falha se você rodá-lo duas vezes. Modifique as migrations para usarCREATE TABLE IF NOT EXISTSe teste que rodar o script duas vezes funciona sem erros. -
Modifique o
events.repository.tspara quefindAllaceite um parâmetro opcionalorganizerId. Quando presente, a query deve filtrar pororganizer_id. Teste chamandocurlcom um query param (ex:GET /api/events?organizerId=2) — você vai precisar modificar o controller e o service para propagar o parâmetro. -
Adicione um endpoint
GET /api/events/:idque retorna um único evento pelo seuid. Se o evento não existir, retorne um erro 404 usando o formato{ error: { code, message } }. Implemente nas quatro camadas (route, controller, service, repository).
Referências
A documentação oficial do PostgreSQL é uma referência completa para tudo que envolve SQL e configuração do banco: https://www.postgresql.org/docs/current/.
Para a biblioteca pg (node-postgres), que usamos para conectar no banco a
partir do Node.js, a documentação está em
https://node-postgres.com/.
A documentação do Express sobre tratamento de erros explica os detalhes do middleware de quatro parâmetros: https://expressjs.com/en/guide/error-handling.html.