Uma API para o gerenciamento de vendas de veículos, permitindo o cadastro, listagem, atualização e exclusão de usuários, clientes, carros (bem como a manipulação de itens relacionados a eles) e pedido.
As tecnologias e ferramentas utilizadas nesse projeto incluem:
Node.js - v20.17.0TypeScript - v5.6.3TS-Node: v10.9.2Express - v4.21.1MySQL2 - v3.11.3TypeORM - v0.3.20jsonwebtoken - v9.0.2bcryptjs - v2.4.3Swagger - v5.0.1dotenv - v16.4.5nodemon - v3.1.7UUID - v11.0.2ESLint: v9.13.0Prettier: v3.3.3Docker: v25.0.5
- CRUD de Usuários, Clientes, Carros e Pedidos: Cadastrar, listar, atualizar e excluir.
- Itens dos Carros: Gerenciamento de itens associados a cada carro.
- Paginação e Filtros: Listagens com suporte a paginação e filtros, em algumas rotas.
- Documentação: Documentação da API acessível via Swagger.
Para visualizar a documentação, acesse a rota: http://localhost:{suaPorta}/api/v1/api-docs
- Node.js instalado (versão 14 ou superior).
- MySQL instalado e rodando.
- Docker instalado e rodando.
-
Clone o Repositório:
git clone https://github.com/valentinaslacerda/AWS_NODE_SET24_DESAFIO_02_NODE_COM_PIMENTA
-
Instale as Dependências: Execute o seguinte comando para instalar as dependências do projeto:
npm install
-
Configuração do Banco de Dados: Crie um arquivo
.envna raiz do projeto e adicione as variáveis de ambiente necessárias. Um exemplo de configuração pode ser encontrado no arquivo.env.examplenesse repositório. -
Inicie os serviços com Docker e rode a aplicação: A aplicação utiliza Docker para gerenciar os serviços. Para iniciar a aplicação em modo de desenvolvimento com hot-reload, execute:
npm run dev
-
Acesse a API: A API estará disponível em
http://localhost:{suaPorta}/api/v1/. -
Rodar migrations: Rode as migrations com o comando:
npm run migration:run
-
Rodar os Seeds: Rode os seeds para inserir dados dentro do banco, incluindo um User Admin:
npm run seed:run
O User Admin inserido após rodar o seed apresenta como informações para login o seguinte:
{ "email": "[email protected]", "password": "123456" }
- POST /api/v1/login: Autenticar um usuário.
- POST /api/v1/user: Cadastrar um novo usuário (Usuários autenticados).
- GET /api/v1/user: Listar todos os usuários (Usuários autenticados).
- GET /api/v1/user/: Buscar um usuário pelo ID (Usuários autenticados).
- PATCH /api/v1/user/: Atualizar informações de um usuário (Usuários autenticados).
- DELETE /api/v1/user/: Excluir um usuário (Usuários autenticados).
- POST /api/v1/client: Cadastrar um novo cliente (Usuários autenticados).
- GET /api/v1/client: Listar todos os clientes (Usuários autenticados).
- GET /api/v1/client/: Buscar um cliente pelo ID (Usuários autenticados).
- PATCH /api/v1/client/: Atualizar informações de um cliente (Usuários autenticados).
- DELETE /api/v1/client/: Excluir um cliente (Usuários autenticados).
- POST /api/v1/cars: Cadastrar um carro (Usuários autenticados).
- GET /api/v1/cars: Listar todos os carros (Usuários autenticados).
- GET /api/v1/cars/{id}: Buscar um carro pelo ID (Usuários autenticados).
- PATCH /api/v1/cars/{id}: Atualizar um carro (Usuários autenticados).
- DELETE /api/v1/cars/{id}: Excluir um carro (Usuários autenticados).
- POST /api/v1/orders: Criar um novo pedido (Usuários autenticados).
- GET /api/v1/orders: Listar todos os pedidos (Usuários autenticados).
- GET /api/v1/orders/: Buscar um pedido pelo ID (Usuários autenticados).
- PUT /api/v1/orders/: Atualizar informações de um pedido (Usuários autenticados).
- DELETE /api/v1/orders/: Excluir um pedido (Usuários autenticados).
Obs: Algumas rotas, como as de cars, orders, user e cliets, requerem que o usuário esteja autenticado, para testá-las faça login na rota pública POST /api/v1/login e insira as informações do User Admin disponíveis após rodar o seed.
-
Endpoint:
POST /api/v1/user{ "full_name": "João Silva", "email": "[email protected]", "password": "senha123" } -
Endpoint:
PATCH /api/v1/user/{id}{ "full_name": "João Silva Atualizado", "email": "[email protected]", "password": "senha123" } -
Endpoint:
POST /api/v1/login{ "email": "[email protected]", "password": "senha123" } -
Endpoint:
POST /api/v1/client{ "name": "Maria Souza", "birthday": "1990-08-15", "email": "[email protected]", "phone": "123456789", "cpf": "78113959246" } -
Endpoint:
PATCH /api/v1/client/{id}{ "phone": "987654321" } -
Endpoint:
POST /api/v1/cars{ "plate": "ABC1234", "brand": "Tesla", "model": "Model S", "km": 20000, "year": 2021, "price": 800000, "status": "ativo", "items": [ "autopilot", "câmbio automático", "câmera de ré", "ar-condicionado" ] } -
Endpoint:
PATCH /api/v1/cars/{id}{ "price": 24000 } -
Endpoint:
POST /api/v1/orders{ "clientId": "123e4567-e89b-12d3-a456-426655440000", "carId": "22ed1a08-cfe8-4833-b8a0-945a0264beb6" }Obs: mude os
clientIdecarIdpor valores que sejam válidos em seu ambiente. -
Endpoint:
PUT /api/v1/orders/{id}{ "cep": "59650-000", "status": "Aprovado" }
.
├── src/
│ ├── application/
│ │ ├── params/
│ │ │ ├── ListCarsParams.type.ts
│ │ │ ├── ListClientParams.type.ts
│ │ │ └── ListUserParams.type.ts
│ │ ├── services/
│ │ │ ├── auth/
│ │ │ │ └── LoginService.ts
│ │ │ ├── car/
│ │ │ │ ├── CreateCarService.ts
│ │ │ │ ├── DeleteCarService.ts
│ │ │ │ ├── ListCarService.ts
│ │ │ │ ├── ShowCarService.ts
│ │ │ │ └── UpdateCarService.t
│ │ │ ├── client/
│ │ │ │ ├── CreateClientService.ts
│ │ │ │ ├── DeletClientService.ts
│ │ │ │ ├── ListClientService.ts
│ │ │ │ ├── ReadClientService.ts
│ │ │ │ └── UpdateClientService.ts
│ │ │ ├── order/
│ │ │ │ ├── CreateOrderService.ts
│ │ │ │ ├── DeleteOrderSerice.ts
│ │ │ │ ├── FindOrderService.ts
│ │ │ │ ├── ListOrderService.ts
│ │ │ │ └── UpdateOrderService.ts
│ │ │ ├── user/
│ │ │ │ ├── CreateUserSerice.ts
│ │ │ │ ├── DeleteUserService.ts
│ │ │ │ ├── LisUserService.ts
│ │ │ │ ├── SelectUserByIdService.ts
│ │ │ │ └── UpdateUserService.ts
│ ├── domain/
│ │ ├── entities/
│ │ │ ├── Car.ts
│ │ │ ├── CarItem.ts
│ │ │ ├── Client.ts
│ │ │ ├── Order.ts
│ │ │ └── User.ts
│ │ ├── repositories/
│ │ │ ├── CarRepository.ts
│ │ │ ├── ClientRepository.ts
│ │ │ ├── OrderRepository.ts
│ │ │ └── UserRepository.ts
│ ├── http/
│ │ ├── controller/
│ │ │ ├── AuthController.ts
│ │ │ ├── CarController.ts
│ │ │ ├── ClientController.ts
│ │ │ ├── OrderController.ts
│ │ │ └── UserController.ts
│ │ ├── dtos/
│ │ │ ├── CreateCar.dto.ts
│ │ │ ├── CreateClient.dto.ts
│ │ │ ├── CreateOrder.dto.ts
│ │ │ ├── CreateUser.dto.ts
│ │ │ ├── UpdateCar.dto.ts
│ │ │ ├── UpdateClient.dto.ts
│ │ │ ├── UpdateOrder.dto.ts
│ │ │ └── UpdateUser.dto.ts
│ │ ├── middleware/
│ │ │ └── Auth.ts
│ ├── infra/
│ │ ├── config/
│ │ ├── migrations/
│ │ ├── seeds/
│ │ ├── compose.yaml
│ │ └── data-source.ts
│ ├── routes/
│ │ └── route.ts
│ ├── index.ts
│ └── swagger.json
├── .editorconfig
├── .eslint.config.mjs
├── .gitignore
├── .nvmrc
├── .tsconfig.json
├── .prettierrc
├── package.json
├── README.md
└── .env.example