O desafio é construir uma API Rest que seja capaz de cadastrar, buscar, atualizar e apagar os jogadores. Ela deverá ser capaz de consultar a Api da Riot Games para trazer os dados dos jogadores que serão cadastrados em uma base de dados.
Lista dos jogadores a serem cadastrados:
- OldWolfKing
- Praymer
- ThrekSor
- AndrewDiass
- BiliBoss
- DartSecond
- Devils Advocate
- Gabrvxo
- theKovac
- zRabelo
Para consumir a API é necessário criar uma conta na plataforma e ler a documentação. Os endpoints que serão usados nesse projeto requerem autenticação e é possivel gerar um token com tempo de expiração para poder estar consumindo esse serviço.
Deve ser construída uma tabela chamada Summoner no banco de dados com essas colunas:
Id | Nickname | AccountId | SummonerLevel | ProfileIconId | SummonerId |
---|---|---|---|---|---|
1 | Old Wolf King | V94KgBnbbsaR4I4 | 100 | 4864 | OtaV_QBRbtzt7DtpZn |
2 | Wolf Old King | bsaR4I4V94KgBnb | 150 | 4684 | FtaZ_QBRbtzt7DtpZn |
3 | King Old Wolf | 4I4V94KgbsaRBnb | 500 | 4648 | GtaT_QBRbtzt7DtpZn |
Deve possuir uma rota POST para cadastrar um JOGADOR. Deverá receber os seguintes dados no corpo da requisição:
Body
{
"summonerName":"OldWolfKing"
}
A rota deve consumir o SummonerName do corpo e usá-lo para consultar no endpoint abaixo da API riotgames as informações AccountId, SummonerLevel, ProfileIconId e Id.
/lol/emmnorsu/v4/summoners/by-name/{summonerName}?api_key={token}
Status Code 200
{
"id": "OtaV_QBRbtzt7DtXXXlXbvRjuDmDRZJ38wjbEQOqXbM",
"accountId": "V94KgBnbbsaR4I4MXXX4trfyvUay95h_13PCsTz6jo4ByBw",
"puuid": "5LwdLcx1qM2_E-1NNFTBRDgTK6oqvc3XXXmbC4gqNauImdGCIm3WM2RZLBNcIyui-sXc2Q",
"name": "Old Wolf King",
"profileIconId": 4864,
"revisionDate": 1613316510000,
"summonerLevel": 225
}
E com esses dados fazer o cadastro do jogador no banco de dados.
O ID do jogador pode ser tanto UUID ou numérico incremental
Deve possuir uma rota GET para listar as informações da tabela Summoner, modelo esperado do retorno abaixo:
Status Code 200
[
{
id: "1",
nickname: "Old Wolf King",
accountId: "V94KgBnbbsaR4I4",
summonerLevel: "100",
profileIconId: "4864",
summonerId: "V94KgBnbbsaR4I4",
},
{
id: "2",
nickname: "Old Wolf King",
accountId: "bsaR4I4V94KgBnb",
summonerLevel: "150",
profileIconId: "4684",
summonerId: "V94KgBnbbsaR4I4",
},
{
id: "3",
nickname: "Old Wolf King",
accountId: "4I4V94KgbsaRBnb",
summonerLevel: "500",
profileIconId: "4648",
summonerId: "V94KgBnbbsaR4I4",
},
];
Deve possuir uma rota GET que além de trazer as informações da tabela, irá trazer as quantidades de vitórias e derrotas de cada jogador:
Status Code 200
[
{
id: "1",
nickname: "Old Wolf King",
accountId: "V94KgBnbbsaR4I4",
summonerLevel: "100",
profileIconId: "4864",
summonerId: "V94KgBnbbsaR4I4",
wins: 2,
losses: 100,
},
{
id: "2",
nickname: "Old Wolf King",
accountId: "bsaR4I4V94KgBnb",
summonerLevel: "150",
profileIconId: "4684",
summonerId: "V94KgBnbbsaR4I4",
wins: 12,
losses: 3,
},
{
id: "3",
nickname: "Old Wolf King",
accountId: "4I4V94KgbsaRBnb",
summonerLevel: "500",
profileIconId: "4648",
summonerId: "V94KgBnbbsaR4I4",
wins: 7,
losses: 7,
},
];
Para trazer essas informações, consuma o endpoint da riotgames abaixo, ele retorna um array de objetos com os dados de um jogador com base no encryptedSummonerId enviado e cada objeto possui as propriedades wins e losses:
/lol/league/v4/entries/by-summoner/{encryptedSummonerId}?api_key={token}
response
[
{
leagueId: "469c392c-063c-XXbca8-6c4c7c4d21d4",
queueType: "RANKED_SOLO_5x5",
tier: "SILVER",
rank: "I",
summonerId: "OtaV_QBRbtzt7DtpZnLXXXbvRjuDmDRZJ38wjbEQOqXbM",
summonerName: "Old Wolf King",
leaguePoints: 39,
wins: 12,
losses: 3,
veteran: false,
inactive: false,
freshBlood: false,
hotStreak: false,
},
{
leagueId: "0f276adb-9984-XXfdc-7d5fc5fc35d5",
queueType: "RANKED_FLEX_SR",
tier: "SILVER",
rank: "I",
summonerId: "OtaV_QBRbtzt7DtpZXXbvRjuDmDRZJ38wjbEQOqXbM",
summonerName: "Old Wolf King",
leaguePoints: 8,
wins: 7,
losses: 6,
veteran: false,
inactive: false,
freshBlood: false,
hotStreak: false,
},
];
Deve ser feito a somatória das vitórias e derrotas de cada objeto do array, lembrando que deve ser executado para cada jogador da tabela.
Deve possuir uma rota PUT para atualizar somente o summonerName e summonerLevel do jogador através do ID:
Body
{
"summonerName":"OldWolfKingMaster",
"summonerLevel": 550
}
Status Code 200
{
"id": "OtaV_QBRbtzt7DtXXXlXbvRjuDmDRZJ38wjbEQOqXbM",
"accountId": "V94KgBnbbsaR4I4MXXX4trfyvUay95h_13PCsTz6jo4ByBw",
"puuid": "5LwdLcx1qM2_E-1NNFTBRDgTK6oqvc3XXXmbC4gqNauImdGCIm3WM2RZLBNcIyui-sXc2Q",
"name": "OldWolfKingMaster",
"profileIconId": 4864,
"revisionDate": 1613316510000,
"summonerLevel": 550
}
Deve possuir uma rota DELETE para apagar o jogador através do ID:
Status Code 200
{
"message": "successfully deleted"
}
API deve ser desenvolvida em NodeJs.
Você será avaliado pela usabilidade, por respeitar o design e pela arquitetura da API.
- Uso do Git
- Arquitetura da API
- Diferencial: NestJS ou Postgres
- A qualidade do código
- As decisões que você fez para resolver o desafio
- Tratamento de erros
- Farça um fork deste repositório;
- Clone seu fork na sua máquina;
- Crie um novo branch com o seguinte padrão "challenge/seu-nome";
- Resolva o desafio;
- Faça uma PR para este repositório com instruções claras de como executar seu código.
Sua PR será avaliada e lhe daremos um feedback o mais rápido possível.
Resposta: Não só pode como será um diferencial
Resposta: Esperamos sua resposta em até 7 dias
Resposta: Qualquer um, sendo o Postgres ou Mongodb um diferencial