https://github.com/igorbrizack/trybesmithts-api
API MSC utilizando TypeScript
https://github.com/igorbrizack/trybesmithts-api
api-rest docker javascript joi-validation jwt-authentication msc mysql nodejs typescript
Last synced: 3 months ago
JSON representation
API MSC utilizando TypeScript
- Host: GitHub
- URL: https://github.com/igorbrizack/trybesmithts-api
- Owner: IgorBrizack
- Created: 2022-10-09T11:59:54.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-10-09T12:53:08.000Z (over 3 years ago)
- Last Synced: 2025-03-21T20:22:45.119Z (over 1 year ago)
- Topics: api-rest, docker, javascript, joi-validation, jwt-authentication, msc, mysql, nodejs, typescript
- Language: TypeScript
- Homepage:
- Size: 178 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 📝 Projeto TrybeSmith Api
## 📄 Sobre
Foi desenvolvido uma API RESTful que interage com um banco de dados SQL e para desenvolvimento foi utilizado como linguagem o TypeScript!
## 📋 Execute o projeto em sua máquina
Clone o repositório:
```
git@github.com:IgorBrizack/TrybeSmithTS-Api.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:
~~~bash
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](https://stackoverflow.com/a/69636473).
✨ **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.
## 👨🏻💻 Habilidades
- Endpoints que estão conectados com o banco de dados seguindo os princípios do REST;
- Criar uma API RESTful utilizando a arquitetura MSC (Model-Service-Controller);
- Aplicação Back-end em Node.js;
- Desenvolver aplicação utilizando o 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:
```json
{
"username": "string",
"password": "string"
}
```
### User
POST /user
• Cadastra um novo usuário, permitindo apenas um email válido, gerando um token.
• O endpoint deve receber a seguinte estrutura:
```json
{
"username": "MAX",
"classe": "swordsman",
"level": 10,
"password": "SavingPeople"
}
```
GET /user
• Traz todos users do banco de dados.
• Valida o token - req.authorization.
### Login
POST /Login
• Faz o login caso encontre um úsuario e senha válidos.
• Retorna um token, caso seja feito o login..
• O endpoint deve receber a seguinte estrutura:
```json
{
"username": "string",
"password": "string"
}
```
### Products
GET /products
• Traz todos os produtos encontrado no banco de dados.
POST /products
• Inseri um produto ao banco de dados.
• O endpoint deve receber a seguinte estrutura:
```json
{
"name": "Espada longa",
"amount": "30 peças de ouro"
}
```
### Orders
GET /orders
• Traz todas as ordens encontradas no banco de dados.
POST /orders
• Inseri uma nova ordem ao banco de dados.
• O endpoint deve receber a seguinte estrutura:
```json
{
"productsIds": [1, 2]
}
```
## 🛠️ Ferramentas & Metodologias Utilizadas
- [Node.js](https://nodejs.org/en/);
- [Express.js](https://expressjs.com/);
- [MYSQL](https://www.mysql.com/);
- [SQL](https://www.w3schools.com/sql/);
- [mysql2](https://www.npmjs.com/package/mysql2);
- [JWT(Autenticação)](https://jwt.io/);
- [Joi](https://joi.dev/api/?v=17.6.0);
- [Docker](https://www.docker.com/);
- JavaScript ES6+;
- [TypeScript](https://www.typescriptlang.org/);
---
⌨️ desenvolvido por [Igor Brizack](https://www.linkedin.com/in/igor-brizack/) 😄