Skip to content

Latest commit

 

History

History
224 lines (173 loc) · 7.08 KB

File metadata and controls

224 lines (173 loc) · 7.08 KB

Manage Library

Linguagem: JavaScript
Data: Agosto 2026
Status: ✅ Concluído
Publicado em: LinkedIn


📋 Descrição do Desafio

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.


🎯 Objetivo

  • ✅ Implementar a função manageLibrary() que gerencia operações de biblioteca
  • ✅ Criar estrutura de dados libraryData com 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

💻 Tecnologias Utilizadas

  • 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)

🚀 Como Executar

Pré-requisitos

  • Node.js instalado (versão 12 ou superior)

Instalação

# Verificar se Node.js está instalado
node --version

Uso

# Executar o arquivo diretamente
node ManageLibrary.js

Exemplo 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);

📚 O que Aprendi

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

📁 Estrutura do Projeto

manage-library/
├── manageLibrary.js                  # Código-fonte da solução
├── README.md                         # Este arquivo
└── assets/                           # Screenshots e exemplos
    ├── screenshot-code.png
    └── challenge-description.md

🎨 Funcionalidades Principais

Parte 1: Visão Geral

  • 🔹 printBooks - Retorna todos os livros da biblioteca
  • 🔹 printReaders - Retorna todos os leitores
  • 🔹 Default Case - Trata ações inválidas

Parte 2: Adição de Livros

  • 🔹 addBook - Adiciona novo livro com ID auto-gerado e valores padrão

Parte 3: Busca

  • 🔹 searchByTitle - Busca livros por título (insensível a maiúsculas)

Parte 4: Filtragem

  • 🔹 filterByGenre - Filtra livros por gênero exato

Parte 5: Marcação de Leitura

  • 🔹 markAsRead - Marca livro como lido com validação de rating (1-5)

💡 Possíveis Melhorias Futuras

  • Adicionar caso borrowBook para emprestar livros
  • Implementar caso returnBook com data de devolução
  • Criar função addReader para 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

📸 Exemplo Detalhado de Execução

// 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!"]
// ]

🔗 Referências


📌 Notas Adicionais

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