Skip to content

Palacio-dev/MC656

Repository files navigation

Projeto de Engenharia de Software - MC656 2S25

👥 Integrantes

Ana Beatriz Hidalgo - RA: 248238
Gabriel Cabral Romero Oliveira - RA: 247700
Lucas Palacio Almeida - RA : 236380
Lucas Ribeiro Bortoletto - RA: 173422
Maria Gabriela Lustosa Oliveira - RA: 188504

🎯 Objetivo do Projeto

Este projeto tem como objetivo desenvolver um aplicativo que forneça informações nutricionais de alimentos e auxilie os usuários na construção de uma alimentação mais equilibrada e saudável.

A proposta é analisar dados alimentares e disponibilizar ferramentas que incentivem escolhas nutricionais conscientes, permitindo que os usuários compreendam melhor como suas dietas impactam diretamente a saúde e o bem-estar.

Nesse contexto, o projeto está alinhado com os Objetivos de Desenvolvimento Sustentável (ODS) da ONU, especialmente:

  • ODS 2 – Fome Zero e Agricultura Sustentável

    2.1: Acabar com a fome e garantir o acesso a alimentos seguros, nutritivos e suficientes durante todo o ano

    2.2: Acabar com todas as formas de má-nutrição

  • ODS 3 – Saúde e Bem-Estar

    3.4: Reduzir as doenças não transmissíveis por meio da prevenção e promoção da saúde

    3.5: Fortalecer a prevenção do uso nocivo de substâncias, incluindo o consumo prejudicial de alimentos ultraprocessados

Ao alinhar dados nutricionais com esses objetivos globais, o projeto busca contribuir para a promoção de hábitos alimentares mais saudáveis e para uma melhor compreensão da relação entre nutrição e qualidade de vida.

⚙️ Como Executar

Scripts:

  1. Clone o repositório
     git clone https://github.com/Palacio-dev/MC656.git
     cd MC656/nutri.me
    
  2. Instale as Dependências
    npm install 
    
  3. Faça o build
    npm run build  
    
  4. Agora faça as intalações necessarias para a api
    cd ../api_tudogostoso
    npm install
    
  5. Agora você pode rodar os dois com o unico comando ao voltar na raiz do projeto
    cd ..
    npm start
    
  6. Para rodar os testes, execute
    cd /nutri.me
    npm test 
    

🧱 Descrição da Arquitetura

Estilos

Mobile App — MVVM (Model-View-ViewModel)

O frontend segue o padrão MVVM, que separa a lógica de apresentação da lógica de negócios, facilitando a testabilidade e a reutilização de código.

  • Model: Representa os dados e a lógica de negócios (integração com a API, estados da aplicação).
  • View: Interface com o usuário, que foi construída em React, é responsável por exibir as informações e capturar interações.
  • ViewModel: Atua como intermediário entre a View e o Model, processando os dados e notificando a interface sobre mudanças de estado.

Aqui está uma visão de como faremos a organização dos arquivos:

nutri.me/src
├── components    # Views
├── hooks         # ViewModel (lógica)
├── pages         # Telas principais
├── services      # Model (Requisição de apis)
├── testes        # Testes automaticos
└── types         # Tipos próprios criados

Backend — Firebase

No projeto para a estruturação do backend foi usado o Firebase (https://firebase.google.com/?hl=pt-br) para de forma pratica e rapida realizar a authenticação do usuario e salvar/resgatar dados necessarios. Além de permitir um facil deploy do nossa aplicação.

  • Firebase Auth: usando autenticação pelo google e manual com escrita de email e senha propria
  • Firestore Database: estuturação dos nossos dados e criação das regras para quem altera e acessa esses dados

O backend foi isolado ao apenas se conectar com o frontend usando os codigos em model (indicado pela pasta services)

A pasta backend tem os scripts que permitiu extrair os dados de alimentos (tbca_clean) e criar o csv Alimentos, e em seguida com o script import.js foram enviados para o firebase.

API tudo gostoso

Como o site tudo gostoso aplamente conhecido para pesquisa de receitas, utilizamos a api criado no repositorio: https://github.com/carol-caires/receitas-web-scrapper Para a sua utilização clonamos o repositorio na pasta api_tudogostos, realizando algumas alterações para que esteja atualizada e funcionando completamente com o nosso frontend. Sendo que toda comunicação para a nossa aplicação é feita pelo model.


Diagrama C4 (Contexto, Container, e Componentes)

A4 - C4 drawio

Para implementar a arquitetura proposta para Mobile App (frontend) cada um dos componentes abaixo deve ser implementado para cada uma das cinco features planejadas:

  • View: Componente em React/TypeScript responsável pela interface e interação com o usuário. Ele exibe formulários de inserção de texto, listas, botões, dentre outros elementos. Ex.:

    • Login View tem campos de e-mail/senha e botões de entrar/cadastrar.
    • Shopping List View exibe lista de compras, permite adicionar/remover itens ou marcar como “comprado”.
    • Receitas View: mostra receitas, filtros e botão de “adicionar ingredientes à lista de compras”.
    • Nutrição de Alimentos View: campo de busca de alimento pelo nome e visualização das informações nutricionais.
    • Planejador de Refeições View: calendário semanal/mensal em que o usuário monta o cardápio.
  • Hook: Contém validações, regras de uso e transformação de dados, além de coordenar chamadas ao Model e atualiza o estado vindo da View. Ex.:

    • Login Hook: recebe credenciais da View, valida dados, chama o Model para autenticar e devolve para a View se o login foi bem-sucedido ou não.
    • Shopping List Hook: recebe ações da View (adicionar item, riscar, remover), decide como atualizar a lista e chama o Model para executar essas mudanças.
    • Receitas Hook: dispara a buscas de receitas e pede ao Model para enviar ingredientes para a lista de compras.
    • Nutrição de Alimentos Hook: pega o nome do alimento digitado, chama o Model, manda o retorno de nutrientes e calorias para a View.
    • Planejador de Refeições Hook: recebe as ações de criar/editar cardápios e coordena salvamento por meio do Model.
  • Model: faz acesso a dados, integração com backend, mapeia requsições e respostas, além de manter o estado atual do usuário logado, da lista e do cardápio, por exemplo. Ex.:

    • Login Model: envia credenciais para o backend, recebe dados de usuário e atualiza o estado de autenticação.
    • Shopping List Model: faz requisições para criar, atualizar ou buscar a lista de compras no banco.
    • Receitas Model: consulta o backend para receitas (API) e gerencia as receitas associadas ao usuário.
    • Nutrição de Alimentos Model: solicita dados nutricionais de um alimento no banco, devolvendo-o ao Hook.
    • Planejador de Refeições Model: envia e atualiza os planos de refeições do backend e recupera o cardápio salvo quando o usuário abre o app.

Padrão de Projeto — Strategy no Planejador de Refeições

O Planejador de Refeições utiliza o padrão Strategy para permitir a seleção dinâmica de diferentes interfaces de planejamento. Esse padrão facilita a extensibilidade e a personalização das estratégias sem alterar o código principal, o que permite uma fácil alteração entre a visualização diária, semanal e mensal do planejador.

Estrutura:

  1. Interface Base (MealPlannerStrategy): define o contrato que todas as estratégias devem seguir.
  2. Estratégias Concretas: cada forma de visualizar o planejador é encapsulada em sua própria classe
  3. ViewModel como Contexto do Strategy: O MealPlannerViewModel mantém a estratégia ativa, e oferece métodos para alternar entre elas
  4. View Genérica e Desacoplada: o componente React (MealPlannerView) não conhece detalhes de cada visão. Assim, o componente continua idêntico, independentemente da estratégia selecionada.

Vantagens:

  • Permite adicionar novas estratégias sem alterar o código existente.
  • Facilita a adaptação a diferentes perfis de usuário.
  • Cada visão fica isolada em sua própria classe.

📄 Licença

Este projeto é de uso acadêmico e está sujeito às diretrizes da disciplina MC656 da Unicamp oferecida no segundo semestre de 2025.

Importante que os dados utilizados nesse repositorio foram extraidos de https://github.com/carol-caires/receitas-web-scrapper e da pesquisa (tbca da usp), e se forem utilizados estão sujeito ás diretirzes impostas pelos reponsaveis de ambos os dados

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors