Este projeto é um sistema FullStack que implementa um pequeno e-commerce capaz de sincronizar produtos automaticamente da FakeStoreAPI, armazená-los em um banco MySQL por meio do Prisma ORM, disponibilizar endpoints REST e exibir os produtos no front-end construído em JavaScript puro com TailwindCSS.
- Node.js
- Express
- TypeScript
- Prisma ORM
- MySQL
- JavaScript (Vanilla)
- TailwindCSS
git clone https://github.com/AdrianousDev/Projeto-E-Commercenpm installExecute no seu SGBD:
CREATE SCHEMA ecommerce;- Crie um arquivo chamado .env na raiz do server-side.
- Preencha com suas credenciais a propriedade DATABASE_URL.
npm run dev- É recomendável nesse caso, abrir com a extensão Live Server do VScode. Mas fica a seu critério.
O projeto utiliza o Prisma ORM para gerenciar o banco de dados MySQL.
Modelos implementados:
- Cliente
- Produto
- Pedido
- ItemPedido
A estrutura pode ser encontrada no arquivo schema.prisma.
Para testes de endpoints, foi utilizado a ferramenta PostMan. Com criações de variáveis para armazenar o host e a criações de Collections para melhor organização.
- Usado para testar as rotas do servidor. Retorna ping: true se tu estiver certinho.
- Retorna todos os produtos armazenados no banco.
- Sugestão de melhoria: Adicionar paginação para diminuir tempo de request.
- Retorna um único produto da tabela Produto, com base no id passado.
- Sugestão de melhoria: Adicionar na response/consulta no banco, informações mais detalhadas sobre o produto.
- Retorna o produto criado.
- Necessita enviar um body em json no corpo na requisição com o dados do produto.
{
"titulo":"Título do Produto",
"descricao":"Descricao do produto",
"preco":50,
"categoria":"categoria",
"estoque":511
}- Deleta e retorna o produto da tabela Produto, com base no id passado.
- Cria um cliente, passando os dados via body da requisição.
{
"nome":"Nome de Usuário Teste",
"email":"usuario@teste.com"
}- Retorna a existencia ou não de um cliente com o email passado via params. No bd esse email é "unique".
- Consulta e retorna todos os campos da coluna categoria da tabela Produto
- OBS: Sem repetir valores
- Retorna todos os pedidos do cliente passando o EMAIL do usuário via params.
- Resposta um pouco complexa, mas muito completa.
- Cria pedido, sendo necessário enviar ID do cliente, com um array chamada "produtos" com ID do produto e quantidade deles.
{
"clienteId": 1,
"produtos": [
{ "id": 2, "quantidade": 1 },
{ "id": 5, "quantidade": 3 }
]
}- Deleta um pedido com base no id passado via params na url.
- Retorna se é possível fazer uma compra com determina quantidade de um produto.
- Sugestão de melhoria: Atualmente é preciso validar 1 produto de cada vez. Talvez seja melhor criar um array com base no carrinho e verificar a disponibilidade com um único request.
{
"produtoId":1,
"quantidade":9
}- Por estar usando JS puro no front end, queria centralizar alguns dados como por exemplo os endpoints.
- Então criei essa rota para que o backend padronize e forneça suas rotas via JSON em um get.