Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

  1. Adicione uma coluna status à tabela events (valores possíveis: scheduled, cancelled, completed). Escreva a migration SQL. Qual tipo de coluna você usaria? Pesquise sobre VARCHAR com CHECK versus o tipo ENUM no PostgreSQL e justifique sua escolha.

  2. O seed data atual insere eventos com datas futuras. Adicione 3 eventos com datas no passado e status completed. Verifique que o SELECT retorna todos os 15 eventos com ORDER BY date ASC.

  3. Escreva uma query SQL que retorne apenas os eventos organizados pela Carla, mostrando título, local e data. Use WHERE com o nome dela (via JOIN), não com o id diretamente.

  4. O script migrate.ts atual falha se você rodá-lo duas vezes. Modifique as migrations para usar CREATE TABLE IF NOT EXISTS e teste que rodar o script duas vezes funciona sem erros.

  5. Modifique o events.repository.ts para que findAll aceite um parâmetro opcional organizerId. Quando presente, a query deve filtrar por organizer_id. Teste chamando curl com um query param (ex: GET /api/events?organizerId=2) — você vai precisar modificar o controller e o service para propagar o parâmetro.

  6. Adicione um endpoint GET /api/events/:id que retorna um único evento pelo seu id. 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.