Este projeto é uma loja de itens medievais, no formato de uma API, utilizando Typescript..
Você irá desenvolver todas as camadas da aplicação (Models, Service e Controllers) em seu código e, por meio dessa aplicação, será possível realizar as operações básicas que se pode fazer em um determinado banco de dados: Criação, Leitura, Atualização e Exclusão (ou CRUD).
Criei alguns endpoints que irão ler e escrever em um banco de dados, utilizando o MySQL.
#vqv 🚀
- Projeto individual.
- Foram
2
dias de projeto.
A API foi construída utilizando as seguintes tecnologias:
- Typescript
- Node.js
- Express.js
- MySQL
- JWT
- ESLint
- Docker
Comandos
Antes de começar a instalação, verifique se você possui o Node.js e o MySQL instalados em sua máquina.- Dica: Para testar os endpoints recomendo usar a extensão Thunder Client
git clone https://github.com/lucascbb/trybesmith.git
cd trybesmith
npm install
docker-compose up -d
npm run posttest
e npm run restore
docker exec -it trybesmith bash
npm run dev
Scripts prontos
Diagrama de Entidade-Relacionamento

1 - Deleta o banco de dados: "drop": "npx sequelize-cli db:drop"
npm run drop
2 - Cria o banco e gera as tabelas:
npm run posttest
enpm run restore
3 - Container
docker exec -it trybesmith bash
**** 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
🪑 Tabelas
O banco terá três tabelas: pessoas usuárias, produtos e pedidos.
DROP SCHEMA IF EXISTS Trybesmith;
CREATE SCHEMA IF NOT EXISTS Trybesmith;
CREATE TABLE Trybesmith.users (
id INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL,
username TEXT NOT NULL,
vocation TEXT NOT NULL,
level INTEGER NOT NULL,
password TEXT NOT NULL
);
CREATE TABLE Trybesmith.orders (
id INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL,
user_id INTEGER,
FOREIGN KEY (user_id) REFERENCES Trybesmith.users (id)
);
CREATE TABLE Trybesmith.products (
id INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
amount TEXT NOT NULL,
order_id INTEGER,
FOREIGN KEY (order_id) REFERENCES Trybesmith.orders (id)
);
O arquivo Trybesmith.sql
contém as queries que criam e populam o banco como o teste faz, e os testes restauram o banco de dados após sua execução.
Para que o avaliador funcione corretamente, tanto local quanto remoto, sua connection.ts
não deve conter o database e suas queries devem conter o banco de dados explicitamente como o exemplo abaixo:
SELECT * FROM Trybesmith.products;
A API possui os seguintes endpoints:
-
post ->
/users
: Cadastro de pessoas usuárias;
Exemplo de como corpo da requisição deverá receber o formato:{ "username": "MAX", "vocation": "swordsman", "level": 10, "password": "SavingPeople" }
-
post ->
/login
: Fazer login com um usuario cadastrado, retorna um token;
Exemplo de como corpo da requisição deverá receber o formato:{ "username": "reigal", "password": "1dragaonoceu" }
-
get ->
/orders
: Retorna uma array com todos os pedidos; -
post ->
/orders
: Cadastro de pedido, atualiza tabela de produtos e acrscenta na tabela de pedidos;
Exemplo de como corpo da requisição deverá receber o formato:{ "productsIds": [1, 2] }
-
get ->
/products
: Retorna um array de todos os produtos; -
post ->
/products
: Cadastro de produtos;
Exemplo de como corpo da requisição deverá receber o formato:{ "name": "Espada longa", "amount": "30 peças de ouro" }