GithubHelp home page GithubHelp logo

dashartt / trybe-futebol-clube Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 962 KB

O TFC é um site informativo sobre partidas e classificações de futebol! ⚽️

Dockerfile 0.31% JavaScript 51.12% TypeScript 31.26% Shell 1.78% HTML 1.63% CSS 13.91%
api-rest docker express jwt mocha-chai mysql node react sequelize sinnon typescript

trybe-futebol-clube's Introduction

Trybe Futebol Clube

Observações

Projeto desenvolvido ao cursar Desenvolvimento Web na Trybe.

Todo desenvolvimento realizado por mim se localiza na pasta app/backend/src. As outras partes desse projeto foram providas pela Trybe

Contexto

Exemplo app front O TFC é um site informativo sobre partidas e classificações de futebol! ⚽️

Nesse projeto, é construído um back-end dockerizado utilizando modelagem de dados através do Sequelize. O desenvolvimento respeita regras de negócio providas no projeto e a API é capaz de ser consumida por um front-end já provido nesse projeto.

Para adicionar uma partida é necessário ter um token, portanto a pessoa deverá estar logada para fazer as alterações.

O back-end implementa regras de negócio para popular adequadamente a tabela disponível no front-end que será exibida para a pessoa usuária do sistema.


Técnologias e conhecimentos colado em prática

  • Docker;
  • TypeScript;
  • Node e Express;
  • Mocha, Chai e Sinnon
  • Sequelize e MySql;
  • Json Web Token;
  • Utilizar conceitos da Programação Orientada a Objetos e Conceitos de SOLID;
  • Arquitetura MVC e API RESTful.

Executando aplicação

É necessário possuir o Git e Docker Compose ^v1.29
Abrindo o terminal, execute:

git clone [email protected]:jonatasqueirozlima/trybe-futebol-clube.git
cd trybe-futebol-clube
npm install && npm run compose:up

O Frontend está disponível na url: http://localhost:3000/


Executando os testes

Para rodar testes de cobertura no Backend, estando na pasta app/backend/ execute o comando:

npm run test:coverage

Endpoints do servidor no Backend

Visualizar

1 - Endpoint POST /login

  • O endpoint é capaz de realizar um login e retornar um token;

  • O corpo da requisição deverá ter o seguinte formato:

    {
      "email": "[email protected]",
      "password": "secret_admin"
    }
  • O campo email é obrigatório e deve ser válido no banco de dados.

  • O campo password é obrigatório e deve ser válido no banco de dados.

  • Caso 'email' e 'password' estejam corretos, retorna o status 200 e um token válido.

2 - Endpoint GET /login/validate

  • O endpoint retorna o tipo de acesso do usuário cadastrado. Devendo retornar o status 200, com os dados no corpo.

  • Este endpoint nessecita de um campo authorization no header da requisição com um token válido gerado no endpoints POST /login.

3 - Endpoint GET /teams

  • O endpoint retorna um array com todos os temes cadastrados. Devendo retornar o status 200, com os dados no corpo.

4 - Endpoint GET /teams/:id

  • O endpoint retorna um time com base no id da rota. Devendo retornar o status 200 ao fazer uma requisição com um time existente (ex: /teams/1).

5 - Endpoint GET /matches

  • O endpoint retorna um array com todos os jogos cadastrados. Devendo retornar o status 200, com os dados no corpo.

6 - Endpoint GET /matches?inProgress=true

  • O endpoint retorna um array com todos os jogos cadastrados que a partida ainda esteja em andamento. Devendo retornar o status 200, com os dados no corpo.

7 - Endpoint GET /matches?inProgress=false

  • O endpoint retorna um array com todos os jogos cadastrados que a partida já tenha acabado. Devendo retornar o status 200, com os dados no corpo.

8 - Endpoint POST /matches

  • O endpoint adiciona uma nova partida ao banco de dados;

  • Este endpoint nessecita de um campo authorization no header da requisição com um token válido gerado no endpoints POST /login.

  • O corpo da requisição deverá ter o seguinte formato:

    {
      "homeTeam": 16,
      "awayTeam": 8,
      "homeTeamGoals": 2,
      "awayTeamGoals": 2
    }
  • O campo homeTeam deve ser o id de um time válido. Ele é obrigatório.

  • O campo awayTeam deve ser o id de um time válido. Ele é obrigatório.

  • O campo homeTeam não pode ser igual ao campo awayTeam.

  • O campo homeTeamGoals é obrigatório.

  • O campo awayTeamGoals é obrigatório.

  • Caso esteja tudo certo, retorna o status 201 e a nova partida no corpo.

9 - Endpoint PATCH /matches/:id/finish

  • O endpoint finaliza uma partido em andamento disponibilizada pelo id da rota.

  • Retorna o status 200 e o seguinte corpo:

    { "message": "Finished" }

10 - Endpoint PATCH /matches/:id

  • O endpoint atualiza uma partida no banco de dados disponibilizada pelo id da rota.

  • O corpo da requisição deverá ter o seguinte formato:

    {
      "homeTeamGoals": 3,
      "awayTeamGoals": 1
    }
  • O campo homeTeamGoals é obrigatório.

  • O campo awayTeamGoals é obrigatório.

  • Caso esteja tudo certo, retorna o status 200 e o seguinte corpo:

    { "message": "Successfully updated" }

11 - Endpoint GET /leaderboard

  • O endpoint retorna um array com o placar das partidas finalizadas de todos os times. Devendo retornar o status 200, com os dados no corpo.

-Obs: todas as informações do placar são fornecidas através de regras de negócio no backend, o frontend é respnsável apenas por reenderizar essas informações.

12 - Endpoint GET /leaderboard/home

  • O endpoint retorna um array com o placar das partidas finalizadas de todos os times em casa. Devendo retornar o status 200, com os dados no corpo.

-Obs: todas as informações do placar são fornecidas através de regras de negócio no backend, o frontend é respnsável apenas por reenderizar essas informações.

13 - Endpoint GET /leaderboard/away

  • O endpoint retorna um array com o placar das partidas finalizadas de todos os times visitantes. Devendo retornar o status 200, com os dados no corpo.

-Obs: todas as informações do placar são fornecidas através de regras de negócio no backend, o frontend é respnsável apenas por reenderizar essas informações.


Navegando na aplicação

Login
Primeiro, se autentique. No header clicando no botão 'Login'.

Utilize as credenciais abaixo:

email: [email protected]
password: secret_admin
Partidas
[Criar partida]
No canto superior direito tem a possibilidade de criar a partida.

[Filtrar partidas]
No canto superior esquerdo tem a filtragem das partidas por 'Finalizadas' ou 'Em andamento'.

[Editar partida]
Para cada partida na tabela, possui um icone de lapis que clicando nele é possível editar os dados da respectiva partida, mudando o placar ou atualizar a partida como 'finalizada'.

OBS: não é possível editar partida que já foi finalizada.
Classificação
No header, no canto superior direito clicando no botão 'Classificação'.
Uma visão geral da situação de cada time.

É possível filtrar por classificação dos times
- Times da casa
- Times de fora
- Geral, ambos times

OBS: Os filtros do time de casa e time de fora ainda não foram implementados.

trybe-futebol-clube's People

Contributors

dashartt avatar trybe-tech-ops avatar thiago-mariotto avatar tiagopaz2000 avatar

Watchers

 avatar

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.