Loading repository data…
Loading repository data…
robert1a7x / repository
Neste projeto foi desenvolvida uma API RESTful utilizando a arquitetura MSC, em conjunto com o ORM Sequelize. A API trata-se de um sistema de gerenciamento de uma loja de produtos.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Desafio técnico da Voll Solutions.
Neste projeto foi desenvolvida uma API RESTful utilizando a arquitetura MSC, em conjunto com o ORM Sequelize.
A API trata-se de um sistema de gerenciamento de uma loja de produtos , onde é possível, utilizando o CRUD, gerenciar produtos e usuários. Também possui uma rota de login, feita utilizando a biblioteca JSON Web Token para gerenciar o login e atividades dos usuários no site da loja.
com as rotas será possível:
Desenvolvido usando: Typescript, Javascript, Express, Node.js, Sequelize, JWT, Joi, ESlint, Mysql, Mocha, Chai, Sinon
Instale as dependências do projeto:
npm install
Para que o projeto funcione corretamente será necessário criar um arquivo do tipo .env com as variáveis de ambiente referentes ao banco de dados, portas a serem utilizadas e o seu segredo para utilizar o JWT. Por exemplo, caso o seu usuário SQL seja nome e a senha 1234 seu arquivo .env ficará desta forma:
MYSQL_URI=mysql://nome:1234@localhost:3306/db
PORT=3001
JWT_SECRET=secret
Logo em seguida será necessário criar o banco de dados e as tabelas que vão compor o banco. Para isso basta ter o MySQL ativo na máquina, e utilizar os seguintes comandos:
npm run db
Este comando vai automaticamente criar o bando de dados da API e todas as tabelas.
Caso queira automaticamente incluir alguns dados para teste nas tabelas, basta rodar o seguinte comando:
npm run seed
Para executar a aplicação basta executar o comando abaixo:
npm run build && npm start
Para rodar os testes basta executar o comando abaixo:
npm test
/loginRota responsável por realizar o login de um usuário cadastrado. o body da requisição deve ter o seguinte formato:
{
"email": "email@mail.com",
"password": "123456"
}
Exemplo de retorno com sucesso:
{
"user": {
"id": 1,
"name": "user",
"email": "user@user.com",
"role": "user",
"coins": 9999
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWlsLmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}
token fictício
Ao realizar o login será retornado um token, que será necessário para realizar ações outras ações na API.
Quando os dados de login estão incorretos:
{
"message": "Invalid login or password"
}
email e password não podem estar vazios ou faltando;email deve ser um e-mail valido email@email.com;password deve ser uma string com exatamente 6 caracteres./usersRota responsável por listar todos os usuários cadastrados na tabela users. Para realizar a listagem será necessário possuir um token, que é gerado ao realizar o login do usuário, e incluí-lo nos headers da requisição com a chave authorization.
Quando o token não é informado na requisição:
{
"message": "Token not found"
}
Quando o token é inválido:
{
"message": "Expired or invalid token"
}
Exemplo de retorno com sucesso:
[
{
"id": 1,
"name": "user",
"email": "user@user.com",
"role": "user",
"coins": 500
},
{
"id": 2,
"name": "admin",
"email": "admin@admin.com",
"role": "admin",
"coins": 9999
}
]
/users/:idRota responsável por atualizar as moedas dos usuários na tabela users com base no id. Para realizar a atualização será necessário possuir um token, que é gerado ao realizar o login do usuário, e incluí-lo nos headers da requisição com a chave authorization.
Quando o token não é informado na requisição:
{
"message": "Token not found"
}
Quando o token é inválido:
{
"message": "Expired or invalid token"
}
Exemplo de retorno com sucesso:
1
Significando que um campo foi alterado, e a atualização foi um sucesso.
Quando a atualização não ocorre:
0
Significando que nenhum campo foi alterado, e a atualização não aconteceu.
Quando o valor da atualização da moeda é negativo:
{
"message": "Coins cannot be negative"
}
/productsRota responsável por listar todos os produtos cadastrados na tabela products. Para realizar a listagem será necessário possuir um token, que é gerado ao realizar o login do usuário, e incluí-lo nos headers da requisição com a chave authorization.
Quando o token não é informado na requisição:
{
"message": "Token not found"
}
Quando o token é inválido:
{
"message": "Expired or invalid token"
}
Exemplo de retorno com sucesso:
[
{
"id": 1,
"name": "Produto 1",
"description": "Descrição produto 1",
"price": 90,
"image": "https://image.com/image1.jpg",
"createdAt": "2021-08-01T19:58:00.000Z"
},
{
"id": 2,
"name": "Produto 2",
"description": "Descrição produto 2",
"price": 90,
"image": "https://image.com/image2.jpg",
"createdAt": "2021-08-01T19:58:00.000Z"
}
]
/productsRota responsável por cadastrar um novo produto na tabela products. Para realizar o cadastro será necessário possuir um token, que é gerado ao realizar o login do usuário, e incluí-lo nos headers da requisição com a chave authorization.
Quando o token não é informado na requisição:
{
"message": "Token not found"
}
Quando o token é inválido:
{
"message": "Expired or invalid token"
}
Além disso, o body da requisição deve ter o seguinte formato:
{
"name": "Novo Produto",
"description": "Descrição novo produto",
"price": 200,
"image": "https://image.com/image1.png"
}
Exemplo de retorno com sucesso:
{
"id": 1,
"name": "Novo Produto",
"description": "Descrição novo produto",
"price": 200,
"image": "https://image.com/image1.png",
"createdAt": "2022-05-07T16:35:43.259Z"
}
name, description, price e image não podem estar vazios ou faltando;name não pode ter menos de 3 caracteres;description não pode ter menos de 10 caracteres;price não pode ser um numero negativo;