API responsável por cadastrar atletas e resultados, além de retornar o ranking de duas competições dos jogos olímpicos: lançamento de dardo e natação 100m.
A API cadastra uma competição, um atleta e os resultados do atleta para cada competição. Na competição de natação, vence o atleta que completar a prova em menor tempo, já na competição de lançamento de dardos, cada atleta terá três chances, sendo considerada a maior distância de aremesso das três. Por fim, a API pode retornar o resultado parcial de cada competição, porém não aceita cadastro de resultados de competições já encerradas.
Representa os atletas de nossa aplicação. Os atletas são compostos pelas seguintes características:
-
id (string) e gerado pela própria aplicação
-
name (string)
Representa as competições de nossa aplicação. As competições são compostas pelas seguintes características:
-
id (string) e gerado pela própria aplicação
-
name (string) único por competição
-
is_closed (boolean) representando se a competição está fechada
-
attempts (number) número de tentativas de cada competição
Representa os resultados de nossa aplicação. Os resultados são compostos pelas seguintes características:
-
id (string) e gerado pela própria aplicação
-
value (number)
-
value_2 (number)
-
value_3 (number)
-
unit (string)
-
competition_id (string) chave estrangeira, referencia a competição
-
athlete_id (string) chave estrangeira, referencia o atleta
id VARCHAR(255) e chave primária
name VARCHAR(255) e não-nulo
id VARCHAR(255) e chave primária
name VARCHAR(255) e não-nulo
is_closed BOOLEAN e não nulo, padrão: falso
attempts INT e não-nulo
id VARCHAR(255) e chave primária
value FLOAT e não-nulo
value_2 FLOAT pode ser nulo
value_3 FLOAT pode ser nulo
unit VARCHAR(255) e não-nulo
competition_id VARCHAR(255) chave estrangeira e não-nulo
athlete_id VARCHAR(255) chave estrangeira e não-nulo
npm install:
Instala todas as dependências listadas nopackage.json
.
npm run migrations
Cria e popula as tabelas com dados mockados de usuários e shows.- Esse script deve ser executado apenas uma única vez
- Se executado uma segunda vez, ele dropa as tabelas e reseta os dados mockados
Criar o arquivo .env
e configurar com as informações de seu banco de dados.
PORT: 3003
DB_HOST = host
DB_USER = usuario
DB_PASSWORD = senha
DB_NAME = nome-do-banco-de-dados
JWT_KEY = "minha-senha-segura"
JWT_EXPIRES_IN = "24h"
BCRYPT_SALT_ROUNDS = 12
npm run dev
: Estabelece a conexão com o banco de dados e reinicia automaticamente o servidorlocalhost
toda a vez que o projeto for alterado e salvo.
1. Cadastro de um atleta
-
Método:
POST
-
Caminho:
/athlete/create
-
Entrada:
name
-
Saída:
mensagem de cadastro de um novo atleta
-
Validações e regras de negócio:
name deve ser fornecido e deve ser do tipo string
2. Cadastro de uma competição
- Método:
POST
- Caminho:
/competition/create
- Entrada:
name, attempts
Saída:mensagem de cadastro de uma nova competição
- Validações e regras de negócio:
name deve ser fornecido e deve ser do tipo string
name deve ser único, não podendo se repetir no banco de dados
attempts deve ser fornecido e deve ser do tipo number
3. Fechar uma competição
- Método:
POST
- Caminho:
/competition/close/:id
- Entrada:
id como parâmetros
Saída:mensagem de sucesso ao fechar uma competição
- Validações e regras de negócio:
o id passado por parâmetros deve ser válido
4. Cadastro dos resultados
- Método:
POST
- Caminho:
/result/create
- Entrada:
value, value_2, value_3, unit, competition_id, athlete_id
Saída:mensagem de sucesso ao cadastrar o resultado
- Validações e regras de negócio:
value deve ser fornecido, deve ser do tipo number e maior que 0
value_2 e value_3 devem ser fornecidos caso a competição tenha 3 tentativas, devem ser do tipo number e maior que 0
unit deve ser fornecido e deve ser do tipo string
competition_id deve ser fornecido, válido e do tipo string
athlete_id deve ser fornecido, válido e do tipo string
5. Buscar resultados
- Método:
get
- Caminho:
/ranking/:id
- Entrada:
id como parâmetros
Saída:uma lista ordenada com os melhores resultados da competição
- Validações e regras de negócio:
o id passado por parâmetros deve ser válido
- NodeJS
- TypeScript
- MySQL
- Knex
- Express
- Cors
- JWT
- BcryptJS
- Markdown
- Jest