Git Product home page Git Product logo

gamestore's Introduction

GameStore API

(API está off-line)

API desenvolvida para fazer o controle de um database de uma Game Store.

GitHub followers

Sobre

Aplicação desenvolvida por Elias Forte.

Contatos

Ferramentas utilizadas

A aplicação foi toda desenvolvida usando linguagem Javascript em Node.js utilizando o Express. Para validações do corpo das requisições foi usado o Joi. Validações de login dos usuários feita com o JsonWebToken. Foi utilizado MongoDB como database e MongoDB Atlas para o armazenamento em nuvem do database e utilizando o S3 do AWS para disponibilização em nuvem de arquivos.

Deploy da aplicação feita na plataforma gratuita de hospedagem Heroku.

Testes

Foram feitos teste de integração, usando as ferramentas Chai para fazer as asserções junto com plug-in Chai-Http e o Mongo-Memory-Server, que respectivamente, foram usados para realizar as requisições HTTP para o servidor criado em memória. Com o Sion foram feitos os mocks necessários.

Obs: teste em desenvolvimento

Requisições e End-Points

Todas as requisições devem ser feitas para a URL https://game-store-14.herokuapp.com/.

Autenticação de usuário

REGISTRO

Para poder adicionar, editar, remover ou realizar comprar de jogos, o usuário tera que ser cadastrado no site, caso contrário, não conseguirá realizar essas ações.

O cadrastro deve ser feito por um requisição do tipo POST para o endpoint /register, contendo as seguites informações:

{
  "email": "[email protected]",
  "password": "senhasenha",
  "repeatPassword": "senhasenha"
}

Todos os campos são obrigatórios e deve ser informado um email válido para o cadastro ser concluído. Exemplos de erros que podem retornar:

Campo email não preenchido:

{
  "message": "\"email\" is not allowed to be empty"
}

Email inválido:

{
  "message": "\"email\" must be a valid email"
}

Usuario não cadastrado:

{
  "message": "User not exist"
}

Registro realizado com sucesso: // retorno ainda não implementado

{
  "massage": "User created successfully!"
}

LOGIN

O login do usuário deve ser feito em uma requisição do tipo POST para o endpoint /login. Email e senha deve ser os mesmos utilizados no registro e ambos os campos são obrigatórios. Após feito o login, o usuário tem acesso ao token de autenticação para poder criar, editar, remover ou comprar games.

Campo não preenchido:

{
  "message": "\"password\" is not allowed to be empty"
}

Email ou senha inválidos:

{
  "message": "Incorrect username or password"
}

Login realizado com sucesso:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7Il9pZCI6IjYxYjgyNWJkNWVkYjU0ZGYwN2QyMDcwMSIsImVtYWlsIjoiZW1haWxAZW1haWwuY29tIn0sImlhdCI6MTYzOTQ1ODgwMCwiZXhwIjoxNjQwMDYzNjAwfQ.WYIeVRXq_AtG3QdZhVjregogHs2cXlBBLQ9P3hGu4Mk"
}

Games

LISTAGEM DE GAMES

Para fazer a listagem de todos os jogos faça uma requisição do tipo GET para o endpoint /games e o retorno dever ser um array com todos os jogos disponíveis do banco, como por exemplo:

[
  {
    "_id": "61b7debf28efdadb9320a401",
    "name": "Call of Duty",
    "price": 3,
    "quantity": 5,
    "userId": "61b679f28c796346fe862884",
    "image": "https://game-store-14.herokuapp.com/61b7debf28efdadb9320a401.jpeg"
  },
  {
    "_id": "61b7df0d28efdadb9320a402",
    "name": "God Of War",
    "price": 3,
    "quantity": 2,
    "userId": "61b679f28c796346fe862884",
    "image": "https://game-store-14.herokuapp.com/61b7df0d28efdadb9320a402.jpeg"
   },
]

BUSCAR GAME PELO ID

Para fazer a busca de um único game, deve ser feito uma requisição do tipo GET para o endpoint /games/:id, informando o id do game. Tendo o retorno da seguinte forma:

{
  "_id": "61b80f079eeb9b77d9d03bfe",
  "name": "Crash, Tag Team Racing",
  "price": 3,
  "quantity": 4,
  "userId": "61b679f28c796346fe862884",
  "image": "https://upload-game-store.s3.amazonaws.com/61b80f079eeb9b77d9d03bfe.jpeg"
}

Se o ID do game estiver no formato incorreto, exibe o retorno:

{
  "message": "Invalid game ID"
}

Se o game não existir, exibe o retorno:

{
  "message": "Game not exist"
}

CRIANDO GAME

Para criar um game, o usuário deve está logado com um token válido, fazendo uma requisição do tipo POST para o endpoint /games/register. Os campos name, price, quantity são obrigatórios.

Campo vazio:

{
  "message": "\"name\" is not allowed to be empty"
}

Usuário sem token:

{
  "message": "Missing auth token",
  "status": 401
}

Token inválido:

{
  "message": "Jwt malformed"
}

Game criado com sucesso:

{
  "message": "Successfully created game!"
}

ADICIONANDO IMAGENS AOS GAMES

Após criar o game na rota /games/register, no database ele ficara desta forma:

{
  "_id": "61b8e5dd1a0577e965f9818a",
  "name": "Call Of Duty",
  "price": 3,
  "quantity": 7,
  "userId": "61b825bd5edb54df07d20701"
}

Todo novo jogo é criado sem imagem. Para adicionar a imagem faça uma requisição do tipo POST para o endpoint /games/image/:id. O usuário deve está autenticado para fazer o upload da imagem, o ID deve ser válido e o deve existir . É importante resaltar que o ID da rota /games/image/:id, se refere ao ID do novo game cadastrado no database. Faça uma nova requisição de listagem, para obter o ID do game e envie esse mesmo ID na requisição POST para que a imagem seja alocada com o game certo. Após seguir esses passos, retornara da API a mensagem:

{
  "message": "Upload completed successfully!"
}

No database ficara desta forma:

{
  "_id": "61b8e5dd1a0577e965f9818a",
  "name": "Call Of Duty",
  "price": 3,
  "quantity": 7,
  "userId": "61b679f28c796346fe862884",
  "image": "https://upload-game-store.s3.amazonaws.com/61b8e5dd1a0577e965f9818a.jpeg"
}

Se o ID do game estiver no formato incorreto, exibe o retorno:

{
  "message": "Invalid game ID"
}

Se o game não existir, exibe o retorno:

{
  "message": "Game not exist"
}

ATUALIZANDO DADOS DOS GAMES

A atualização deve ser feita por uma requisição do tipo PUT para o endpoit /games/:id. O usuário deve está autenticado para fazer a atualização, o ID deve ser válido e o jogo existir. O ID do item a ser modificado, exemplo:

{
  "_id": "61b8e5dd1a0577e965f9818a",
  "name": "Call Of Duty",
  "price": 3,
  "quantity": 7,
  "userId": "61b679f28c796346fe862884",
  "image": "https://upload-game-store.s3.amazonaws.com/61b8e5dd1a0577e965f9818a.jpeg"
}

Enviando o "_id": "61b8e5dd1a0577e965f9818a" na rota correta, o com o campo json { "name": "Need For Speed" } , o retorno será:

{
  "_id": "61b8e5dd1a0577e965f9818a"
  "name": "Need For Speed",
  "price": 3,
  "quantity": 7,
  "userId": "61b679f28c796346fe862884",
  "image": "https://upload-game-store.s3.amazonaws.com/61b8e5dd1a0577e965f9818a.jpeg"
}

REMOVENDO GAMES

Aplicação permite somente remoção de um jogo por requisição. Para fazer a remoção, o usuário deve está autenticado, deve informar um ID válido de um jogo que existe no database. A requisição deve ser do tipo DELETE para o endpoint /games/:id. A resposta da API sera um status code 204 No Content. Em casos de erros, podem sugir as seguintes retornos:

Se o ID do game estiver no formato incorreto, exibe o retorno:

{
  "message": "Invalid game ID"
}

Se o game não existir, exibe o retorno:

{
  "message": "Game not exist"
}

Usuário sem token:

{
  "message": "Missing auth token",
  "status": 401
}

Token inválido:

{
  "message": "Jwt malformed"
}

Contribuições

Caso você queria fazer alguma contribuição, fique a vontade para comentar, fazer pull resquests. Toda ajuda a melhorar o código é bem vinda :D!

gamestore's People

Contributors

eliforte avatar

Stargazers

Cristiano Lima avatar Matheus Proença avatar Miguel Retroz avatar  avatar

Watchers

 avatar

gamestore's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.