Skip to content

Aplicação full stack para gerenciamento de pontos em um campeonato de futebol.

Notifications You must be signed in to change notification settings

joaoespacheco/Trybe-Project-29-Futebol-Club

Repository files navigation

Trybe Futebol Club ⚽

📄 Sobre:

Projeto desenvolvido durante o módulo de back-end do curso de desenvolvimento web da Trybe.

O TFC é uma aplicação full stack para gerenciamento de pontos em um campeonato de futebol. Ele é composto por uma API REST e uma aplicação front-end confeccionada com React cujo as requisições para a API foram feitas através da biblioteca Axios.

O objetivo desse projeto foi desenvolver a API (utilizando o método TDD) e também integrar através do docker-compose as aplicações para que elas funcionem consumindo um banco de dados.


Desempenho Aprovado com 100% de desempenho em todos os requisitos

image

Requisitos

1 - Desenvolva em /app/backend/src/database nas pastas correspondentes, uma migration e um model para a tabela de users

2 - Desenvolva testes que cubram no mínimo 5 por cento dos arquivo backend em /src com um mínimo de 7 linhas cobertas

3 - Desenvolva o endpoint /login no backend de maneira ele permita o acesso com dados válidos no frontend

4 - Desenvolva testes que cubram no mínimo 10 por cento dos arquivo backend em /src com um mínimo de 19 linhas cobertas

5 - Desenvolva o endpoint /login no backend de maneira ele não permita o acesso sem informar um email no frontend

6 - Desenvolva testes que cubram no mínimo 10 por cento dos arquivo backend em /src com um mínimo de 19 linhas cobertas

7 - Desenvolva o endpoint /login no backend de maneira ele não permita o acesso sem informar uma senha no frontend

8 - Desenvolva testes que cubram no mínimo 20 por cento dos arquivo backend em /src com um mínimo de 35 linhas cobertas

9 - Desenvolva o endpoint /login no backend de maneira ele não permita o acesso com um email inválido no frontend

10 - Desenvolva testes que cubram no mínimo 30 por cento dos arquivo backend em /src com um mínimo de 45 linhas cobertas

11 - Desenvolva o endpoint /login no backend de maneira ele não permita o acesso com uma senha inválida no frontend

12 - Desenvolva o endpoint /login/validate no backend de maneira ele retorne os dados corretamente no frontend

13 - Desenvolva testes que cubram no mínimo 45 por cento dos arquivo backend em /src com um mínimo de 70 linhas cobertas

14 - Desenvolva em /app/backend/src/database nas pastas correspondentes, uma migration e um model para a tabela de teams

15 - Desenvolva o endpoint /teams no backend de forma que ele possa retornar todos os times corretamente

16 - Desenvolva o endpoint /teams/:id no backend de forma que ele possa retornar dados de um time específico

17 - Desenvolva testes que cubram no mínimo 60 por cento dos arquivo backend em /src com um mínimo de 80 linhas cobertas

18 - Desenvolva em /app/backend/src/database nas pastas correspondentes, uma migration e um model para a tabela de matches

19 - Desenvolva o endpoint /matches de forma que os dados apareçam corretamente na tela de partidas no frontend

20 - Desenvolva o endpoint /matches de forma que seja possível filtrar as partidas em andamento na tela de partidas do frontend

21 - Desenvolva o endpoint /matches de forma que seja possível filtrar as partidas finalizadas na tela de partidas do frontend

23 - Desenvolva o endpoint /matches de modo que seja possível salvar uma partida com o status de inProgress como true no banco de dados

24 - Desenvolva o endpoint /matches/:id/finish de modo que seja possível alterar o status inProgress de uma partida para false no banco de dados

25 - Desenvolva o endpoint /matches de forma que não seja possível inserir uma partida com times iguais

26 - Desenvolva o endpoint /matches de forma que não seja possível inserir uma partida com time que não existe na tabela teams

27 - Desenvolva o endpoint /matches de forma que não seja possível inserir uma partida sem um token válido

28 - Desenvolva o endpoint /matches de forma que seja possível atualizar partidas em andamento

29 - Desenvolva o endpoint /leaderboard/home de forma que seja possível filtrar a classificações dos times quando mandantes na tela de classificação do frontend com os dados iniciais do banco de dados

30 - Desenvolva o endpoint /leaderboard/home de forma que seja possível filtrar a classificações dos times quando mandantes na tela de classificação do frontend e ao inserir a partida Corinthians 2 X 1 Internacional a tabela será atualizada

31 - Desenvolva o endpoint /leaderboard/away de forma que seja possível filtrar as classificações dos times quando visitantes na tela de classificação do frontend com os dados iniciais do banco de dados

32 - Desenvolva o endpoint /leaderboard/away de forma que seja possível filtrar a classificações dos times quando visitantes na tela de classificação do frontend e ao inserir a partida Corinthians 2 X 1 Internacional a tabela será atualizada

33 - Desenvolva o endpoint /leaderboard de forma que seja possível filtrar a classificação geral dos times na tela de classificação do frontend com os dados iniciais do banco de dados

34 - Desenvolva o endpoint /leaderboard de forma que seja possível filtrar a classificação geral dos times na tela de classificação do frontend e ao inserir a partida Flamengo 3 X 0 Napoli-SC a tabela será atualizada

35 - Desenvolva o endpoint /leaderboard de forma que seja possível filtrar a classificação geral dos times na tela de classificação do frontend e ao inserir a partida Minas Brasília 1 X 0 Ferroviária a tabela será atualizada

Diagrama Entidade-Relacionamento

image

Estrutura do Projeto

1.Banco de dados:

É um container docker MySQL já configurado no docker-compose através de um serviço definido como db. Tem o papel de fornecer dados para o serviço de backend. Durante a execução dos testes sempre vai ser acessado pelo sequelize e via porta 3002 do localhost; Também pode ser conectado a um Cliente MySQL (Workbench, Beekeeper, DBeaver e etc), colocando as credenciais configuradas no docker-compose no serviço db.

2.Back-end:

É o ambiente onde foram feitas as implementações das regras de negócio, rotas, validações e comunicação com o banco de dados. Deve rodar na porta 3001, pois o front-end faz requisições para ele nessa porta por padrão; A aplicação deve ser inicializada a partir do arquivo app/backend/src/server.ts; Todas as dependências extras (tal como joi, boom, express-async-errors...) foram listadas em app/backend/packages.npm.

3.Front-end:

O front-end fará as requisições para o back-end e demonstrará para o usuário os resultados no navegador; O front se comunica com serviço de back-end pela url http://localhost:3001 através dos endpoints construídos na API.

4.Docker:

O docker-compose tem a responsabilidade de unir todos os serviços conteinerizados (backend, frontend e db) e subir o projeto completo com o comando npm run compose:up ou npm run compose:up:dev;


⚙️ Execução

Para executar a aplicação inicie realizando o clone deste repositório com o comando abaixo.

git clone git@github.com:joaoespacheco/Trybe-Project-29-Futebol-Club.git

Navegue até a raíz do projeto.

cd Trybe-Project-29-Futebol-Club/

Uma vez na raiz do projeto, execute o comando abaixo para instalar as dependências do projeto.

npm install

Rodando a aplicação com o Docker

Para subir o Docker vá até a raiz do projeto e digite o seguinte comando:

docker-compose up -d

Para acessar o container app_backend e popular o db digite o segundo

docker exec app_backend -it bash && npm run db:reset

↪️ Rotas:

🚧 Documentação das rotas em construção ! 🚧


🤹🏽 Habilidades Desenvolvidas:

  • Criar uma aplicação utilizando Express.js e TypeScript
  • Utilizar recursos como classes, interfaces, types entre outros
  • Criar uma API RESTful utilizando arquitetura MSC (Model-Service-Controller)
  • Validar os dados das requisições utilizando a biblioteca Joi
  • Implementar autenticação via token utilizando JSON Web Token
  • Implementar testes unitários utilizando Mocha, Chai, Sinon

🧰 Ferramentas:

  • TypeScript
  • Node.js
    • Express.js
    • Express Async Errors
  • Sequeline
  • MySQL
  • DotEnv
  • BCryptJS
  • Joi
  • JSON Web Token
  • Mocha
  • Chai
  • Sinon
  • Docker
  • React
  • HTML
  • CSS

📝 Desenvolvido por: