Projeto em Andamento! Este projeto foi criado usando Node 20.15.0
Este projeto é uma API para gerenciamento de uma livraria, desenvolvida com Node.js. A API permite o cadastro, atualização, exclusão e consulta de livros, além de gerenciar autores. O objetivo é servir como base para projetos de APIs RESTful com boas práticas, fácil manutenção e escalabilidade.
- Criação de Livros: Permite adicionar livros com detalhes como título, editora, número de páginas e autor. Além disso, valida se os campos obrigatórios estão preenchidos e garante que os dados inseridos estão dentro das faixas de valores permitidas (ex: número de páginas).
- Leitura de Livros: Implementa filtros de busca para exibir livros por autor, título ou editora. Permite paginação e ordenação para facilitar a navegação em grandes volumes de dados.
- Atualização de Livros: Permite a atualização dos campos de um livro já existente, garantindo que o livro existe antes de permitir qualquer modificação. Também deve há uma verificação para garantir que os dados sejam válidos antes de salvar as alterações.
- Deleção de Livros: Permite a remoção de livros, e adiciona uma verificação para garantir que o livro esteja relacionado a um autor e não esteja sendo utilizado em outras funcionalidades (por exemplo, exclusão de registros dependentes).
- Criação de Autores: Permite que os dados dos autores sejam inseridos corretamente, validando campos como o nome do autor e a nacionalidade.
- Leitura de Autores: Implementa a busca por autor sem a opção de filtros
- Atualização de Autores: Fornece a capacidade de atualizar dados do autor, como nome e nacionalidade. Como o autor pode estar vinculado a livros, garante que as alterações não afetem negativamente esses relacionamentos.
- Deleção de Autores: Implementa a exclusão segura dos autores, considerando que a exclusão de um autor deve afetar todos os livros relacionados a ele.
- Criação de Roles: Permiti que os administradores criem papéis (roles) com permissões específicas (leitura, escrita, atualização e exclusão de livros ou autores, por exemplo). Além disso, garante que os papéis tenham descrições claras e objetivas para fácil identificação.
- Atribuição de Permissões: Associa permissões aos papéis de maneira flexível, permitindo a modificação das permissões conforme as necessidades da equipe. Isso inclui a criação de permissões para acessar ou modificar dados de livros e autores, ou outras funcionalidades do sistema.
- Conexão Segura com MongoDB: Configura a conexão com o MongoDB de forma segura utilizando variáveis de ambiente e boas práticas de configuração. Implementa uma conexão robusta que seja capaz de lidar com falhas e reinicializações de forma eficiente.
- Estruturação do Banco de Dados: Define esquemas e relações de dados (por exemplo, um autor pode ter múltiplos livros, e cada livro pode ter múltiplos usuários). Além disso, garantir que as referências entre coleções (como entre
livros,autoreseroles) sejam bem estruturadas e normalizadas. - Validação e Sanitização de Dados: Utiliza a validação de dados do Mongoose para garantir que os dados inseridos no banco de dados sejam válidos (como validadores de e-mail, string, número de páginas, etc.). Além disso, implementar a sanitização de entradas para evitar injeções de código ou dados maliciosos.
-
Autenticação e Autorização: Garante que apenas usuários com permissões adequadas possam acessar ou modificar os dados dos livros, autores e papéis. Isso é feito usando autenticação baseada em JWT (JSON Web Tokens) e middleware de autorização.
-
API RESTful: Cria APIs RESTful com endpoints claros e bem definidos para todas as operações (CRUD). Utiliza boas práticas de versionamento de API e garante que as respostas sejam padronizadas e contenham informações suficientes (como status codes adequados).
- Node.js: Ambiente de execução para JavaScript no servidor.
- Express: Framework web para criação de rotas e gerenciamento da API.
- MongoDB: Banco de dados NoSQL utilizado para armazenar informações sobre livros, autores e categorias.
- Mongoose: ODM (Object Data Modeling) para interação com o MongoDB.
- Dotenv: Gerenciamento de variáveis de ambiente, como chaves secretas e URLs de banco de dados.
- Nodemon: Ferramenta de desenvolvimento que reinicia automaticamente o servidor quando alterações são detectadas.
- Swagger: Biblioteca Open Api 3 que gera a documentação dos endpoints do projeto.
- Bcryptjs: Biblioteca para criptografia de senhas.
- Jsonwebtoken (JWT): Biblioteca para implementação de autenticação baseada em tokens JSON.
erDiagram
AUTOR {
String nome
String nacionalidade
}
LIVRO {
String titulo
String editora
Number paginas
}
PERMISSAO {
String nome
String descricao
}
PAPEL {
String nome
String descricao
}
USUARIO {
String nome
String email
String senha
}
AUTOR ||--o{ LIVRO : escreve
LIVRO }|--|| AUTOR : "escrito por"
PAPEL ||--o{ USUARIO : "tem"
USUARIO }|--o{ PAPEL : "pertence"
PERMISSAO ||--o{ PAPEL : "concedido para"
PAPEL }|--o{ PERMISSAO : "contém"
Para iniciar a aplicação execute a seguinte ação na pasta raiz
Instale as dependências do npm com o comando:
npm installPara iniciar a aplicação execute a seguinte ação na pasta raiz
npm run devConsultar documentação da Api:
http://localhost:3000/api-docsCom o Docker configurado, você pode rodar o projeto de maneira rápida e prática. Esta opção é uma alternativa para o passo anterior. Siga as instruções abaixo:
O projeto já está preparado para ser executado com Docker Compose. Para iniciar, execute o seguinte comando na raiz do projeto:
docker-compose up --buildEste comando irá:
- Construir a imagem do Docker.
- Iniciar o container com sua aplicação.
Após iniciar o Docker Compose, você pode acessar a API no seguinte endereço:
API: http://localhost:3000
Quando não precisar mais do ambiente em execução, use o comando abaixo para parar e remover os containers:
docker-compose down
Se precisar acessar o shell do container para depuração ou execução de comandos, use:
docker exec -it <container_id> sh
Dica: Você pode obter o <container_id> executando docker ps e localizando o ID do container correspondente.
Thallyta Macedo Carvalho de Castro
Linkedin: https://www.linkedin.com/in/thallyta-castro/
Medium: https://medium.com/@thallyta-castro-cv
email: thallytacastro.dev@gmail.com