# Módulo 5 - Node.js, NestJS e APIs

## Identificação

- **Status:** concluído
- **Nível:** desenvolvimento back-end
- **Carga horária:** 16 horas
- **Formato sugerido:** 8 aulas de 2 horas
- **Projeto:** API REST documentada da Knowledge AI

## Propósito

Este módulo cria o back-end que receberá as requisições da aplicação Angular. O aluno
aprenderá a executar JavaScript e TypeScript no servidor, organizar uma aplicação
NestJS e publicar contratos HTTP claros antes de adicionar persistência MySQL.

## Competências

Ao final do módulo, o aluno será capaz de:

- explicar Node.js, npm, processo, servidor, porta e ambiente;
- diferenciar ambiente de execução, framework, API e banco de dados;
- criar uma aplicação NestJS em modo estrito;
- organizar módulos por capacidade de negócio;
- implementar controladores e provedores;
- aplicar injeção de dependência no back-end;
- modelar endpoints REST;
- criar DTOs e validar entradas em ambiente de execução;
- usar pipes e classes de validação;
- mapear erros para respostas HTTP seguras;
- carregar configuração por ambiente;
- documentar contratos com OpenAPI;
- produzir registros estruturados com correlação;
- testar unidades, controllers e endpoints;
- gerar um artefato executável da API.

## Sequência de aulas

| Aula | Tema | Produto da aula |
|---|---|---|
| [5.1](renderizadas/aula-01.html) | Introdução ao Node.js e NestJS | API com `GET /api/health` |
| [5.2](renderizadas/aula-02.html) | Módulos, controladores e provedores | Módulo de tarefas organizado |
| [5.3](renderizadas/aula-03.html) | REST, rotas e respostas HTTP | Endpoints de tarefas em memória |
| [5.4](renderizadas/aula-04.html) | DTOs, pipes e validação | Entradas validadas em ambiente de execução |
| [5.5](renderizadas/aula-05.html) | Erros, filtros e configuração | API configurável e respostas seguras |
| [5.6](renderizadas/aula-06.html) | OpenAPI e documentação | Contrato navegável da API |
| [5.7](renderizadas/aula-07.html) | Registros, interceptadores e testes | Observação e suíte essencial |
| [5.8](renderizadas/aula-08.html) | Compilação e projeto final | API REST documentada concluída |

## Projeto do módulo

A API da Knowledge AI deverá possuir:

- prefixo global `/api`;
- endpoint de saúde;
- módulo de tarefas;
- controladores sem regra de negócio concentrada;
- provedores injetáveis;
- DTOs por operação;
- validação global;
- respostas e status coerentes;
- tratamento seguro de erros;
- configuração por ambiente;
- registros estruturados;
- documentação OpenAPI;
- testes unitários e de integração;
- compilação de produção;
- README reproduzível.

Nesta etapa, os dados poderão permanecer em memória. MySQL e Prisma serão conectados
no Módulo 6, mantendo controllers e contratos HTTP independentes da persistência.

## Progressão técnica

```text
ambiente de execução Node.js
→ inicialização do NestJS
→ módulo, controlador e provedor
→ REST
→ DTO e validação
→ erros e configuração
→ OpenAPI
→ registros e testes
→ compilação da API
```

## Avaliação

| Critério | Pontos |
|---|---:|
| Arquitetura modular | 15 |
| Controladores e provedores | 15 |
| Contratos REST | 15 |
| DTOs e validação | 15 |
| Erros e configuração | 10 |
| OpenAPI | 10 |
| Registros e segurança | 10 |
| Testes e documentação | 10 |
| **Total** | **100** |

## Critérios de conclusão

- obter pelo menos 70 pontos;
- executar a API sem erros de compilação;
- não acessar MySQL diretamente pelo Angular;
- não concentrar todo o código no módulo raiz;
- validar dados externos em ambiente de execução;
- não expor stack trace ou segredo em respostas;
- possuir documentação e testes reproduzíveis;
- explicar o caminho completo de uma requisição.

## Fontes oficiais de referência

- [Node.js: introdução](https://nodejs.org/learn)
- [NestJS: primeiros passos](https://docs.nestjs.com/first-steps)
- [NestJS CLI](https://docs.nestjs.com/cli/overview)
- [Controllers](https://docs.nestjs.com/controllers)
- [Providers](https://docs.nestjs.com/providers)
- [Modules](https://docs.nestjs.com/modules)
- [OpenAPI](https://docs.nestjs.com/openapi/introduction)
- [Registros](https://docs.nestjs.com/techniques/logger)
- [Interceptadores](https://docs.nestjs.com/interceptors)
- [Testes](https://docs.nestjs.com/fundamentals/testing)
- [Publicação](https://docs.nestjs.com/deployment)
