Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marco0antonio0/e-commerce_back-end
Back-end Dirrocha Ecommerce
https://github.com/marco0antonio0/e-commerce_back-end
Last synced: about 1 month ago
JSON representation
Back-end Dirrocha Ecommerce
- Host: GitHub
- URL: https://github.com/marco0antonio0/e-commerce_back-end
- Owner: marco0antonio0
- Created: 2024-08-08T16:34:02.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-08-18T17:21:05.000Z (4 months ago)
- Last Synced: 2024-10-13T04:26:38.417Z (2 months ago)
- Language: TypeScript
- Size: 1.03 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.MD
Awesome Lists containing this project
README
# Back-End E-commerce
![img](imageReadme/uwu.png)
Este projeto é uma aplicação de e-commerce desenvolvida para o teste tecnico. O back-end foi construído utilizando NestJS e inclui funcionalidades de autenticação, gerenciamento de carrinho e integração com APIs de fornecedores para listar produtos.
### Acesso aos Endpoints
- [Acesso Endpoints web](https://e-commerce-api.dirrocha.com/api-docs)
- [Acesso phpMyAdmin web](https://e-commerce-php.dirrocha.com/)
- [Acesso Swagger docs web](https://e-commerce-api.dirrocha.com/api-docs)### Índice Rápido
- [Estrutura do Projeto](#estrutura-do-projeto)
- [Documentação dos Endpoints](#documentação-dos-endpoints)
- [Como Acessar a Documentação Swagger](#acessando-a-documentação-da-api)
- [Passos para Configuração](#passos-para-configuração)## Visão Geral do Projeto
Este back-end foi desenvolvido como parte de um desafio técnico para a construção de um sistema de e-commerce. A aplicação lida com funcionalidades cruciais, como a autenticação de usuários, o gerenciamento de carrinho de compras, e a integração com APIs de fornecedores para a listagem de produtos.
### Decisões de Desenvolvimento
![img](imageReadme/1689705931627.jpeg)
- **Escolha do NestJS**: O NestJS foi escolhido devido à sua estrutura modular e à facilidade com que permite escalar aplicações Node.js. O uso de TypeScript garantiu tipagem estática, o que melhora a qualidade do código e reduz erros em tempo de execução.
- **Integração com APIs de Fornecedores**: A integração com APIs de fornecedores externos foi projetada para ser eficiente e segura. A aplicação consome dados de produtos dessas APIs e os disponibiliza aos usuários finais.
- **Autenticação JWT**: Implementou-se a autenticação via JWT (JSON Web Token) para garantir a segurança das sessões dos usuários, mantendo os dados protegidos.
- **Persistência de Dados com Sequelize**: Para a camada de persistência, foi utilizado o Sequelize como ORM, o que facilita a interação com o banco de dados e garante a portabilidade do código.
```env
DB_ROOT_USER='root'
DB_PASSWORD='your_password'
DB_DATABASE='empreendimento'
SECRET_KEY='your_env'
PROD='false'
```4. **Inicie o servidor:**
```sh
npm run start
```5. **Acesse a documentação da API:**
- A documentação do Swagger estará disponível em### Estrutura do Projeto
```plaintext
├── src/
│ ├── auth/
│ │ ├── models/
│ │ │ └── token.dto.ts
│ │ ├── services/
│ │ │ ├── abstract-auth.service.ts
│ │ │ └── auth.service.ts
│ │ └── auth.module.ts
│ │
│ ├── config/
│ │ └── databasse.config.ts
│ │
│ ├── guard/
│ │ └── jwt-auth.guard.ts
│ │
│ ├── cart/
│ │ ├── controllers/
│ │ │ └── cart.controller.ts
│ │ ├── models/
│ │ │ └── cart.dto.ts
│ │ ├── repositories/
│ │ │ ├── entity/
│ │ │ │ └── cart.entity.ts
│ │ │ ├── abstract-repository-cart.service.ts
│ │ │ └── repository-cart.service.ts
│ │ ├── services/
│ │ │ ├── cart.service.ts
│ │ │ └── abstract-cart.service.ts
│ │ └── cart.module.ts
│ │
│ ├── products/
│ │ ├── controllers/
│ │ │ └── products.controller.ts
│ │ ├── services/
│ │ │ ├── abstract-products.service.ts
│ │ │ └── products.service.ts
│ │ └── products.module.ts
│ │
│ └── user/
│ ├── controllers/
│ │ └── user.controller.ts
│ ├── models/
│ │ ├── user-models.dto.ts
│ │ └── user.dto.ts
│ ├── repositories/
│ │ ├── entity/
│ │ │ └── user.entity.ts
│ │ ├── abstract-repository-user.service.ts
│ │ └── repository-user.service.ts
│ ├── services/
│ │ ├── user.service.ts
│ │ └── abstract-user.service.ts
│ └── user.module.ts
│
├── app.module.ts
├── main.ts
├── test/
├── docker-compose.yml
├── .env
├── .eslintrc.js
├── .gitignore
├── .prettierrc
└── .swcrc
```# Documentação dos Endpoints
![img](imageReadme/1_aKVg84SP5oPV9fwOnbl6yQ.png)
- [Acesso Swagger docs web online](https://e-commerce-api.dirrocha.com/api-docs)
## UserController
### POST /user/login
#### Descrição
Autenticação de usuário.
#### Request Body
```json
{
"email": "[email protected]",
"password": "password123"
}
```#### Respostas
- **200 OK**: Login bem-sucedido.
```json
{
"token": "jwt_token"
}
```- **401 Unauthorized**: Credenciais inválidas.
### POST /user/register
#### Descrição
Registro de um novo usuário.
#### Request Body
```json
{
"name": "John Doe",
"email": "[email protected]",
"password": "password123"
}
```#### Respostas
- **201 Created**: Registro bem-sucedido.
```json
{
"token": "jwt_token"
}
```### POST /user/check-token
#### Descrição
Validação da chave de autenticação de usuário.
#### Request Body
```json
{
"token": "asdasdasodnoi ...",
}
```#### Respostas
- **200 OK**: Login bem-sucedido.
```json
{
"data": {...}
}
```- **401 Unauthorized**: Credenciais inválidas.
## ProductsController
### GET /products
#### Descrição
Recupera todos os produtos.
#### Respostas
- **200 OK**: Lista de todos os produtos.
```json
[
{
"id": "1",
"name": "Product 1",
"description": "This is product 1",
"price": 100
},
{
"id": "2",
"name": "Product 2",
"description": "This is product 2",
"price": 200
}
]
```### GET /products/:provider/:id
#### Descrição
Recupera um produto pelo ID e o Provide do produto.
#### Parâmetros
- `id`: ID do produto.
- `provider`: provedor do produto.#### Respostas
- **200 OK**: Produto especificado recebido.
```json
{
"id": "1",
"name": "Product 1",
"provider": "Brazilian",
"description": "This is product 1",
"price": 100
...
}
```- **404 Not Found**: Produto não encontrado.
### GET /products/search?name=queryName
#### Descrição
Recupera um produto pelo nome. Utiliza da biblioteca fuzy.js para fazer comparativos e logica fuzy para trazer a melhor correspondencia com base no nome
#### Parâmetros
- `name`: Nome do produto.
#### Respostas
- **200 OK**: Produto com o ID especificado.
```json
[
{
"id": "1",
"name": "Product 1",
"provider": "Brazilian",
"description": "This is product 1",
"price": 100
...
}
]
```- **404 Not Found**: Produto não encontrado.
## CartController
### POST /cart
#### Descrição
Adiciona um item ao carrinho.
#### Request Body
```json
{
"productId": "1",
"quantity": 1
}
```#### Respostas
- **201 Created**: Item adicionado ao carrinho com sucesso.
```json
{
"id": "1",
"productId": "1",
"quantity": 1,
"userEmail": "[email protected]"
}
```- **401 Unauthorized**: Campo de e-mail não pode ser nulo.
### GET /cart
#### Descrição
Recupera todos os itens no carrinho.
#### Respostas
- **200 OK**: Itens do carrinho recuperados com sucesso.
```json
[
{
"id": "1",
"productId": "1",
"quantity": 1,
"userEmail": "[email protected]"
},
{
"id": "2",
"productId": "2",
"quantity": 2,
"userEmail": "[email protected]"
}
]
```- **401 Unauthorized**: Não autorizado.
### GET /cart/purchased
#### Descrição
Recupera todos os itens no carrinho que ja foram comprados pelo cliente.
#### Respostas
- **200 OK**: Itens do carrinho recuperados com sucesso.
```json
[
{
"id": "1",
"productId": "1",
"quantity": 1,
"userEmail": "[email protected]"
},
{
"id": "2",
"productId": "2",
"quantity": 2,
"userEmail": "[email protected]"
}
]
```- **401 Unauthorized**: Não autorizado.
### PATCH /cart/:productId
#### Descrição
Atualiza um item no carrinho.
#### Parâmetros
- `productId`: ID do produto.
#### Request Body
```json
{
"quantity": 2
}
```#### Respostas
- **200 OK**: Item do carrinho atualizado com sucesso.
```json
{
"id": "1",
"productId": "1",
"quantity": 2,
"userEmail": "[email protected]"
}
```- **401 Unauthorized**: Campo de e-mail não pode ser nulo.
### DELETE /cart/:productId
#### Descrição
Remove um item do carrinho.
#### Parâmetros
- `productId`: ID do produto.
#### Respostas
- **204 No Content**: Item do carrinho removido com sucesso.
- **401 Unauthorized**: Não autorizado.### DELETE /cart/clear
#### Descrição
Limpa todos os itens do carrinho.
#### Respostas
- **204 No Content**: Carrinho limpo com sucesso.
- **401 Unauthorized**: Não autorizado.### POST /cart/finalize
#### Descrição
Finaliza a compra.
#### Respostas
- **200 OK**: Compra finalizada com sucesso.
- **401 Unauthorized**: Não autorizado.# Acessando a Documentação da API
Para acessar a documentação interativa da API, você pode utilizar o Swagger. A documentação estará disponível em:
```
http://localhost:3000/api-docs
```A partir dessa URL, você poderá explorar e testar os endpoints da API de maneira intuitiva.