🧪 Desafio Prático: Catálogo de Livros (Backend JS)
🔰 Nível: Iniciante
💻 Stack: JavaScript (Node.js sem banco de dados)
🧠 Objetivo
Criar uma API simples para gerenciar um catálogo de livros — permitindo cadastrar, listar, editar e remover livros. Tudo usando apenas JavaScript puro no backend, sem banco de dados, com os dados armazenados em memória.
Esse desafio foi pensado para você aplicar lógica, funções modernas e boas práticas. E cuidado: tem uma pegadinha 👇
🐍 A Pegadinha
A propriedade anoPublicacao só pode aceitar valores a partir de 1441 (ano de invenção da imprensa).
❌ Você não pode usar:
if
switch
operadores como ? :, &&, ||
🧩 Dica: use filter, includes, funções booleanas criativas ou até estrutura de arrays.
✅ Requisitos obrigatórios
Estrutura de cada livro:
{
id: número, // gerado automaticamente
titulo: string,
autor: string,
anoPublicacao: número,
favorito: boolean (opcional)
}
Rotas esperadas:
Verbo Rota Descrição
GET /livros Listar todos os livros
GET /livros/:id Buscar livro pelo ID
POST /livros Cadastrar um novo livro
PUT /livros/:id Editar um livro existente
DELETE /livros/:id Remover um livro
🧩 Desafios Técnicos
🎯 Conceitos que devem estar no seu código:
arrow functions
closures (para gerar IDs únicos)
arrays e objetos
.map(), .filter(), .find()
async/await e Promises (simulando requisições)
try/catch com mensagens de erro
✅ Validação de anoPublicacao sem if
✨ Extras (opcional):
Criar rota GET /favoritos para listar apenas livros marcados como favoritos.
Criar campo usuarioCriador e simular múltiplos usuários.
Ordenar a lista por ano, autor ou título.
Adicionar um pequeno delay nas rotas (setTimeout) simulando carregamento real.
🚫 Restrições
Não use banco de dados.
Não use frameworks como Express, apenas Node.js puro ou bibliotecas auxiliares básicas.
Não copie código da internet. Ele não vai passar no teste automático se tiver if escondido! 😉
📦 Entrega
Suba o projeto em um repositório no GitHub com o nome: catalogo-livros-backend
Inclua um README.md com instruções de como rodar o projeto localmente
Envie o link para seu mentor ou pela plataforma do Hub
🔰 Nível: Iniciante
💻 Stack: JavaScript (Node.js sem banco de dados)
🧠 Objetivo
Criar uma API simples para gerenciar um catálogo de livros — permitindo cadastrar, listar, editar e remover livros. Tudo usando apenas JavaScript puro no backend, sem banco de dados, com os dados armazenados em memória.
Esse desafio foi pensado para você aplicar lógica, funções modernas e boas práticas. E cuidado: tem uma pegadinha 👇
🐍 A Pegadinha
A propriedade anoPublicacao só pode aceitar valores a partir de 1441 (ano de invenção da imprensa).
❌ Você não pode usar:
if
switch
operadores como ? :, &&, ||
🧩 Dica: use filter, includes, funções booleanas criativas ou até estrutura de arrays.
✅ Requisitos obrigatórios
Estrutura de cada livro:
{
id: número, // gerado automaticamente
titulo: string,
autor: string,
anoPublicacao: número,
favorito: boolean (opcional)
}
Rotas esperadas:
Verbo Rota Descrição
GET /livros Listar todos os livros
GET /livros/:id Buscar livro pelo ID
POST /livros Cadastrar um novo livro
PUT /livros/:id Editar um livro existente
DELETE /livros/:id Remover um livro
🧩 Desafios Técnicos
🎯 Conceitos que devem estar no seu código:
arrow functions
closures (para gerar IDs únicos)
arrays e objetos
.map(), .filter(), .find()
async/await e Promises (simulando requisições)
try/catch com mensagens de erro
✅ Validação de anoPublicacao sem if
✨ Extras (opcional):
Criar rota GET /favoritos para listar apenas livros marcados como favoritos.
Criar campo usuarioCriador e simular múltiplos usuários.
Ordenar a lista por ano, autor ou título.
Adicionar um pequeno delay nas rotas (setTimeout) simulando carregamento real.
🚫 Restrições
Não use banco de dados.
Não use frameworks como Express, apenas Node.js puro ou bibliotecas auxiliares básicas.
Não copie código da internet. Ele não vai passar no teste automático se tiver if escondido! 😉
📦 Entrega
Suba o projeto em um repositório no GitHub com o nome: catalogo-livros-backend
Inclua um README.md com instruções de como rodar o projeto localmente
Envie o link para seu mentor ou pela plataforma do Hub