O TrybeSmith é uma API RESTful que simula o gerenciamento de uma loja de itens medievais. O projeto inclui operações de criação, leitura e atualização de informações, utilizando autenticação JWT para proteger algumas rotas. Além disso, testes foram desenvolvidos para garantir o correto funcionamento das funcionalidades implementadas.
Este projeto foi desenvolvido como parte do curso da Trybe, com o objetivo de consolidar conhecimentos sobre:
- Arquitetura em Camadas (MSC): Divisão do código em camadas de responsabilidade bem definidas.
- Autenticação com JWT: Proteção de rotas sensíveis com tokens.
- Testes Automatizados: Garantia de qualidade e funcionamento correto das camadas Service e Controller.
- Criação e Manipulação de Banco de Dados: Utilização de migrações e seeders para modelagem e preenchimento inicial.
-
Produtos:
- Cadastro de novos produtos.
- Listagem de todos os produtos.
- Validações para garantir a consistência dos dados.
-
Pedidos:
- Listagem de todos os pedidos registrados.
-
Login:
- Autenticação de usuários com JWT.
O projeto segue uma organização modular para facilitar a manutenção e a escalabilidade:
📁 __tests__/ # Testes unitários
├── assets/ # Mocks e utilitários para testes
├── 01-create-products.test.ts
├── 02-list-product.test.ts
├── 03-list-orders.test.ts
├── 04-login.test.ts
├── 05-product-validations.test.ts
└── 06-create-order.test.ts
📁 src/ # Código-fonte principal
├── controllers/ # Camada Controller
│ ├── login.controller.ts
│ ├── order.controller.ts
│ └── product.controller.ts
│
├── database/ # Configuração do banco de dados
│ ├── config/
│ │ └── database.ts # Conexão com o banco de dados
│ ├── migrations/ # Arquivos de migração
│ │ ├── 01-create-users.ts
│ │ ├── 02-create-orders.ts
│ │ └── 03-create-products.ts
│ ├── models/ # Arquivos das tabelas do banco de dados
│ │ ├── index.ts
│ │ ├── order.model.ts
│ │ ├── product.model.ts
│ │ └── user.model.ts
│ └── seeders/ # Dados iniciais (seeders)
│ ├── 1-users.ts
│ ├── 2-orders.ts
│ └── 3-products.ts
│
├── routers/ # Definição de rotas
│ ├── login.router.ts
│ ├── order.router.ts
│ └── product.router.ts
│
├── services/ # Camada Service
│ ├── login.service.ts
│ ├── order.service.ts
│ └── product.service.ts
│
├── types/ # Definição de tipos
│ ├── Order.ts
│ ├── Product.ts
│ ├── ServiceResponse.ts
│ ├── Token.ts
│ └── User.ts
│
├── utils/ # Funções utilitárias
│ ├── generateJWT.ts # Geração de tokens JWT
│ └── mapStatusHTTP.ts # Mapeamento de status HTTP
│
├── app.ts # Configuração da aplicação
└── server.ts # Inicialização do servidor
-
Clone este repositório:
git clone https://github.com/vicentevendramin/trybesmith.git cd trybesmith -
Instale as dependências:
npm install
-
Configure o banco de dados MySQL:
- Certifique-se de que o MySQL está instalado e rodando.
- Configure o arquivo
src/database/config/database.tscom as credenciais do seu banco.
-
Execute o servidor:
npm start
-
Para rodar os testes:
npm run test
- Node.js
- TypeScript
- Express.js
- MySQL
- JWT (Json Web Token)
- Mocha, Chai e Sinon (para testes)