/trybesmith

Loja de itens medievais, no formato de uma API, utilizando Typescript.

Primary LanguageTypeScript

🗡 Projet Trybesmith

✏ Sobre o projeto

O objetivo do projeto, foi criar uma loja de itens medievais, no formato de uma API, utilizando Typescript!
A aplicação foi desenvolvida em Node.js e TypeScript, utilizando a arquitetura MSC - Model, Service, Controller -, juntamente a SQL para realizar o CRUD dos itens. Para realizar as validações de entrada, foi utilizados a biblioteca JOI e para a geração e autenticação de token foi utilizado o JSON Web Token - JWT.

📋 Execute o projeto em sua máquina

Clone o repositório:

git@github.com:BrunoPelegrino/trybesmith.git
🐳 Rodando no Docker vs Localmente

Com Docker

Rode os serviços node e db com o comando docker-compose up -d.

  • Lembre-se de parar o mysql se estiver usando localmente na porta padrão (3306), ou adapte, caso queira fazer uso da aplicação em containers
  • Esses serviços irão inicializar um container chamado trybesmith e outro chamado trybesmith_db.
  • A partir daqui você pode rodar o container trybesmith via CLI ou abri-lo no VS Code.

Use o comando docker exec -it trybesmith bash.

  • Ele te dará acesso ao terminal interativo do container criado pelo compose, que está rodando em segundo plano.

Instale as dependências [Caso existam] com npm install ⚠ Atenção ⚠ Caso opte por utilizar o Docker, TODOS os comandos disponíveis no package.json (npm start, npm test, npm run dev, ...) devem ser executados DENTRO do container, ou seja, no terminal que aparece após a execução do comando docker exec citado acima.

⚠ Atenção ⚠ O git dentro do container não vem configurado com suas credenciais. Ou faça os commits fora do container, ou configure as suas credenciais do git dentro do container.

⚠ Atenção ⚠ Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador.

⚠ Atenção ⚠ Caso você esteja usando macOS e ao executar o docker-compose up -d se depare com o seguinte erro:

The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services.db: 'platform'
Unsupported config option for services.node: 'platform'

Foram encontradas 2 possíveis soluções para este problema:

  1. Você pode adicionar manualmente a option platform: linux/amd64 no service do banco de dados no arquivo docker-compose.yml do projeto, mas essa é uma solução local e você deverá reproduzir isso para os outros projetos.
  2. Você pode adicionar manualmente nos arquivos .bashrc, .zshenv ou .zshrc do seu computador a linha export DOCKER_DEFAULT_PLATFORM=linux/amd64, essa é uma solução global. As soluções foram com base nesta fonte.

Dica: A extensão Remote - Containers (que estará na seção de extensões recomendadas do VS Code) é indicada para que você possa desenvolver sua aplicação no container Docker direto no VS Code, como você faz com seus arquivos locais.


Sem Docker

Instale as dependências [Caso existam] com npm install

⚠ Atenção ⚠ Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador.

Dica: Para rodar o projeto desta forma, obrigatoriamente você deve ter o node instalado em seu computador. ✨ Dica: O avaliador espera que a versão do node utilizada seja a 16.

👨🏻‍💻 Habilidades

  • Criar uma API RESTful utilizando a arquitetura MSC (Model-Service-Controller);
  • Utilizar o banco de dados com o MySQL.
  • Criar uma aplicação utilizando TypeScript
  • Validar dados das requisições com a biblioteca Joi.

🔎 Rotas

Login

POST /login
• Se o login for feito com sucesso retorna um token para o usuário.
• O endpoint deve receber a seguinte estrutura:
  {
    "username": "string",
    "password": "string"
  }

Product

POST /products
• Cadastra um novo produto.
• O endpoint deve receber a seguinte estrutura:
  {
    "name": "string",
    "amount": "string"
  }
GET /products
• Retorna todos os produtos do banco de dados.

User

POST /users
• Cadastra um novo usuário.
• O endpoint deve receber a seguinte estrutura:
{ 
  "username": "string",
  "classe": "string",
  "level": "number",
  "password": "string"
}

Order

GET /orders
• Retorna todos os pedidos e os ids dos produtos associados a estes.
POST /orders
• Cadastra novos pedidos.
• O pedido só é criado caso a pessoa usuária esteja logada e o token JWT validado.
• O endpoint deve receber a seguinte estrutura:
  {
    "productsIds": [1, 2]
  }

🛠️ Ferramentas & Metodologias Utilizadas


⌨️ desenvolvido por Bruno Pelegrino