Skip to content

This project was developed with the goal of understanding how to use MongoDB and Express.

Notifications You must be signed in to change notification settings

Victor23HD/OliveiraBookstore

Repository files navigation

OliveiraBookstore / v2.0(BigBrother)

Esse projeto de estudo tem como objetivo a demonstração dos meus conhecimentos de Express e MongoDB Atlas. As próximas versões terão uma interface aprimorada para o usuário final.

Novidades da versão BigBrother

@_Controllers_utilizando_boas_praticas!

Ao estudar documentações, compreendi que, embora não seja tecnicamente incorreto, o uso de classes em JavaScript não é considerado uma boa prática. É recomendável evitar o uso de classes e adotar a abordagem mais tradicional de protótipos para a definição de objetos.

@_Adicionando_resiliência_na_API

Na versão Snowball, criei todas as contas utilizando o Path to Success. Na segunda versão, aprimorei o feedback para o usuário em caso de erros, incluindo tratamento de erros simples, como o retorno de um livro não encontrado.

@_Middleware_de_erro

No início do meu trabalho de tratamento de erros, eu percebi que poderia tratar erros de tipos que ocorrem em 2 modelos diferentes, reutilizando o código e, ao mesmo tempo, mantendo o código limpo e organizado.

@_Validação_de_dados

No início dos meus testes com banco de dados, percebi que era possível registrar livros ou autores passando um JSON completamente vazio. A partir desse momento, comecei a trabalhar na validação de dados para garantir que apenas informações relevantes e válidas fossem registradas no banco de dados.

@_Implementação_de_paginação

Ao pensar na experiência do usuário, comecei a considerar o padrão de visualização de produtos utilizado pelo mercado. Realizei estudos e iniciei o trabalho para tornar a experiência dos usuários da Livraria Oliveira mais familiar e agradável.


Instalação

Após a instalação do projeto, conecte o mongoose a uma coleção do MongoDB Atlas.

npm install

Conexão do MongoDB Atlas

Crie um arquivo .env no ./src crie uma variável MONGO_URL e passe uma string de conexão MongoDB Atlas, caso tenha alguma dúvida siga o vídeo abaixo.

https://www.youtube.com/watch?v=4nO0BERnkc0

Scripts

npm run dev

Este script executa o nodemon no arquivo server.js que inicia toda a aplicação possibilitando o live server.

API

Após executar o script npm run dev abra o Postman e teste as rotas abaixo!

index.js > bookRoute.js

bookRouter URL Descrição
GET http://localhost:3000/books { bookController.js > async listBooks() }
Lista todos os livros da coleção, populando o campo Author.
GET http://localhost:3000/books/find?publisher=publisherName { bookController.js > async findByPublisher() }
Lista todos os livros da coleção que contém a editora indicado.
POST http://localhost:3000/books { bookController.js > async registerBook() }
Registra o livro passado no body utilizando a Model.books como base.
PUT http://localhost:3000/books/:id { bookController.js > async updateBook() }
Atualiza livro passado na URL como "/id", utilizando o body.
DELETE http://localhost:3000/books/:id { bookController.js > async deleteBook() }
Deleta o livro passado na URL como "/id".

index.js > authorRoute.js

authorRouter URL Descrição
GET http://localhost:3000/authors { authorsController.js > async listAuthor() }
Lista todos os autores da coleção.
GET http://localhost:3000/authors/:id { authorsController.js > async listAuthorById() }
Lista o author do "/id" passado na URL.
POST http://localhost:3000/authors { authorsController.js > registerAuthor() }
Registra o autor passado no body utilizando a Model.authors como base.
PUT http://localhost:3000/authors/:id { authorsController.js > async updateAuthor() }
Atualiza autor passado na URL como "/id", utilizando o body.
DELETE http://localhost:3000/books/:id { authorsController.js > async deleteAuthor() }
Deleta o autor passado na URL como "/id".

Sobre o Projeto

Esse projeto foi desenvolvido com o objetivo de entender como utilizar o MongoDB e Express. A estrutura dos arquivos e códigos pode não estar perfeita, mas foi feito o melhor possível para que tudo funcione. Caso você tenha alguma sugestão, fique a vontade para abrir uma issue no repositório ou entre em contato através do meu LinkedIn: https://www.linkedin.com/in/victor23hd/

Tecnologias Utilizadas

  • Node.js
  • API Rest
  • Middleware de erros
  • Express fremework
  • MongoDB Atlas / Mongoose
  • Postman