O FlexIt é um website voltado para o controle de uma vida saudável, oferecendo funcionalidades como gerenciamento de dietas, controle de treinos, e acompanhamento de métricas pessoais como peso e altura. Ele foi projetado para ajudar as pessoas a alcançarem seus objetivos de saúde e fitness de maneira organizada e eficiente.
- Dietas: Ferramenta para criação e acompanhamento de dietas personalizadas.
- Controle de treinos: Gestão e monitoramento de treinos, com a possibilidade de criar e seguir planos de exercícios.
- Métricas: Métricas pessoais, como peso e altura...
- Frontend: React e Vite
- Backend: Node.js (NestJS)
- Banco de Dados: PostgreSQL
- Serviços Adicionais:
- Docker
- SonarQube
- Jenkins (CI/CD)
- TDD com Jest
Optamos por uma arquitetura monolítica para o projeto FlexIt, que combina o frontend em ReactJS e o backend em NestJS. A escolha da arquitetura monolítica foi feita pela simplicidade e facilidade de integração, considerando o escopo do projeto e o tempo disponível para desenvolvimento. Essa abordagem permite um gerenciamento mais centralizado e uma implantação mais direta, ideal para projetos acadêmicos com um ciclo de vida limitado.
A equipe de trabalho é composta por:
- Ruan Cardozo: Responsável pelo desenvolvimento do backend,frontend e banco de dados do módulo Treinos.
- Guilherme Elias: Responsável pelo desenvolvimento do backend, frontend e banco de dados do módulo de Métricas.
- Guilherme Machado: Responsável pelo desenvolvimento do frontend, backend e banco de dados do móudlo de Dietas.
Como trabalharemos com sprints, cada sprint terá suas tarefas distribuídas entre os colaboradores conforme suas responsabilidades. A distribuição será feita de forma a garantir a colaboração eficiente e a entrega de cada funcionalidade dentro do prazo estabelecido.
Cada sprint terá como objetivo entregar valor através do desenvolvimento dos principais módulos do sistema. A equipe está dividida com foco nas funcionalidades de Treinos, Cadastro de Usuários, Métricas e Dietas, conforme detalhado abaixo:
-
Sprint 1 (15/08/2024 - 26/09/2024)
- Ruan Cardozo: Desenvolvimento dos módulos de Treinos e Cadastro de Usuários/Autenticação.
- Guilherme Elias: Implementação das Métricas de desempenho e acompanhamento.
- Guilherme Machado: Desenvolvimento do módulo de Dietas, incluindo a criação de planos alimentares personalizados.
-
Sprint 2 ([Data de Início] - [Data de Término])
- Ruan Cardozo: Continuação e refinamento dos módulos de Treinos e Cadastro de Usuários.
- Guilherme Elias: Expansão das funcionalidades de Métricas, adicionando novos indicadores e visualizações.
- Guilherme Machado: Aperfeiçoamento do módulo de Dietas, com novas funcionalidades para melhor personalização e acompanhamento nutricional.
-
Sprint 3 ([Data de Início] - [Data de Término])
- Ruan Cardozo: Finalização dos módulos de Treinos e Cadastro de Usuários, garantindo usabilidade e integração com o restante do sistema.
- Guilherme Elias: Otimização e finalização das Métricas, com foco em performance e precisão dos dados.
- Guilherme Machado: Conclusão do módulo de Dietas, com integração completa ao sistema e suporte a atualizações de planos alimentares.
Cada sprint será focado em entregas incrementais que agregam valor ao sistema, alinhando-se com os objetivos do projeto de fornecer uma solução completa e eficiente para a gestão de treinos, dietas e métricas de saúde.
- Agenda de Atividades
- Dashboard Personalizados
Aqui estão alguns requisitos funcionais e não funcionais para o projeto FlexIt:
-
Cadastro de Usuários:
- O sistema deve permitir que usuários se cadastrem fornecendo nome, email, senha, e informações básicas como idade, peso, e altura.
- Deve permitir o login e recuperação de senha.
-
Gerenciamento de Dietas:
- O usuário deve ser capaz de criar e gerenciar planos de dieta personalizados, com a opção de adicionar e editar refeições diárias.
- O sistema deve permitir a visualização do progresso nutricional, como calorias e macronutrientes consumidos.
-
Controle de Treinos:
- O usuário deve poder criar, editar, e acompanhar planos de treino, incluindo exercícios, séries, repetições e descanso.
- O sistema deve permitir registrar o desempenho em cada treino e mostrar o progresso ao longo do tempo.
-
Acompanhamento de Métricas Pessoais:
- O sistema deve permitir que os usuários registrem e acompanhem métricas pessoais como peso, altura, IMC, e medidas corporais.
- Deve oferecer gráficos e relatórios para visualização do progresso dessas métricas.
-
Agenda de Atividades (Opcional):
- O sistema deve ter uma agenda onde o usuário possa planejar seus treinos e refeições, recebendo lembretes e notificações.
-
Dashboard Personalizado (Opcional):
- O usuário deve ter acesso a um dashboard com uma visão geral do seu progresso, incluindo indicadores de desempenho e alertas personalizados.
-
Usabilidade:
- A interface deve ser intuitiva, fácil de navegar, com um design responsivo que se adapte a diferentes dispositivos, incluindo smartphones e tablets.
-
Segurança:
- Deve haver criptografia de dados sensíveis, como senhas, e o sistema deve implementar autenticação segura com tokens.
Esses requisitos oferecem uma base sólida para o desenvolvimento do FlexIt, cobrindo as principais funcionalidades necessárias e garantindo a qualidade do sistema.
-
Camada de Apresentação (Frontend)
- Tecnologia: React
- Descrição: Esta camada é responsável pela interface do usuário (UI) e pela interação com o usuário. O frontend é construído em React, uma biblioteca JavaScript para a construção de interfaces de usuário. A aplicação React consome a API RESTful fornecida pelo backend NestJS para obter e enviar dados.
-
Funcionalidades:
- Exibição de dados dinâmicos vindos do backend.
- Formulários para criação, leitura, atualização e exclusão (CRUD) de dados.
- Roteamento no lado do cliente para navegação entre diferentes partes da aplicação.
-
Camada de Aplicação (Backend)
- Tecnologia: NestJS
- Descrição: Esta camada implementa a lógica de negócios da aplicação e serve como intermediário entre o frontend e o banco de dados. O backend é construído em NestJS, um framework Node.js que segue uma arquitetura modular e orientada a objetos.
-
Funcionalidades:
- Controladores: Definem as rotas HTTP e mapeiam essas rotas para funções específicas que processam as requisições do cliente.
- Serviços: Contêm a lógica de negócios, como validação de dados, processamento de pedidos, e interação com repositórios.
- Repositórios: Gerenciam o acesso ao banco de dados, utilizando um ORM (por exemplo, TypeORM) para realizar operações CRUD.
- Autenticação e Autorização: Implementação de mecanismos de segurança, como JWT (JSON Web Token) para controle de acesso.
-
Camada de Persistência (Banco de Dados)
- Tecnologia: PostgreSQL
- Descrição: Esta camada é responsável pelo armazenamento e gerenciamento de dados persistentes. O PostgreSQL é um banco de dados relacional que armazena os dados da aplicação em tabelas.
-
Funcionalidades:
- ORM (TypeORM): Utilizado pelo NestJS para mapear as tabelas do banco de dados em entidades de objetos dentro do código. Isso facilita a interação com o banco de dados de forma orientada a objetos.
- Migrações: Gerencia mudanças na estrutura do banco de dados, permitindo atualizações consistentes ao longo do ciclo de vida da aplicação.
- Consultas e Operações CRUD: Executadas pelos repositórios para criar, ler, atualizar e excluir dados no banco de dados.
Para executar o projeto você precisa do docker instalado em sua máquina e um ambiente de desenvolvimento linux.
Para executar o projeto FlexIt, siga as instruções abaixo:
-
Clone o repositório para sua máquina local;
git clone <url>
-
Acesse a pasta do projeto;
cd flex-it-proj
-
Crie a rede no docker;
docker network create flex-it-dev
-
Execute o comando abaixo para subir o banco de dados na pasta database;
docker compose -f docker-compose-database.yml up --build
-
Execute o comando abaixo para subir o backend na pasta backend;
docker compose -f docker-compose-backend.yml up --build
-
Execute o comando abaixo para subir o frontend na pasta frontend;
docker compose -f docker-compose-frontend.yml up --build
-
Acesse o frontend em http://localhost:5173 e o backend em http://localhost:8030;
-
Para parar os containers execute o comando abaixo;
docker compose -f docker-compose-frontend.yml down docker compose -f docker-compose-backend.yml down docker compose -f docker-compose-database.yml down
-
Para remover a rede execute o comando abaixo;
docker network rm flex-it-dev
Com essas instruções, você poderá executar o projeto FlexIt em sua máquina local e começar a explorar suas funcionalidades.