Skip to content

Acad Game é uma plataforma gameficada focada no público que frequenta academias diariamente e que têm o intuito de competir com outras pessoas e amigos, compartilhar o progresso e persistir na evolução na academia por meio do incentivo de conquistas.

License

Notifications You must be signed in to change notification settings

Chbmleao/AcadGame

 
 

Repository files navigation

Scarab

🏋️ Acad Game é uma plataforma gameficada que visa engajar mais ao processo de frequentar e evoluir na academia 🏋️

🤼 Acad Game | Share - Persist - Compete 🤼


Membros e Papeis

  • Alan Augusto [Front-end Developer | UI/UX]
  • Carlos Henrique Brito Malta Leão [Back-end Developer]
  • Gabriel Bifano Freddi [Full Stack Developer]
  • Pedro Oliveira Guedes [Back-end Developer | DB Engineer]
  • Vinícius Alves de Faria Resende [Full Stack Developer]

Funcional

Objetivo

Acad Game é uma plataforma gameficada focada no público que frequenta academias diariamente e que têm o intuito de competir com outras pessoas e amigos, compartilhar o progresso e persistir na evolução na academia por meio do incentivo de conquistas.

Principais Features

Entre as principais features da plataforma estão:

  • Criação de conta na plataforma
  • Criação de ficha de exercícios
  • Conexão com outros usuários da plataforma
  • Ranking semanal das conexões
  • Ranking semanal geral da plataforma
  • Área de conquistas

Tecnologias

Front-end

JavaScript      Typescript      React      Sass

Linguagem de Programação: TypeScript
Framework de UI: ReactJs
Bundler: Parcel ou Webpack + Babel
CSS pre processor: SASS
Testes unitários: Jest + react-testing-library
Testes de integração: Cypress
Deployment: Cloudflare Pages ou Vercel ou Netlify
CI: GitHub Actions
Linters: ESLint + Prettier

Back-end

JavaScript      Typescript      Node.js      Express

Linguagem de Programação: TypeScript
Engine: NodeJs
Framework: Express
ORM: Sequelize
Banco de Dados: MySQL
Testes unitários: Jest
Deployment: Heroku
CI: GitHub Actions
Linters: ESLint + Prettier

Backlog - Produto

  • História: Eu, como frequentador de academia, quero criar uma conta no Acad Game para melhorar minha experiência de exercícios físicos.

  • História: Eu, como usuário do Acad Game, quero ser capaz de fazer login na minha conta para usufruir dos benefícios do aplicativo.

  • História: Eu, como usuário do Acad Game, quero ser capaz de acessar meu perfil, para verificar minhas conquistas e algumas configurações da minha conta.

  • História: Eu, como usuário do Acad Game, quero ser capaz de visualizar minha ficha de exercícios atual, para que possa manter controle da minha rotina na academia.

  • História: Eu, como usuário do Acad Game, quero ser capaz de editar qualquer um dos exercícios da minha ficha, para que a carga e as repetições sejam compatíveis com minha aptidão física.

  • História: Eu, como usuário do Acad Game, quero ser capaz de visualizar o ranking semanal de todos os usuários do aplicativo e de meus amigos, para saber como me situo em relação aos outros quanto a dedicação e esforço.

  • História: Eu, como usuário de Acad Game, quero receber diferentes conquistas divertidas, o que seria mais uma fonte de motivação para a realização dos meus exercícios diários e minha evolução pessoal na academia.

  • História: Eu, como usuário do Acad Game, quero poder adicionar amigos de academia à minha rede para me manter melhor motivado em meus treinos.

  • História: Eu, como usuário do Acad Game, quero ser capaz de compartilhar minhas novas conquistas de treino em minhas redes sociais.

  • História: Eu, como usuário do Acad Game, quero enviar fotos de perfil personalizadas ao aplicativo para não ficar limitado somente aos ícones pré-definidos.

  • História: Eu, como usuário dedicado ao Acad Game, quero poder cadastrar novos exercícios em minha ficha que não estão presentes no banco de dados.

  • História: Eu, como usuário assíduo do Acad Game, quero ver minhas estatísticas de constância nos treinos, bem como evolução de carga e repetições.

  • História: Eu, como usuário do Acad Game, quero ser capaz de registrar como estou me sentindo física e mentalmente após completar uma ficha de exercícios.

  • Hitória: Eu, como fã do time Acad Game, quero poder enviar críticas, sugestões e elogios aos desenvolvedores através de um formulário simples e de fácil acesso.

  • História: Eu, como usuário do Acad Game, quero criar desafios semanais e mensais personalizados com os meus amigos.


Backlog - Sprint 1

Tarefas técnicas:

  • Criação do repositório no GitHub [Vinícius Alves]
  • Modelar o banco de dados [Pedro Guedes, Vinícius Alves, Carlos Henrique]
  • Preparar ambiente no Heroku

História: Eu, como frequentador de academia, quero criar uma conta no Acad Game para melhorar minha experiência de exercícios físicos.

  • Desenvolver wireframe da tela de criação de conta [Alan Augusto]
  • Desenvolver o frontend da tela de criação de conta [Vinícius Alves]
  • Desenvolver o frontend da tela de criação de conta [Gabriel Bifano]
  • Criar a tabela de usuários do sistema [Pedro Guedes]
  • Desenvolver rota de criação de usuário [Carlos Henrique]

História: Eu, como usuário do Acad Game, quero ser capaz de fazer login na minha conta para usufruir dos benefícios do aplicativo.

  • Desenvolver wireframe da tela de login [Gabriel Bifano]
  • Desenvolver o frontend da tela de login [Vinícius Alves]
  • Desenvolver o frontend da tela de login [Alan Augusto]
  • Desenvolver sistema de autenticação por JWT (Json Web Token) [Pedro Guedes]
  • Desenvolver rota de login do usuário [Carlos Henrique]

História: Eu, como usuário de Acad Game, quero receber diferentes conquistas divertidas, o que seria mais uma fonte de motivação para a realização dos meus exercícios diários e minha evolução pessoal na academia.

  • Desenvolvimento das ideias de cada conquistas [Vinícius Alves]
  • Desenvolver o front end do quadro de conquistas [Alan Augusto]
  • Desenvolver o front end do quadro de conquistas [Gabriel Bifano]
  • Desenvolver rota de retorno para dados das conquistas [Pedro Guedes]
  • Desenvolver rota de retorno para dados das conquistas [Carlos Henrique]

História: Eu, como usuário do Acad Game, quero ser capaz de acessar meu perfil, para verificar minhas conquistas e algumas configurações da minha conta.

  • Desenvolver wireframe da tela de perfil [Vinícius Alves]
  • Desenvolver o frontend da tela de perfil [Alan Augusto]
  • Desenvolver o frontend da tela de perfil [Gabriel Bifano]
  • Desenvolver rota para retorno dos dados do perfil [Pedro Guedes]
  • Desenvolver rota para retorno dos dados do perfil [Carlos Henrique]

História: Eu, como usuário do Acad Game, quero ser capaz de visualizar minha ficha de exercícios atual, para que possa manter controle da minha rotina na academia.

  • Desenvolver wireframe da ficha de exercícios [Alan Augusto]
  • Desenvolver o frontend da ficha de exercícios [Vinícius Alves]
  • Desenvolver o frontend da ficha de exercícios [Gabriel Bifano]
  • Criar uma tabela armazenando os exercícios da ficha do usuário [Pedro Guedes]
  • Desenvolver rota para retorno dos exercícios da lista [Carlos Henrique]

História: Eu, como usuário do Acad Game, quero ser capaz de editar qualquer um dos exercícios da minha ficha, para que a carga e as repetições sejam compatíveis com minha aptidão física.

  • Desenvolver wireframe da tela de edição da ficha de exercícios [Alan Augusto]
  • Desenvolver o frontend da tela de edição da ficha de exercícios [Vinícius Alves]
  • Desenvolver o frontend da tela de edição da ficha de exercícios [Gabriel Bifano]
  • Desenvolver rota para retorno dos exercícios da lista [Carlos Henrique]

História: Eu, como usuário do Acad Game, quero ser capaz de visualizar o ranking semanal de todos os usuários do aplicativo e de meus amigos, para saber como me situo em relação aos outros quanto a dedicação e esforço.

  • Desenvolver wireframe da tela ranking [Alan Augusto]
  • Desenvolver o frontend da tela de ranking [Vinícius Alves]
  • Desenvolver o frontend da tela de ranking[Gabriel Bifano]
  • Criar tabela com as posições semanais de cada usuário [Pedro Guedes]
  • Desenvolver rota de consulta dos usuários com maior pontuação na semana [Carlos Henrique]

História: Eu, como usuário do Acad Game, quero poder adicionar amigos de academia à minha rede para me manter melhor motivado em meus treinos.

  • Desenvolver wireframe da tela de amigos [Gabriel Bifano]
  • Desenvolver frontend da tela de amigos [Vinícius Alves]
  • Desenvolver frontend da tela de amigos [Alan Augusto]
  • Criar tabela com os amigos de cada usuário [Pedro Guedes]
  • Criar rota de consulta e adição dos amigos do usuário [Carlos Henrique]

Arquitetura Hexagonal

O conceito de Arquitetura Hexagonal foi proposto por Alistair Cockburn, por volta dos anos 90. A ideia dessa arquitetura é construir sistemas que favorecem a reusabilidade de código, alta coesão, baixo acoplamento, independência de tecnologia e que são fáceis de serem testados. Nesse sentiddo, uma Arquitetura Hexagonal divide as classes de um sistema em dois grupos principais:

  • Classes de domínio, relacionadas diretamente com o negócio ddo sistema
  • Classes relacionadas com infraestrutura, tecnologias e reponsáveis pela integração com sistemas externos.

O sistema do Acad Game adotou a Arquitetura Hexagonal porque ela garante uma série de vantagens. Primeiramente, esta permite que os desenvolvedores mantenham o foco no domínio do código, que representa o propósito do sistema e é responsável pela geração de valor. Em segundo lugar, essa arquitetura também melhora a testabilidade do código, já que o domínio do projeto é livre e tecnologia, fica mais fácil e prático de testá-lo. Por fim, essa independência do domínio também facilita a troca de bibliotecas, frameworks e bancos de dados, caso necessário.

A seguir, temos a estrutura das pastas do backend do sistema, que impelementa a Arquitetura Hexagonal. Essa estrutura está localizada dentro da pasta server, que armazena todos os arquivos e diretórios relativos ao desenvolvimento do backend da aplicação.

domains A pasta de domínio tem por objetivo armazenar cada uma das entidades do sistema em formato de código puro. Em outras palavras, ela conterá as definições de classes das entidades, bem como os principais métodos relacionados a elas.
A ideia é que os elementos aqui presentes não tenham dependências externas, principalmente de tecnologias que possam ser alteradas constantemente.
O padrão de nomenclatura adotado para os arquivos contidos nessa pasta é: "<nomeDaEntidade>Domain".

gates

Basicamente, essa pasta contém os "serviços" ou "portas" do aplicativo. São arquivos de código com funções limpas de dependências externas, que ainda fazem parte do domínio da aplicação, facilitando a comunicação entre o domínio "puro" (aquele que é referenciado pelas rotas de acesso) e os dados armazenados pelo SGBD escolhido.
Durante o desenvolvimento do projeto, foi constatado que somente as portas de saída eram necessárias, enquanto as de entrada se mostraram redundantes. Dessa forma, os arquivos aqui presentes são nomeados como "<nomeDaEntidade>ExitGate".
Foi atribuído aos arquivos dessa pasta realizarem o tratamento dos dados recuperados do SGBD.

adapters

Essa pasta armazena os arquivos de código que fazem a comunicação com o mundo exterior, realizando o consumo das entidades presentes na pasta "domains". Esses adaptadores se dividem entre as rotas de comunicação com o mundo exterior (requisições HTTP, por exemplo) e arquivos de comunicação com o SGBD selecionado.
No geral, espera-se que as rotas escritas nos arquivos dessa pasta sejam curtas, preferencialmente apenas chamando um serviço codificado em "domain" e realizando o tratamento de excessão do mesmo.
O padrão de nomenclatura dos arquivos dessa pasta é: "<nomeDaEntidade>Router" (para adaptadores de requisições http por exemplo) e "<nomeDaEntidade>DBAdapter" (para adaptadores de conexão com o banco de dados).

infrastructure

Como o próprio nome sugere, cuida da infraestrutura do sistema. Nessa pasta estão arquivos de modelo de entidades no banco de dados escolhido, além de outros arquivos de configuração, como um ".env", por exemplo.

utils

Nesse diretório estão presentes arquivos úteis para o desenvolvimento, como middlewares, classes e funções auxiliares. Não é uma pasta que faz, por padrão, parte da arquitetura hexagonal, mas facilita e modulariza o desenvolvimento da aplicação.

Por fim, seguem duas figuras que representam a Arquitetura Hexagonal implementada em forma de diagramas:

Acad Game sprint 2

Acad Game sprint 2(1)


Histórias Implementadas

História: Eu, como frequentador de academia, quero criar uma conta no Acad Game para melhorar minha experiência de exercícios físicos.

  • frontend
  • backend
  • Por onde faço? host:port/signUp

História: Eu, como usuário do Acad Game, quero ser capaz de fazer login na minha conta para usufruir dos benefícios do aplicativo.

  • frontend

  • backend

  • Por onde faço? ⮕ host:port/login

História: Eu, como usuário de Acad Game, quero receber diferentes conquistas divertidas, o que seria mais uma fonte de motivação para a realização dos meus exercícios diários e minha evolução pessoal na academia.

  • frontend
  • backend

História: Eu, como usuário do Acad Game, quero ser capaz de acessar meu perfil, para verificar minhas conquistas e algumas configurações da minha conta.

  • frontend
  • backend
  • Por onde faço? ⮕ host:port/profile

História: Eu, como usuário do Acad Game, quero ser capaz de visualizar minha ficha de exercícios atual, para que possa manter controle da minha rotina na academia.

  • frontend
  • backend
  • Por onde faço? ⮕ host:port/exercisesSheets

História: Eu, como usuário do Acad Game, quero ser capaz de editar qualquer um dos exercícios da minha ficha, para que a carga e as repetições sejam compatíveis com minha aptidão física.

  • frontend
  • backend
  • Por onde faço? ⮕ host:port/exercisesSheets

História: Eu, como usuário do Acad Game, quero ser capaz de visualizar o ranking semanal de todos os usuários do aplicativo, para saber como me situo em relação aos outros quanto a dedicação e esforço.

  • frontend
  • backend
  • Por onde faço? ⮕ host:port/ranking

História: Eu, como usuário do Acad Game, quero poder adicionar amigos de academia à minha rede para me manter melhor motivado em meus treinos.

  • frontend
  • backend
  • Por onde faço? (backend) ⮕ host:expressPort/api/gymPals

About

Acad Game é uma plataforma gameficada focada no público que frequenta academias diariamente e que têm o intuito de competir com outras pessoas e amigos, compartilhar o progresso e persistir na evolução na academia por meio do incentivo de conquistas.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 51.9%
  • JavaScript 37.0%
  • SCSS 8.4%
  • Gherkin 2.4%
  • Other 0.3%