API RESTful utilizando Node, Express, TypeScript, utilizando a arquitetura MSC (MODEL-SERVICE-CONTROLER), MySQL para armazenar os dados. Consiste em uma API de uma loja de itens medievais.
Para rodar está aplicação é necessário ter Git, Docker e o Docker Compose instalados no seu computador. O Docker Compose precisa estar na versão 1.29 ou superior.
git clone git@github.com:costalucs/medieval-store-api.gitdocker-compose up -d --buildConecte ao servidor MySQL rodando na porta 3306 usando um cliente MySQL de sua preferência. Utilize as seguintes credenciais:
- host:
db - user:
root - password:
password
Então, no cliente, rode o script que está no arquivo Trybesmith.sql.
docker exec -it trybesmith bashInstalando dependências:
npm installExecutando aplicação:
npm start1 - Endpoint para o cadastro de produtos:
- O endpoint está acessível através do caminho (
/products) com o método POST; - Os produtos enviados devem são salvos na tabela
Productsdo banco de dados; - O endpoint deve receber a seguinte estrutura:
{
"name": "Espada longa",
"amount": "30 peças de ouro"
}2 - Endpoint para a listagem de produtos:
- O endpoint deve ser acessível através do caminho (
/products) com o método GET; - O resultado retornado para listar produtos com sucesso deverá ser conforme exibido abaixo, com um status http
200:[ { "id": 1, "name": "Poção de cura", "amount": "20 gold", "orderId": null }, { "id": 2, "name": "Escudo do Herói", "amount": "100 diamond", "orderId": 1 } ]
3 - Endpoint para o cadastro de pessoas usuárias:
- O endpoint está acessível através do caminho (
/users) com o método POST; - O endpoint deve receber a seguinte estrutura:
{
"username": "MAX",
"classe": "swordsman",
"level": 10,
"password": "SavingPeople"
}4 - Endpoint para listar todos os pedidos:
- O endpoint está acessível através do caminho (
/orders) com o método GET. Endpoint para o login de pessoas usuárias:- Endpoint responsável por gerar um token.
- O endpoint deve ser acessível através do caminho (/login) com o método POST.
- O endpoint deve receber a seguinte estrutura:
{
"username": "string",
"password": "string"
}Além disso, as seguintes verificações serão feitas:
👉 Para caso haja problemas no login
-
[Será validado que o campo "username" é enviado]
- Se o login não tiver o campo "username", o resultado retornado deverá ser um status http
400e
{ "message": "\"username\" is required" } - Se o login não tiver o campo "username", o resultado retornado deverá ser um status http
-
[Será validado que o campo "password" é enviado]
- Se o login não tiver o campo "password", o resultado retornado deverá ser um status http
400
{ "message": "\"password\" is required" } - Se o login não tiver o campo "password", o resultado retornado deverá ser um status http
-
[Será validado que não é possível fazer login com um username inválido]
- Se o login tiver o username inválido, o resultado retornado deverá ser um status http
401e
{ "message": "Username or password invalid" } - Se o login tiver o username inválido, o resultado retornado deverá ser um status http
-
[Será validado que não é possível fazer login com uma senha inválida]
- Se o login tiver a senha inválida, o resultado retornado deverá ser um status http
401e
{ "message": "Username or password invalid" } - Se o login tiver a senha inválida, o resultado retornado deverá ser um status http
👉 Para caso os dados sejam enviados corretamente
- [Será validado que é possível fazer login com sucesso]
- Se o login foi feito com sucesso, o resultado deverá ser um status http
200e deverá retornar um token:
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" } - Se o login foi feito com sucesso, o resultado deverá ser um status http
5 - Endpoint para o cadastro de um pedido:
- O endpoint deve ser acessível através do caminho (
/orders) com o método POST; - Um pedido só pode ser criado caso a pessoa usuária esteja logada e o token
JWTvalidado; - O endpoint deve receber a seguinte estrutura:
{
"productsIds": [1, 2]
}