Coder Social home page Coder Social logo

rafaelftourinho / tfc Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.0 0.0 702 KB

Projeto fullstack feito para consulta e construção de uma tabela de um campeonato de futebol. Construção feita através de API Restful com aplicação de POO e SOLID em docker, utilizando Sequelize para consulta no banco de dados MySQL, Node.Js para a parte de backend e React para a parte de Frontend.

Dockerfile 0.26% JavaScript 49.79% TypeScript 33.01% Shell 1.74% HTML 1.59% CSS 13.61%
mysql express nodejs react sequelize typescript api-restful docker poo solid

tfc's Introduction

GitHub language count GitHub Top Language GitHub last commit

Boas vindas ao repositório do projeto Trybe Futebol Clube, mais conhecido como TFC

Módulo: DESENVOLVIMENTO BACK-END

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;



Habilidades

  • Realizar operações assíncronas utilizando callbacks;
  • Realizar operações assíncronas utilizando Promises;
  • Ler e escrever arquivos localmente com NodeJS;
  • Escrever seus próprios scripts que criam e consomem Promises;
  • Reescrever código que usa callbacks para que use Promises;
  • Realizar chamadas de funções de forma consciente;
  • Entender os conceitos básicos de como o JavaScript funciona;
  • Detectar e solucionar problemas no código de forma mais objetiva;
  • Entender a diferença entre execução síncrona e assíncrona;
  • Entender o que é o HTTP, o que é uma API e o que os dois têm a ver com o Express;
  • Escrever APIs utilizando Node e Express;
  • Entender a estrutura de uma aplicação Express e como organizar seu código;
  • Criar rotas e aplicar middlewares;
  • Utilizar ORM Sequelize para criação de queries;
  • Utilizar o Paradigma de Orientação a Objetos (POO);
  • Utilizar o princípio SOLID;
  • Utilizar o TDD para confeção de testes e funções;
  • Utilizar o BDD para testar camada Service;
  • Utilizar o Docker para rodar separadamente os ambientes.

O que foi desenvolvido

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.


Instruções para instalar e rodar os testes de cada requisito

# Clone o repositório
  git clone [email protected]:rafaelftourinho/TFC.git
# Entre na pasta do repositório que você acabou de clonar:
  cd TFC
# Entre na parte de backend do projeto
  cd ./app/backend
# Instale as dependências e inicialize o projeto
  npm install
# Entre no Vs Code para verificar os arquivos usando o atalho no terminal:
  code .
#Para iniciar o projeto, execute o comando:
  docker compose up -d
# Para rodar os tests use o atalho no terminal:
  npm run test
# Para rodar os testes criados:
  cd ./app/backend/ && npm run test:coverage

Detalhes

Estrutura do projeto

O projeto é composto de 4 entidades importantes para sua estrutura:

1️⃣ 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 porta 3002 do localhost;
  • 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.

2️⃣ 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 em app/backend/packages.npm.

3️⃣ 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 site http://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.

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;
  • Você deve configurar as Dockerfiles corretamente nas raízes do front-end e back-end, para conseguir inicializar a aplicação;
Rotas

1️⃣ 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.

2️⃣ 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.

3️⃣ 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.

4️⃣ 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

tfc's People

Contributors

rafaelftourinho avatar trybe-tech-ops avatar

Stargazers

 avatar  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.