Repositório possuí projeto desenvolvido no período que estive na Trybe, abordando os conceitos de API Rest com CRUD completo em TypeScript, com utilização da ORM Sequelize, além de construir o projeto de acordo com o paradigma de orientação a objetos (POO) e SOLID. Docker para rodar o frontend, backend e database, separados e utilizando a arquitetura MSC.
Para testar a abordagem fora usados testes via Mocha, Chai, Sinon, com abordagem variando entre TDD e BDD;
- Este é um projeto desenvolvido para me ajudar a aprender
TypeScript
; - Meu terceiro projeto usando
TypeScript
; - Segundo projeto usando princípios da arquitetura SOLID;
- Segundo projeto usando princípios POO;
- Utilizei o Cliente Rest
Thunder Client
, como extensão, para visualizar o retorno do meu acesso.
Criação de uma API Rest utilizando POO e princípios SOLID com construção de CRUD utilizando Sequelize para queries e docker para rodas os ambientes de forma separada. O projeto é fullstack e representa uma simulação de uma tabela de um campeonato de futebol, com uma validação via login para saber se o usuário é admin ou não, o que libera novas features onde podemos alterar dados da partida, inserir novas partidas ou finalizar partidas em andamento. Na parte de frontend podemos filtrar os resultados, modificar e finalizar partidas, desde que seja admin, além de poder verificar a classificação geral, classificação de time mandante e de time visitante de forma separada.
-
Clone o repo:
git clone git@github.com:Ludson96/project-trybe-futebol-clube.git
-
Entre na pasta do repositório que você acabou de clonar:
cd project-trybe-futebol-clube
-
Instale as dependências e inicialize o projeto:
npm install
-
Execute o docker compose:
npm run compose:up
O npm run compose:up
script criará o banco de dados e iniciará o frontend e backend serviços.
Você pode verificar o site em localhost:3000/login
- e teste o aplicativo usando o login(usuário comum):
- email: user@user.com
- senha: secret_user
É possível:
- criar novas partidas;
- editar partidas em andamento;
- finalizar as partidas.
Estrutura do projeto
O projeto é composto de 4 entidades importantes para sua estrutura:
-
Banco de dados:
- Será 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 porta3002
dolocalhost
; - Você também pode conectar a um Cliente MySQL (Workbench, Beekeeper, DBeaver e etc), colocando as credenciais configuradas no docker-compose no serviço
db
- Será um container docker MySQL já configurado no docker-compose através de um serviço definido como
-
Back-end:
- Será o ambiente que você realizará a maior parte das implementações exigidas.
- Deve rodar na porta
3001
, pois o front-end faz requisições para ele nessa porta por padrão; - Sua aplicação deve ser inicializada a partir do arquivo
app/backend/src/server.ts
; - Garanta que o
express
é executado e a aplicação ouve a porta que vem das variáveis de ambiente; - Todas as dependências extras (tal como
joi
,boom
,express-async-errors
...) devem ser listadas emapp/backend/packages.npm
.
-
Front-end:
- O front já está concluído, não é necessário realizar modificações no mesmo. A única exceção será seu Dockerfile que precisará ser configurado.
- Todos os testes a partir do requisito de login usam o
puppeteer
para simular uma pessoa acessando o sitehttp://localhost:3000/
; - O front se comunica com serviço de back-end pela url
http://localhost:3001
através dos endpoints que você deve construir nos requisitos. - Recomendamos que sempre que implementar um requisito no back-end acesse a página no front-end que consome a implementação para validar se está funcionando como esperado.
-
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 comandonpm run compose:up
ounpm run compose:up:dev
; - Você deve configurar as
Dockerfiles
corretamente nas raízes dofront-end
eback-end
, para conseguir inicializar a aplicação;
- O
Rotas
-
Rotas de usuários:
- POST /login
- responsável por registrar o login e retornar um token de usuário.
- GET /login/validate
- responsável validar o login e retornar a 'role' do usuário.
- POST /login
-
Rotas de times:
- GET /teams
- responsável por retornar times cadastrados no DB.
- GET /teams/:id
- responsável por retornar times cadastrados no DB através do ID.
- GET /teams
-
Rotas de Partidas:
- GET /matches
- responsável por retornar todas as partidas.
- POST /matches/
- responsável por cadastrar uma partida no DB. -PATCH /matches/:id
- responsável por atualizar goas de uma partida específica
- PATCH /matches/:id/finish
- responsável por atualizar o status de uma partida em andamento para partida finalizada ('inProgress: false') no DB.
- GET /matches
-
Rotas de Líderes:
- GET /leaderboard
- responsável por retornar os líderes do campeonato (dentro ou fora de casa).
- GET /leaderboard/home
- responsável por retornar os líderes do campeonato jogando em casa.
- GET /leaderboard/away
- responsável por retornar os líderes do campeonato jogando fora de casa
- GET /leaderboard
frontend
,seeders
edocker-compose.yml
foram fornecidos pela Trybe, o dockerfile foi construído por mim.