# Checklist Final

| Requisito                               | Status                 | Arquivos                                           | Como testar                           | Print/evidência                                 |
| --------------------------------------- | ---------------------- | -------------------------------------------------- | ------------------------------------- | ----------------------------------------------- |
| Node.js + Express                       | Implementado           | `src/app.js`, `src/server.js`                      | `npm start` e `/api/v1/health`        | `docs/assets/screenshots/02-dashboard.png`      |
| CommonJS                                | Implementado           | Arquivos em `src/`                                 | Conferir `require` e `module.exports` | Código-fonte                                    |
| Router em classes                       | Implementado           | `src/router/*.js`                                  | Conferir classes com `getRouter()`    | Código-fonte                                    |
| Controller em classes                   | Implementado           | `src/controller/*.js`                              | Conferir `extends IController`        | Código-fonte                                    |
| Service Layer                           | Implementado           | `src/service/*.js`                                 | Conferir `extends IService`           | Código-fonte                                    |
| DAO com prepared statements             | Implementado           | `src/dao/*.js`                                     | Conferir `pool.execute`               | Código-fonte                                    |
| Models com validações                   | Implementado           | `src/model/*.js`                                   | Enviar dados inválidos e ver erro 400 | `docs/assets/screenshots/03-livros.png`         |
| Interfaces IDAO, IController e IService | Implementado           | `src/interfaces/*.js`                              | Abrir contratos                       | Código-fonte                                    |
| Login com JWT                           | Implementado           | `AuthService`, `AuthController`, `auth_middleware` | POST `/api/v1/auth/login`             | `docs/assets/screenshots/01-login.png`          |
| Rotas privadas                          | Implementado           | `auth_middleware.js`                               | `/livros` sem token retorna 401       | Teste API                                       |
| Middleware de logs                      | Implementado           | `log_middleware.js`, `LogService`, `LogDAO`        | `npm run check:mongo` e tela Logs XML | `docs/assets/screenshots/09-logs-xml.png`       |
| Middleware de erro                      | Implementado           | `error_middleware.js`                              | Acessar rota inexistente              | Teste API                                       |
| Middleware de validação                 | Implementado           | `validation_middleware.js`                         | Criar autor inválido                  | Teste API                                       |
| Upload com multer                       | Implementado           | `upload_middleware.js`, `LivroController`          | Enviar capa PNG/JPG/JPEG/WEBP         | `docs/assets/screenshots/03-livros.png`         |
| CRUD autores                            | Implementado           | `Autor*` e `autores.html`                          | Tela Autores                          | `docs/assets/screenshots/05-autores.png`        |
| CRUD categorias                         | Implementado           | `Categoria*` e `categorias.html`                   | Tela Categorias                       | `docs/assets/screenshots/06-categorias.png`     |
| CRUD livros                             | Implementado           | `Livro*` e `livros.html`                           | Tela Livros                           | `docs/assets/screenshots/03-livros.png`         |
| Detalhes do livro                       | Implementado           | `livros.html`, `livros.js`, `LivroDAO`             | Botão Detalhes na tela Livros         | `docs/assets/screenshots/04-detalhes-livro.png` |
| Atalho Nova categoria em Livros         | Implementado           | `livros.html`, `livros.js`, `CategoriaController`  | Botão Nova categoria na tela Livros   | `docs/assets/screenshots/03-livros.png`         |
| Campos páginas, editora, ISBN e sinopse | Implementado           | `schema.sql`, `Livro*`, `livros.html`              | Criar/editar livro                    | `docs/assets/screenshots/03-livros.png`         |
| CRUD empréstimos                        | Implementado           | `Emprestimo*` e `emprestimos.html`                 | Tela Empréstimos                      | `docs/assets/screenshots/07-emprestimos.png`    |
| Pesquisa de livros                      | Implementado           | `LivroDAO.findAll`                                 | `/livros?busca=Hobbit`                | `docs/assets/screenshots/03-livros.png`         |
| MySQL com 6 tabelas                     | Implementado           | `database/schema.sql`                              | Importar schema                       | `docs/DER.png`                                  |
| Banco inicial com 30 livros             | Implementado           | `database/inserts.sql`                             | Importar inserts e listar livros      | `docs/assets/screenshots/03-livros.png`         |
| Relacionamento 1:N                      | Implementado           | FKs no schema                                      | Conferir DER                          | `docs/DER.png`                                  |
| Relacionamento N:N                      | Implementado           | `itens_emprestimo`                                 | Conferir DER                          | `docs/DER.png`                                  |
| Regras de estoque                       | Implementado           | `EmprestimoService`, `EmprestimoDAO`               | Criar/excluir empréstimo              | `docs/assets/screenshots/07-emprestimos.png`    |
| Importação JSON                         | Implementado           | `JsonService`, `JsonController`                    | Tela JSON                             | `docs/assets/screenshots/08-json.png`           |
| Exportação JSON                         | Implementado           | `JsonRouter`, `JsonController`                     | Exportar livros                       | `docs/assets/screenshots/08-json.png`           |
| Logs no MongoDB                         | Implementado e testado | `LogDAO`, `LogService`                             | `npm run check:mongo`                 | `docs/assets/screenshots/09-logs-xml.png`       |
| Exportação XML                          | Implementado e testado | `LogController`, `xml_helper`                      | Tela Logs XML                         | `docs/assets/screenshots/09-logs-xml.png`       |
| Relatório PDF                           | Implementado e testado | `relatorio.html`, `relatorio.js`                   | Gerar PDF                             | `docs/assets/screenshots/10-relatorio-pdf.png`  |
| Gráfico Chart.js                        | Implementado           | `dashboard.html`, `dashboard.js`                   | Dashboard                             | `docs/assets/screenshots/02-dashboard.png`      |
| Frontend HTML/CSS/JS puro               | Implementado           | `public/`                                          | Abrir telas                           | Screenshots                                     |
| Bootstrap 5 via CDN                     | Implementado           | HTML em `public/`                                  | Ver links CDN                         | Código-fonte                                    |
| Documentação                            | Implementado           | `README.md`, `docs/*.md`                           | Abrir docs                            | GitHub                                          |
| Licença MIT                             | Implementado           | `LICENSE`, `README.md`                             | Abrir arquivo LICENSE                 | GitHub                                          |
| GitHub Pages                            | Implementado           | `docs/index.html`                                  | Abrir página estática                 | `docs/index.html`                               |
| ZIP final                               | Implementado           | `biblioteca-geek-fullstack-final.zip`              | Conferir arquivo                      | Release                                         |
