PT-BR
Este projeto consiste em uma aplicação de uma loja de itens medievais, na qual é possível cadastrar produtos, usuários, realizar pedidos e autenticar usuários.
- Node;
- TypeScript;
- MySQL;
- Express;
- Docker;
- Clone o projeto:
git clone git@github.com:VictorMattV/trybesmith_project.git
; - Suba os containers:
docker-compose up -d
; - Execute o terminal do container:
docker exec -it trybesmith bash
; - Instale as dependências:
npm install
; - Inicialize a aplicação:
npm start
.
A seguir, estão descritos os endpoints da aplicação:
POST /products
Endpoint responsável pelo cadastro de produtos na loja.
{ "name": "Espada longa", "amount": "30 peças de ouro" }
{ "id": 1, "name": "Espada longa", "amount": "30 peças de ouro" }
GET /products
Endpoint responsável pela listagem de produtos na loja.
[ { "id": 1, "name": "Espada longa", "amount": "30 peças de ouro" }, { "id": 2, "name": "Poção de cura", "amount": "20 peças de ouro" } ]
POST /users
Endpoint responsável pelo cadastro de usuários na loja.
{ "username": "MAX", "classe": "swordsman", "level": 10, "password": "SavingPeople" }
{ "id": 1, "username": "MAX", "classe": "swordsman", "level": 10 }
POST /login
Endpoint responsável pela autenticação de usuários na loja.
{ "username": "MAX", "password": "SavingPeople" }
{ "token": "<jwt-token>" }
POST /orders
Endpoint responsável pelo cadastro de pedidos na loja.
{ "productsIds": [1, 2] }
{ "id": 1, "userId": 1, "productsIds": [1, 2] }
GET /orders
Endpoint responsável pela listagem de pedidos na loja.
[ { "id": 1, "userId": 1, "productsIds": [1, 2] }, { "id": 2, "userId": 2, "productsIds": [3, 4] } ]
Foram realizadas validações referentes à criação de produtos, a seguir descritas:
- O nome do produto deve ter no mínimo 3 caracteres e no máximo 50 caracteres.
- A quantidade deve ser informada no formato "X peças de ouro", em que X é um número inteiro maior que zero.
Foram realizadas validações referentes à criação de usuários, a seguir descritas:
- O nome de usuário deve ter no mínimo 3 caracteres e no máximo 20 caracteres.
- A classe deve ser uma das seguintes opções: "swordsman", "archer" ou "wizard". Caso contrário, deve retornar um erro com status 400 e a mensagem "Invalid user class".
Além disso, o campo "level" deve ser um número inteiro positivo maior ou igual a 1. Caso contrário, deve retornar um erro com status 400 e a mensagem "Invalid user level".
Por fim, o campo "password" deve ter no mínimo 8 caracteres e conter pelo menos uma letra maiúscula, uma letra minúscula e um número. Caso contrário, deve retornar um erro com status 400 e a mensagem "Invalid password".
EN
This project consists of an application for a medieval items store, in which it is possible to register products, users, place orders and authenticate users.
- Node;
- TypeScript;
- MySQL;
- Express;
- Docker;
- Clone the project:
git clone git@github.com:VictorMattV/trybesmith_project.git
; - Start the containers:
docker-compose up -d
; - Run the container terminal:
docker exec -it trybesmith bash
; - Install the dependencies:
npm install
; - Start the application:
npm start
.
The application endpoints are described below:
POST /products
Endpoint responsible for registering products in the store.
{ "name": "Long Sword", "amount": "30 gold pieces" }
{ "id": 1, "name": "Long Sword", "amount": "30 gold pieces" }
GET /products
Endpoint responsible for listing products in the store.
[ { "id": 1, "name": "Long Sword", "amount": "30 gold pieces" }, { "id": 2, "name": "Healing Potion", "amount": "20 gold pieces" } ]
POST /users
Endpoint responsible for registering users in the store.
{ "username": "MAX", "class": "swordsman", "level": 10, "password": "SavingPeople" }
{ "id": 1, "username": "MAX", "class": "swordsman", "level": 10 }
POST /login
Endpoint responsible for user authentication in the store.
{ "username": "MAX", "password": "SavingPeople" }
{ "token": "<jwt-token>" }
POST /orders
Endpoint responsible for registering orders in the store.
{ "productsIds": [1, 2] }
{ "id": 1, "userId": 1, "productsIds": [1, 2] }
GET /orders
Endpoint responsible for listing orders in the store.
[ { "id": 1, "userId": 1, "productsIds": [1, 2] }, { "id": 2, "userId": 2, "productsIds": [3, 4] } ]
Validations regarding the creation of products were performed, as described below:
- The product name must have a minimum of 3 characters and a maximum of 50 characters.
- The amount must be informed in the format "X gold pieces", where X is an integer greater than zero.
Validations regarding the creation of users were performed, as described below:
- The username must be a minimum of 3 characters and a maximum of 20 characters.
- The class must be one of the following options: "swordsman", "archer" or "wizard". Otherwise, it should return an error with status 400 and the message "Invalid user class".
In addition, the "level" field must be a positive integer greater than or equal to 1. Otherwise, it must return an error with status 400 and the message "Invalid user level".
Finally, the "password" field must be at least 8 characters long and contain at least one uppercase letter, one lowercase letter and one number. Otherwise, it should return an error with status 400 and the message "Invalid password".