Skip to content

Commit

Permalink
Merge pull request #39 from DevsDomain/DN-63
Browse files Browse the repository at this point in the history
DN-63 <Consumo de alimentos back e front>
  • Loading branch information
itsmorais authored Oct 12, 2024
2 parents 6772d5c + d64cb29 commit 6f8139b
Show file tree
Hide file tree
Showing 7 changed files with 155 additions and 48 deletions.
6 changes: 3 additions & 3 deletions backend/src/controllers/MetricasController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ class MetricasController {
}


const calorias = parseFloat((TMB * 1.375).toFixed(2));
const proteinas = parseFloat((peso * 2.2).toFixed(2));
const gordura = parseFloat((peso * 7).toFixed(2));
const calorias = parseFloat((TMB * 3.5).toFixed(2));
const proteinas = parseFloat((peso * 2.5).toFixed(2));
const gordura = parseFloat((peso * 4.65).toFixed(2));
const carboidrato = parseFloat((peso * 4.25).toFixed(2));
const acucar = parseFloat((peso / 0.66).toFixed(2));

Expand Down
57 changes: 57 additions & 0 deletions backend/src/controllers/alimentosController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,63 @@ class AlimentosController {
});
}
}

async alimentosConsumidos(req: Request, res: Response): Promise<Response> {
try {
console.log(req.body, "BODY")
const { idUser, date } = req.body;

const userMG = await User.find({ idUser: idUser });

if (!userMG) {
return res
.status(400)
.json({ message: "Erro ao buscar usuário no mongo!" });
}

let usuarioEncontrado: any | string;

for (const usersPG of userMG) {
let buscandoUsuario = await Data.findOne({
data_atual: date,
usuario: usersPG?.id,
});
if (buscandoUsuario) {
usuarioEncontrado = buscandoUsuario;
}
}

if (!usuarioEncontrado) {
return res
.status(400)
.json({ message: "Erro ao buscar usuário nessa data!" });
}

const userMongo = await User.findById(usuarioEncontrado.usuario);
const alimentosConsumidosArray: any[] = []
if (userMongo) {
const alimentosConsumidos = userMongo.consumoAlimentos
for (const alimentos of alimentosConsumidos) {
const result = await pg.query(
`SELECT "idProduto", "nomeProduto", "Proteina", "Caloria", "Carboidrato", gordura, sodio, acucar,
$2 as tipoRefeicao, $3 as quantidade FROM public."Alimentos" where "idProduto" = $1`,
[alimentos.idAlimento, alimentos.tipoRefeicao, alimentos.quantidade]
);
if (result.rows[0]) {
alimentosConsumidosArray.push(result.rows[0]);
}
}

return res.status(202).json(alimentosConsumidosArray);
}
} catch (error: any) {
console.error("ERRO AO BUSCAR ALIMENTOS CONSUMIDOS:", error.message)
return res.status(404).json({ "ERRO": error.message });

}
return res.status(404).json("ERRO");

}
}

export default new AlimentosController();
3 changes: 3 additions & 0 deletions backend/src/routes/alimento.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ FoodRouter.post("/alimentos", AlimentoController.createAlimento);
FoodRouter.get("/alimentos",AlimentoController.buscarAlimentos);
FoodRouter.get("/findAlimento/:barcode",AlimentoController.findAlimento);
FoodRouter.post("/addAlimento/",AlimentoController.addAlimento);
FoodRouter.post("/consumidos",AlimentoController.alimentosConsumidos);





Expand Down
10 changes: 10 additions & 0 deletions frontend/src/components/BarChart/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,14 @@ export default function BarChart({ userMG }: UserProps) {
const proteinaReal = userMG?.macroReal?.Proteina || 0
const gorduraIdeal = userMG?.macroIdeal?.gordura || 0
const gorduraReal = userMG?.macroReal?.gordura || 0
const acucarReal = userMG?.macroReal?.acucar || 0
const acucarIdeal = userMG?.macroReal?.acucar || 0


let percentualCarbo = parseFloat(((carboReal / carboIdeal) * 100).toFixed(0)) || 0.5
let percentualProteina = parseFloat(((proteinaReal / proteinaIdeal) * 100).toFixed(0)) || 0.5
let percentualGordura = parseFloat(((gorduraReal / gorduraIdeal) * 100).toFixed(0)) || 0.5
let percentualAcuar = parseFloat(((acucarReal / acucarIdeal) * 100).toFixed(0)) || 0.5


return (
Expand All @@ -43,6 +47,12 @@ export default function BarChart({ userMG }: UserProps) {
color="#55AA55" unfilledColor="#38343424" borderWidth={0.5} />
<Text>{gorduraReal.toFixed(0)} / {gorduraIdeal.toFixed(0)}g</Text>
</View>
<Text>Acucar</Text>
<View style={styles.macroContainer}>
<ProgressBar animated progress={percentualGordura / 100} width={screenWidth - 120} height={13}
color="#55AA55" unfilledColor="#38343424" borderWidth={0.5} />
<Text>{gorduraReal.toFixed(0)} / {gorduraIdeal.toFixed(0)}g</Text>
</View>
</SafeAreaView>
);
}
Expand Down
124 changes: 79 additions & 45 deletions frontend/src/screens/AlimentosConsumidosScreen/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,21 @@ import axios from "axios";
import { BACKEND_API_URL } from "@env";
import styles from "./styles";
import { IAlimentos } from "../../types/AlimentosPG";
export default function AlimentosConsumidosScreen() {
import AsyncStorage from "@react-native-async-storage/async-storage";
import { IuserLogin } from "../../types/user";
import { useNavigation } from '@react-navigation/native'; // Importação da navegação
import { RootStackParamList } from "../../../types";
import { StackNavigationProp } from "@react-navigation/stack";

type ConsumidosNavigationProp = StackNavigationProp<RootStackParamList, "AlimentacaoComponent">;
type Props = {
navigation: ConsumidosNavigationProp;
};
export default function AlimentosConsumidosScreen({ navigation }: Props) {

const [alimentosConsumidos, setAlimentosConsumidos] = useState<IAlimentos[]>([]);
const [user, setUser] = useState<IuserLogin>();
const [date, setDate] = useState("");
const [totals, setTotals] = useState({
calorias: 0,
carboidrato: 0,
Expand All @@ -22,45 +35,67 @@ export default function AlimentosConsumidosScreen() {
sodio: 0,
});

useEffect(() => {
const fetchAlimentos = async () => {
try {
const response = await axios.get(`${BACKEND_API_URL}/alimentos`);
const alimentos = response.data;
setAlimentosConsumidos(alimentos);
const loadUserFromStorage = async () => {
try {
const storedUser = await AsyncStorage.getItem("user");
const storedDate = await AsyncStorage.getItem("date");

// Calcula os totais
let totalCalorias = 0;
let totalCarboidrato = 0;
let totalAcucar = 0;
let totalProteina = 0;
let totalGordura = 0;
let totalSodio = 0;
if (storedUser && storedDate) {
const user: IuserLogin = JSON.parse(storedUser)
const date = JSON.parse(storedDate);
await fetchAlimentos(user.id, date);
}

alimentos.forEach((alimento: IAlimentos) => {
totalCalorias += parseFloat(alimento.Caloria) || 0;
totalCarboidrato += parseFloat(alimento.Carboidrato) || 0;
totalAcucar += parseFloat(alimento.acucar) || 0;
totalProteina += parseFloat(alimento.Proteina) || 0;
totalGordura += parseFloat(alimento.gordura) || 0;
totalSodio += parseFloat(alimento.sodio) || 0;
});
} catch (error) {
console.error("Erro ao obter dados do AsyncStorage:", error);
}
};
const fetchAlimentos = async (id: string, date: string) => {
try {
const response = await axios.post(`${BACKEND_API_URL}/consumidos`, {
idUser: id,
date: date
});
const alimentos = response.data

setTotals({
calorias: totalCalorias,
carboidrato: totalCarboidrato,
acucar: totalAcucar,
proteina: totalProteina,
gordura: totalGordura,
sodio: totalSodio,
});
} catch (error) {
console.error("Erro ao buscar alimentos do banco de dados:", error);
}
};
setAlimentosConsumidos(alimentos);

// Calcula os totais
let totalCalorias = 0;
let totalCarboidrato = 0;
let totalAcucar = 0;
let totalProteina = 0;
let totalGordura = 0;
let totalSodio = 0;

fetchAlimentos();
}, []);
alimentos.forEach((alimento: IAlimentos) => {
totalCalorias += parseFloat(alimento.Caloria) || 0;
totalCarboidrato += parseFloat(alimento.Carboidrato) || 0;
totalAcucar += parseFloat(alimento.acucar) || 0;
totalProteina += parseFloat(alimento.Proteina) || 0;
totalGordura += parseFloat(alimento.gordura) || 0;
totalSodio += parseFloat(alimento.sodio) || 0;
});

setTotals({
calorias: totalCalorias,
carboidrato: totalCarboidrato,
acucar: totalAcucar,
proteina: totalProteina,
gordura: totalGordura,
sodio: totalSodio,
});
} catch (error) {
console.error("Erro ao buscar alimentos do banco de dados:", error);
}
};

useEffect(() => {
navigation.addListener('focus', async () => {

await loadUserFromStorage();
})
}, [navigation]);

return (
<SafeAreaView style={styles.container}>
Expand All @@ -70,9 +105,9 @@ export default function AlimentosConsumidosScreen() {
<View key={index} style={styles.itemContainer}>
<View style={styles.itemHeader}>
<Text style={styles.itemName}>{alimento.nomeProduto}</Text>
<Text style={styles.itemRefeicao}>TIPO DA REFEIÇÃO</Text>
<Text style={styles.itemRefeicao}>{alimento.tiporefeicao}</Text>
</View>
<Text style={styles.itemQuantidade}>"Quantidade"</Text>
<Text style={styles.itemQuantidade}>Quantidade: {alimento.quantidade}</Text>
<View style={styles.itemNutrients}>
<Text style={styles.nutrient}>Calorias: {alimento.Caloria} kcal</Text>
<Text style={styles.nutrient}>Carboidrato: {alimento.Carboidrato}g</Text>
Expand All @@ -85,14 +120,13 @@ export default function AlimentosConsumidosScreen() {
))}
</ScrollView>
<View style={styles.footer}>
<Text style={styles.footerText}>Calorias= {totals.calorias.toFixed(2)} kcal</Text>
<Text style={styles.footerText}>Carboidratos= {totals.carboidrato.toFixed(2)}g</Text>
<Text style={styles.footerText}>Açúcares= {totals.acucar.toFixed(2)}g</Text>
<Text style={styles.footerText}>Proteínas= {totals.proteina.toFixed(2)}g</Text>
<Text style={styles.footerText}>Gordura= {totals.gordura.toFixed(2)}g</Text>
<Text style={styles.footerText}>Sódio= {totals.sodio.toFixed(2)}mg</Text>
<Text style={styles.footerText}>Calorias = {totals.calorias.toFixed(2)} kcal</Text>
<Text style={styles.footerText}>Carboidratos = {totals.carboidrato.toFixed(2)}g</Text>
<Text style={styles.footerText}>Açúcares = {totals.acucar.toFixed(2)}g</Text>
<Text style={styles.footerText}>Proteínas = {totals.proteina.toFixed(2)}g</Text>
<Text style={styles.footerText}>Gordura = {totals.gordura.toFixed(2)}g</Text>
<Text style={styles.footerText}>Sódio = {totals.sodio.toFixed(2)}mg</Text>
</View>

</SafeAreaView>
);
}
1 change: 1 addition & 0 deletions frontend/src/screens/HomeScreen/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ const HomeScreen = ({ navigation }: Props) => {
data: date,
}
)
await setDataStorage(date);
return response.data

} catch (error: any) {
Expand Down
2 changes: 2 additions & 0 deletions frontend/src/types/AlimentosPG.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ export interface IAlimentos {
gordura: string;
sodio: string;
acucar: string;
tiporefeicao:string;
quantidade:string;

}

Expand Down

0 comments on commit 6f8139b

Please sign in to comment.