Este foi um projeto desenvolvido na Trybe, cujo nome original é Trybe Futebol Clube (TFC). O TFC é um site informativo sobre partidas e classificações de futebol! soccer.
O Front-end desse projeto ja foi provido pela Trybe, minha responsabilidade era desenvolver uma API fazendo testes de integração (E2E) e também integrar - através do docker-compose - as aplicações para que elas funcionem consumindo um banco de dados.
Nesse projeto construi o Back-end dockerizado utilizando modelagem de dados através do Sequelize.
Para desenvolver o Back-end optei por usar o paradigma da orientação a objeto (POO), seguindo os principios do SOLID, e aproveitei tambem para colocar em pratica meus conhecimentos sobre DDD (Domain Driven Designer), dai o nome de (POO-SOLID-DDD-TFC).
Desenvolvi endpoints que estão conectados ao banco de dados seguindo os princípios do REST;
- TypeScript;
- Docker;
- Express;
- Node;
- Mysql2;
- Bcryptjs;
- cors;
- Express-async-errors;
- Mocha;
- Chai;
- Jsonwebtoken;
- Sequelize;
Clone o projeto
git clone git@github.com:yuryss98/POO-DDD-SOLID-TFC.git
Vá para o diretório do projeto:
cd POO-DDD-SOLID-TFC
Execute os seguintes comandos:
npm run compose:up -- --build
*Ou caso queria executar em modo de desenvolvimento
npm run compose:up:dev -- --build
Esses dois comandos acima vao subir 3 containers docker, um para a aplicação Front-end, outro para o Back-end e por fim um para o Banco de Dados
Depois que os containers subirem, pode acessar a rota: http://localhost:3000/login para vizualizar o funcionamento da aplicação
-- email: user@user.com
-- password: secret_user
docker exec -it app_backend sh
npm test
npm run test:coverage
Endpoints do Back-end caso queira testar usando algum framework Open Source para desenvolvimento/teste de API Clients, como Thunder Client, Insomnia, dentre outros: todos os endpoints são acessiveis a partir da rota http://localhost:3001
POST /login
-- O método POST em /login é usado para fazer login na aplicação, quando passado um usuario e senha corretos, retorna um token, esse token deve ser usado em algumas rotas da aplicação, esse endpoint aceita 2 campos, sendo eles:-- email: campo do tipo email - CAMPO OBRIGATORIO
-- password: campo do tipo texto - CAMPO OBRIGATORIO
EXEMPLO:
{
"email": "user@user.com",
"password": "secret_user"
}
{
"email": "admin@admin.com",
"password": "secret_admin"
}
GET /login/validate
-- O método GET em /login/validate é usado para validar o token do usuario, se for um token valido, retorna a role do usuario, o token deve ser passado no header da requisição, na chave AuthorizationGET /teams
-- O método GET em /teams é usado para listar todos os times da aplicação;
GET /teams/id
-- O método GET em /teams/id é usado para listar um time atraves do seu id;
GET /matches
-- O método GET em /matches é usado para listar todas as partidas;
GET /matches?inProgress=false
-- O método GET em /matches?inProgress=false é usado para listar todas as partidas finalizadas;
GET /matches?inProgress=true
-- O método GET em /matches?inProgress=true é usado para listar todas as partidas em andamento;
GET /leaderboard
-- O método GET em /leaderboard é usado para listar a classificação geral das equipes;
GET /leaderboard/home
-- O método GET em /leaderboard/home é usado para listar a classificação das equipes jogando em casa
GET /leaderboard/away
-- O método GET em /leaderboard/away é usado para listar a classificação das equipes jogando como visitante
POST /matches
-- O método POST em /matches é usado para criar uma nova partida
esse endpoint aceita 4 campos, sendo eles:
-- homeTeamGoals: campo do tipo number - CAMPO OBRIGATORIO
-- awayTeamGoals: campo do tipo number - CAMPO OBRIGATORIO
-- homeTeamId: campo do tipo number - CAMPO OBRIGATORIO
-- awayTeamId: campo do tipo number - CAMPO OBRIGATORIO
EXEMPLO:
{
"homeTeamGoals": 10,
"awayTeamGoals": 20,
"homeTeamId": 5,
"awayTeamId": 10
}
PATCH /matches/id
-- O método PATCH em /matches/id é usado para atualizar o estado da partida em andamento
esse endpoint aceita 2 campos, sendo eles:
-- homeTeamGoals: campo do tipo number - CAMPO OBRIGATORIO
-- awayTeamGoals: campo do tipo number - CAMPO OBRIGATORIO
EXEMPLO:
{
"homeTeamGoals": 10,
"awayTeamGoals": 20
}
PATCH /matches/id/finish
-- O método PATCH em /matches/id/finish é usado para finalizar uma partida em andamento
esse endpoint só precisa do id de uma partida em andamento em sua rota