Backlog
Histórico de versão
Data | Versão | Descrição | Autores |
---|---|---|---|
03/09/2024 | 0.2 | Adicionando backlog | Miguel Arthur |
Este artefato tem o propósito de reunir informações e conteúdo do backlog desenvolvido pelo grupo para este projeto. Dois quadros foram criados na aplicação Trello, um para acompanhar todas as sprints de cada lançamento e outro para os requisitos que foram levantados nas reuniões do grupo.
Todo o conteúdo mencionado abaixo pode ser acessado aqui.
API para Gerenciamento de Campeonatos da Pesadelo (FrontEnd)
Este projeto faz parte de todo o sistema que compõe a proposta de gerencimento de campeonatos mata-mata das modalidades ofertadas pela Atlética Pesadelo da Universidade de Brasília (UNB).
Dependências
Este projeto foi construído utilizando ReactJS + Typescript.
A versão do Node.js utilizada para desenvolver o projeto foi a 20.14.0.
Para gereciamento das dependencias e pacotes foi utilizado o yarn.
Antes de seguir para os passos abaixo é necessário instalar todos os pacotes
listados dentro do arquivo package.json
que está localizado na raiz deste
projeto.
Para instalar os pacotes necessários insira este comando na raiz deste projeto:
yarn install
Variáveis de ambiente
Antes de rodar o projeto é preciso configurar todas as variáveis de ambiente. Na raiz do projeto existe um arquivo chamado .env.example que conta como um arquivo exemplo para auxiliar quem vai rodar o projeto pela primeira vez.
Abaixo contém uma lista com a descrição de cada variável e os possíveis valores que cada uma pode ter:
Variável | Descrição | Obrigatório |
---|---|---|
API_URL |
URL da API que faz parte do projeto que compõe o sistema da Pesadelo. | ✅ |
Rodando o projeto localmente
Após seguir todos os passos acima falta apenas rodar o projeto localmente. Para isso assugere-se dos seguintes itens:
- ✅ Versão do NodeJS compatível com a 20.14.0;
- ✅ Variáveis de ambiente configuradas corretamemte;
- ✅ Pacotes instalados.
Com tudo isso feito pode-se prosseguir e rodar o seguinte comando na raiz do projeto:
yarn dev
API para Gerenciamento de Campeonatos da Pesadelo (BackEnd)
Este documento conta com as instruções sobre como: - Configurar suas variáveis de ambiente; - Gerar o banco de dados no qual este projeto deve se conectar; - Rodar o projeto localmente.
E também como um: - Guia rápido para os endpoints expostos; - Informativo geral sobre o projeto.
Dependências
Este projeto foi construído utilizando NodeJS + Typescript. O framework HTTP utilizado foi o Express.js.
A versão do Node.js utilizada para desenvolver o projeto foi a 20.14.0.
Para gereciamento das dependencias e pacotes foi utilizado o yarn.
Antes de seguir para os passos abaixo é necessário instalar todos os pacotes
listados dentro do arquivo package.json
que está localizado na raiz deste
projeto.
Para instalar os pacotes necessários insira este comando na raiz deste projeto:
yarn install
Variáveis de ambiente
Antes de rodar o projeto é preciso configurar todas as variáveis de ambiente. Na raiz do projeto existe um arquivo chamado .env.example que conta como um arquivo exemplo para auxiliar quem vai rodar o projeto pela primeira vez.
Abaixo contém uma lista com a descrição de cada variável e os possíveis valores que cada uma pode ter:
Variável | Descrição | Obrigatório |
---|---|---|
APP_PORT |
Porta na qual a aplicação web irá rodar. | ✅ |
APP_SECRET |
Chave secreta utilizada para assinaturas e criptografia de dados sensíveis. | ✅ |
APP_URL |
URL base da aplicação, incluindo o protocolo (http/https). | ✅ |
DATABASE_DB |
Nome do banco de dados a ser utilizado pela aplicação. | ✅ |
DATABASE_PORT |
Porta na qual o serviço de banco de dados está rodando. | ✅ |
DATABASE_HOST |
Endereço do servidor onde o banco de dados está hospedado. | ✅ |
DATABASE_USERNAME |
Nome de usuário para autenticação no banco de dados. | ✅ |
DATABASE_PASSWORD |
Senha para autenticação no banco de dados. | ✅ |
DATABASE_MIGRATIONS_FOLDER |
Caminho para a pasta onde as migrações do banco de dados estão localizadas. | ✅ |
DATABASE_ENTITIES |
Lista de entidades/tabelas gerenciadas pela aplicação no banco de dados. | ✅ |
Os valores dentro do arquivo de exemplo para as seguintes variáveis pode permanecer igual no momento de rodar o projeto localmente.
- DATABASE_MIGRATIONS_FOLDER;
- DATABASE_ENTITIES.
As variáveis acima definem onde, no projeto, estão especificadas, respectivamentes, as pastas de migração e entidades do banco de dados. Durante o desenvolvimento elas foram colocadas como exemplo pois são um padrão (apenas no desenvolvimento).
Banco de dados
Esta aplicação utiliza um ORM (object relational model) para se conectar ao banco de dados. Isso possibilitou que este projeto utilizasse de migrações e linhas de comando para gerar as tabelas do banco de dados independente do ambiente em que está rodando.
Para gerar as tabelas do banco de dados automaticamente com o comando abaixo é necessário que as variáveis de ambiente relacionadas ao banco de dados listadas anteriormente foram inseridas corretamente.
Obs: o banco de dados no qual as tabelas irão ser inseridas DEVE existir previamente.
Para rodas as migrações e levantar as tabelas automaticamente no banco de dados basta digitar o seguinte comando na raiz deste projeto:
yarn database:dev migration:run -d ./src/database/connection
Após isso o ORM fará todo o trabalho necessário para criar as tabelas que foram previamente configuradas em casa arquivo de migração dentro deste projeto.
Rodando o projeto localmente
Após seguir todos os passos acima falta apenas rodar o projeto localmente. Para isso assugere-se dos seguintes itens:
- ✅ Versão do NodeJS compatível com a 20.14.0;
- ✅ Variáveis de ambiente configuradas corretamemte;
- ✅ Pacotes instalados;
- ✅ Migrações do banco de dados rodaram com sucesso.
Com tudo isso feito pode-se prosseguir e rodar o seguinte comando na raiz do projeto:
yarn start:dev
O comando acima fará com que a API comece a rodar na porta especificada.
Você saberá que tudo está rodando corretamente se ver as seguintes mensagens no terminal após inserir o comando acima:
🚀 Server stared on port 3333 💾 Database connected successfully!
Guia rápido para os endpoints expostos
Abaixo estão os endpoints expostos por essa API e uma breve descrição do que o endpoint faz.
Endpoints - Users
Base Path: /users
Método | Endpoint | Descrição | Autenticação |
---|---|---|---|
GET | /users |
Lista todos os usuários. | Sim |
POST | /users |
Cria um novo usuário. | Não |
POST | /users/sessions |
Cria uma sessão para autenticar um usuário. | Não |
PUT | /users |
Atualiza as informações de um usuário. | Sim |
PATCH | /users/accesses/:userId |
Atualiza o nível de acesso de um usuário. | Sim |
Detalhes dos Endpoints
GET /users
- Descrição: Retorna uma lista de todos os usuários.
- Autenticação: Sim
POST /users
- Descrição: Cria um novo usuário.
- Autenticação: Não
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
fullName |
string |
✅ | Nome completo do usuário. Máx: 255 caracteres. |
email |
string |
✅ | E-mail do usuário. Máx: 255 caracteres. |
password |
string |
✅ | Senha do usuário. Máx: 255 caracteres. |
registration |
string |
✅ | Registro do usuário. Máx: 255 caracteres. |
POST /users/sessions
- Descrição: Cria uma sessão de autenticação para o usuário.
- Autenticação: Não
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
email |
string |
✅ | E-mail do usuário. Máx: 255 caracteres. |
password |
string |
✅ | Senha do usuário. Máx: 255 caracteres. |
PUT /users
- Descrição: Atualiza as informações do usuário autenticado.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
fullName |
string |
❌ | Nome completo do usuário. Máx: 255 caracteres. |
email |
string |
❌ | E-mail do usuário. Máx: 255 caracteres. |
oldPassword |
string |
❌ | Senha antiga do usuário. Máx: 255 caracteres. |
password |
string |
❌ | Nova senha do usuário. Máx: 255 caracteres. |
registration |
string |
❌ | Registro do usuário. Máx: 255 caracteres. |
PATCH /users/accesses/:userId
- Descrição: Atualiza o nível de acesso de um usuário.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
userId |
string (uuid) |
✅ | ID do usuário. Deve ser um UUID válido. |
access |
number |
✅ | Nível de acesso do usuário. |
Endpoints - Teams
Base Path: /teams
Método | Endpoint | Descrição | Autenticação |
---|---|---|---|
GET | /teams/:id |
Obtém informações detalhadas de um time específico. | Sim |
GET | /teams/leaders/list |
Lista todos os times liderados por um usuário. | Sim |
GET | /teams/leaders/list/filter |
Filtra times liderados por modalidade. | Sim |
POST | /teams |
Cria um novo time. | Sim |
PUT | /teams/:id |
Atualiza as informações de um time específico. | Sim |
Detalhes dos Endpoints
GET /teams/:id
- Descrição: Retorna informações detalhadas de um time específico.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
id |
string (uuid) |
✅ | ID do time. Deve ser um UUID válido. |
GET /teams/leaders/list
- Descrição: Retorna uma lista de todos os times liderados por um usuário autenticado.
- Autenticação: Sim
GET /teams/leaders/list/filter
- Descrição: Filtra os times liderados por modalidade.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
modality |
number |
✅ | Modalidade a ser filtrada. |
POST /teams
- Descrição: Cria um novo time.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
name |
string |
✅ | Nome do time. |
description |
string |
❌ | Descrição do time. |
modality |
number |
✅ | Modalidade do time. |
image |
file |
❌ | Imagem representativa do time. (upload) |
PUT /teams/:id
- Descrição: Atualiza as informações de um time específico.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
name |
string |
❌ | Nome do time. |
description |
string |
❌ | Descrição do time. |
modality |
number |
❌ | Modalidade do time. |
Endpoints - Team Members
Base Path: /team-members
Método | Endpoint | Descrição | Autenticação |
---|---|---|---|
GET | /team-members/teams/:teamId |
Lista todos os membros de um time específico. | Sim |
GET | /team-members/:id |
Obtém informações de um membro específico do time. | Sim |
POST | /team-members |
Adiciona um novo membro ao time. | Sim |
PUT | /team-members/:id |
Atualiza as informações de um membro específico. | Sim |
DELETE | /team-members/:id |
Remove um membro específico do time. | Sim |
Detalhes dos Endpoints
GET /team-members/teams/:teamId
- Descrição: Retorna uma lista de todos os membros de um time específico.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
teamId |
string (uuid) |
✅ | ID do time. Deve ser um UUID válido. |
GET /team-members/:id
- Descrição: Retorna as informações de um membro específico do time.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
id |
string (uuid) |
✅ | ID do membro. Deve ser um UUID válido. |
POST /team-members
- Descrição: Adiciona um novo membro ao time.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
registration |
string |
✅ | Registro do membro no time. |
name |
string |
✅ | Nome do membro. |
teamId |
string (uuid) |
✅ | ID do time. Deve ser um UUID válido. |
PUT /team-members/:id
- Descrição: Atualiza as informações de um membro específico do time.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
id |
string (uuid) |
✅ | ID do membro. Deve ser um UUID válido. |
registration |
string |
✅ | Registro do membro no time. |
name |
string |
✅ | Nome do membro. |
DELETE /team-members/:id
- Descrição: Remove um membro específico do time.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
id |
string (uuid) |
✅ | ID do membro. Deve ser um UUID válido. |
Endpoints - Championships
Base Path: /championships
Método | Endpoint | Descrição | Autenticação |
---|---|---|---|
GET | /championships |
Lista todos os campeonatos. | Não |
GET | /championships/upcoming |
Lista os próximos campeonatos. | Não |
GET | /championships/ongoing |
Lista os campeonatos em andamento. | Não |
GET | /championships/modality/:modality |
Lista os campeonatos por modalidade. | Não |
GET | /championships/:id |
Obtém informações de um campeonato específico. | Não |
POST | /championships |
Cria um novo campeonato. | Sim |
PUT | /championships/:championshipId |
Atualiza as informações de um campeonato específico. | Sim |
DELETE | /championships/:id |
Remove um campeonato específico. | Sim |
Detalhes dos Endpoints
GET /championships
- Descrição: Retorna uma lista de todos os campeonatos.
- Autenticação: Não
- Validações: Nenhuma
GET /championships/upcoming
- Descrição: Retorna uma lista dos próximos campeonatos.
- Autenticação: Não
- Validações: Nenhuma
GET /championships/ongoing
- Descrição: Retorna uma lista dos campeonatos em andamento.
- Autenticação: Não
- Validações: Nenhuma
GET /championships/modality/:modality
- Descrição: Retorna uma lista de campeonatos filtrados por modalidade.
- Autenticação: Não
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
modality |
number |
✅ | Modalidade do campeonato. |
GET /championships/:id
- Descrição: Retorna as informações de um campeonato específico.
- Autenticação: Não
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
id |
string (uuid) |
✅ | ID do campeonato. Deve ser um UUID válido. |
POST /championships
- Descrição: Cria um novo campeonato.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
date |
string |
✅ | Data do campeonato (formato YYYY-MM-DD). |
from |
string |
✅ | Hora de início (formato HH:MM). |
name |
string |
✅ | Nome do campeonato. |
modality |
number |
✅ | Modalidade do campeonato. |
location |
string |
✅ | Local do campeonato. |
participants |
number |
✅ | Número de participantes. |
to |
string |
❌ | Hora de término (formato HH:MM). |
description |
string |
❌ | Descrição do campeonato. |
locationLat |
number |
❌ | Latitude do local do campeonato. |
locationLng |
number |
❌ | Longitude do local do campeonato. |
PUT /championships/:championshipId
- Descrição: Atualiza as informações de um campeonato específico.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
date |
string |
✅ | Data do campeonato (formato YYYY-MM-DD). |
from |
string |
✅ | Hora de início (formato HH:MM). |
name |
string |
✅ | Nome do campeonato. |
modality |
number |
✅ | Modalidade do campeonato. |
location |
string |
✅ | Local do campeonato. |
participants |
number |
✅ | Número de participantes. |
to |
string |
❌ | Hora de término (formato HH:MM). |
description |
string |
❌ | Descrição do campeonato. |
locationLat |
number |
❌ | Latitude do local do campeonato. |
locationLng |
number |
❌ | Longitude do local do campeonato. |
DELETE /championships/:id
- Descrição: Remove um campeonato específico.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
id |
string (uuid) |
✅ | ID do campeonato. Deve ser um UUID válido. |
Endpoints - Championship Registrations
Base Path: /championship-registrations
Método | Endpoint | Descrição | Autenticação |
---|---|---|---|
POST | /championship-registrations |
Realiza a inscrição de uma equipe em um campeonato. | Sim |
Detalhes dos Endpoints
POST /championship-registrations
- Descrição: Realiza a inscrição de uma equipe em um campeonato específico.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
teamId |
string (uuid) |
✅ | ID da equipe que está sendo inscrita. |
championshipId |
string (uuid) |
✅ | ID do campeonato no qual a equipe será inscrita. |
Endpoints - Games
Base Path: /games
Método | Endpoint | Descrição | Autenticação |
---|---|---|---|
GET | /games/results/:championshipId |
Obtém os resultados dos jogos de um campeonato. | Não |
GET | /games/phases/:championshipId |
Lista os jogos de uma fase específica de um campeonato. | Não |
GET | /games/:championshipId |
Lista todos os jogos de um campeonato específico. | Não |
PUT | /games/:id |
Atualiza a pontuação de um jogo específico. | Sim |
Detalhes dos Endpoints
GET /games/results/:championshipId
- Descrição: Obtém os resultados dos jogos de um campeonato específico.
- Autenticação: Não
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
championshipId |
string (uuid) |
✅ | ID do campeonato para o qual os resultados são obtidos. |
GET /games/phases/:championshipId
- Descrição: Lista os jogos de uma fase específica de um campeonato.
- Autenticação: Não
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
championshipId |
string (uuid) |
✅ | ID do campeonato para o qual os jogos são listados. |
phase |
number |
✅ | Número da fase dos jogos a serem listados. |
GET /games/:championshipId
- Descrição: Lista todos os jogos de um campeonato específico.
- Autenticação: Não
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
championshipId |
string (uuid) |
✅ | ID do campeonato para o qual os jogos são listados. |
PUT /games/:id
- Descrição: Atualiza a pontuação de um jogo específico.
- Autenticação: Sim
- Validações:
Propriedade | Tipo | Requerida | Descrição |
---|---|---|---|
id |
string (uuid) |
✅ | ID do jogo a ser atualizado. |
homeScore |
number |
❌ | Pontuação do time da casa (mínimo 0). |
visitorScore |
number |
❌ | Pontuação do time visitante (mínimo 0). |