Linguagem: JavaScript
Data: Agosto 2026
Status: ✅ Concluído
Publicado em: LinkedIn
Desenvolver um sistema completo de gerenciamento de biblioteca que permite organizar, buscar, filtrar e gerenciar livros e leitores. O sistema processa múltiplas ações sequencialmente, mantendo um estado consistente da biblioteca e retornando resultados detalhados para cada operação.
- ✅ Implementar a função
manageLibrary()que gerencia operações de biblioteca - ✅ Criar estrutura de dados
libraryDatacom livros e leitores - ✅ Implementar múltiplos casos (printBooks, printReaders, addBook, searchByTitle, filterByGenre, markAsRead)
- ✅ Validar dados de entrada (ratings, IDs, etc)
- ✅ Processar ações em sequência mantendo estado consistente
- ✅ Retornar array de resultados com mensagens e dados apropriados
- ✅ Praticar manipulação avançada de objetos, arrays e controle de fluxo em JavaScript
- Linguagem: JavaScript (ES6+)
- Estruturas: Switch/case, for loops, for...of loops
- Métodos: push(), includes(), toLowerCase(), filter(), find()
- Conceitos: Objetos aninhados, validação de dados, spread operator, estado mutável
- Runtime: Node.js (para execução em terminal)
- Node.js instalado (versão 12 ou superior)
# Verificar se Node.js está instalado
node --version# Executar o arquivo diretamente
node ManageLibrary.jsExemplo de interação:
const actions = ['printBooks', 'addBook', 'searchByTitle', 'filterByGenre', 'markAsRead'];
const data = [
null,
{ title: 'To Kill a Mockingbird', author: 'Harper Lee', year: 1960, genre: 'Fiction' },
'gatsby',
'Fiction',
{ bookId: 1, rating: 5 }
];
const results = manageLibrary(actions, data);
console.log(results);Este projeto consolidou conhecimentos avançados de JavaScript:
- ✅ Switch/Case Statements - Estruturação de múltiplos casos com break
- ✅ Objetos Aninhados - Manipulação de estruturas complexas
- ✅ String Methods - toLowerCase(), includes(), split()
- ✅ Array Methods - push(), for...of, find()
- ✅ Validação de Dados - Verificar ratings, IDs, strings
- ✅ Geração de IDs - Uso de length + 1 para criar IDs únicos
- ✅ Estado Mutável - Modificar estruturas de dados durante execução
- ✅ Tratamento de Erros - Mensagens apropriadas para diferentes cenários
Desafios enfrentados:
- Implementar corretamente a lógica de pesquisa insensível a maiúsculas
- Validar ratings entre 1 e 5 com múltiplas condições
- Manter estado consistente entre ações sequenciais
- Estruturar o retorno com arrays aninhados para diferentes tipos de dados
manage-library/
├── manageLibrary.js # Código-fonte da solução
├── README.md # Este arquivo
└── assets/ # Screenshots e exemplos
├── screenshot-code.png
└── challenge-description.md
- 🔹 printBooks - Retorna todos os livros da biblioteca
- 🔹 printReaders - Retorna todos os leitores
- 🔹 Default Case - Trata ações inválidas
- 🔹 addBook - Adiciona novo livro com ID auto-gerado e valores padrão
- 🔹 searchByTitle - Busca livros por título (insensível a maiúsculas)
- 🔹 filterByGenre - Filtra livros por gênero exato
- 🔹 markAsRead - Marca livro como lido com validação de rating (1-5)
- Adicionar caso
borrowBookpara emprestar livros - Implementar caso
returnBookcom data de devolução - Criar função
addReaderpara adicionar novos leitores - Adicionar busca por autor
- Implementar filtro por year (ano de publicação)
- Criar estatísticas (livros mais lidos, média de ratings)
- Persistência de dados (JSON file ou banco de dados)
- Interface web para gerenciar biblioteca
- Sistema de reservas de livros
- Histórico de empréstimos e devoluções
// Estrutura de dados inicial
const libraryData = {
books: [
{
id: 1,
title: "The Great Gatsby",
author: "F. Scott Fitzgerald",
year: 1925,
genre: "Fiction",
isRead: false,
rating: 0,
borrowed: false,
borrowedBy: "",
borrowDate: ""
}
],
readers: [
{
name: "John Smith",
favoriteGenre: "Fiction"
}
]
};
// Ações a processar
const actions = ['addBook', 'searchByTitle', 'markAsRead'];
const data = [
{ title: 'To Kill a Mockingbird', author: 'Harper Lee', year: 1960, genre: 'Fiction' },
'gatsby',
{ bookId: 1, rating: 5 }
];
// Processamento:
// 1. addBook: Adiciona novo livro com ID 2
// Resultado: "Book added successfully!"
// 2. searchByTitle: Busca por "gatsby" (insensível a maiúsculas)
// Resultado: Array com The Great Gatsby (título contém "gatsby")
// 3. markAsRead: Marca livro ID 1 como lido com rating 5
// Resultado: "Book marked as read!"
const results = manageLibrary(actions, data);
// [
// ["Book added successfully!"],
// [{ id: 1, title: "The Great Gatsby", ... }],
// ["Book marked as read!"]
// ]- MDN - Switch Statement
- MDN - String.prototype.toLowerCase()
- MDN - String.prototype.includes()
- MDN - Array.prototype.push()
- MDN - for...of Loop
- Coddy.tech - JavaScript Logic and Flow
Este é um projeto intermediário que demonstra competência em:
- Arquitetura de sistemas de gerenciamento de dados
- Processamento de múltiplas operações em sequência
- Validação e tratamento robusto de erros
- Manipulação complexa de estruturas de dados aninhadas
O conceito de gerenciador de biblioteca é aplicável em sistemas reais de:
- Bibliotecas públicas e universitárias
- Plataformas de empréstimo de livros
- Aplicativos de leitura e resenhas
- Sistemas de organização de acervo
A estrutura pode ser facilmente expandida com funcionalidades como sistema de empréstimos, histórico, classificações avançadas e integrações com APIs de livros.
Publicado originalmente em: LinkedIn - Agosto 2026