Skip to content

Commit

Permalink
Funcionalidade de remoção de alimentos consumidos da dieta do usuario
Browse files Browse the repository at this point in the history
  • Loading branch information
itsmorais committed Nov 7, 2024
1 parent 7505bc7 commit 28b2c23
Showing 1 changed file with 80 additions and 56 deletions.
136 changes: 80 additions & 56 deletions backend/src/controllers/alimentosController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,11 @@ class AlimentosController {
try {
console.log("RECEBIDO");
const { barcode } = req.params;
console.log(barcode, "BARCODE BACK");

const alimentos = await pg.query(
`SELECT * FROM "Alimentos" WHERE "barcode" = $1`,
[barcode]
);
console.log(alimentos.rows);
if (alimentos.rows.length > 0) {
return res.status(201).json(alimentos.rows[0]);
} else {
Expand Down Expand Up @@ -334,7 +332,6 @@ FROM public."Alimentos" where "nomeProduto" is not null order by "nomeProduto" ;

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 });
Expand Down Expand Up @@ -401,7 +398,6 @@ FROM public."Alimentos" where "nomeProduto" is not null order by "nomeProduto" ;

const values = [id]; // Passando os parâmetros de forma segura
const alimentosFavoritos = await pg.query(query, values);
console.log(alimentosFavoritos);

if (alimentosFavoritos.rows.length === 0) {
return res
Expand Down Expand Up @@ -485,71 +481,98 @@ FROM public."Alimentos" where "nomeProduto" is not null order by "nomeProduto" ;
req: Request,
res: Response
): Promise<Response> {
const { idUser, idProduto } = req.body;

const { idUser, idProduto, date } = req.body;
try {
// Busca o usuário no MongoDB
const userMongo = await User.findOne({ idUser: idUser });

if (!userMongo) {
return res.status(404).json({ message: "Usuário não encontrado." });
}
const userPG = await User.find({ idUser: idUser });

// Filtra o alimento consumido que possui o idProduto informado
const alimentoIndex = userMongo.consumoAlimentos.findIndex(
(alimento) => alimento.idAlimento === parseInt(idProduto)
);

if (alimentoIndex === -1) {
if (!userPG) {
return res
.status(404)
.json({ message: "Alimento não encontrado nos consumidos." });
.status(400)
.json({ message: "Erro ao buscar usuários no mongo!" });
}

// Remove o alimento consumido da lista
const [alimentoRemovido] = userMongo.consumoAlimentos.splice(
alimentoIndex,
1
);
let usuarioEncontrado: any | string;

// Busca o alimento específico no banco de dados Postgres
const result = await pg.query(
`SELECT "Proteina", "Caloria", "Carboidrato", gordura, sodio, acucar
FROM public."Alimentos" WHERE "idProduto" = $1`,
[idProduto]
);
for (const usersPG of userPG) {
let buscandoUsuario = await Data.findOne({
data_atual: date,
usuario: usersPG?.id,
});

if (buscandoUsuario) {
usuarioEncontrado = buscandoUsuario;
}
}

if (!result.rows[0]) {
if (!usuarioEncontrado) {
return res
.status(404)
.json({ message: "Alimento não encontrado no banco de dados." });
.status(400)
.json({ message: "Erro ao buscar usuário no dashboardController!" });
}

const alimentoDB = result.rows[0];

// Calcula os macros a serem subtraídos com base na quantidade removida
userMongo.macroReal.Caloria -=
alimentoDB.Caloria * alimentoRemovido.quantidade;
userMongo.macroReal.Carboidrato -=
alimentoDB.Carboidrato * alimentoRemovido.quantidade;
userMongo.macroReal.Proteina -=
alimentoDB.Proteina * alimentoRemovido.quantidade;
userMongo.macroReal.acucar -=
alimentoDB.acucar * alimentoRemovido.quantidade;
userMongo.macroReal.gordura -=
alimentoDB.gordura * alimentoRemovido.quantidade;
userMongo.macroReal.sodio -=
alimentoDB.sodio * alimentoRemovido.quantidade;

// Salva a atualização no MongoDB
await userMongo.save();
const userMongo = await User.findById(usuarioEncontrado.usuario)

return res.status(200).json({
message: "Alimento consumido excluído com sucesso.",
alimentoRemovido: alimentoRemovido,
});

// Filtra o alimento consumido que possui o idProduto informado
if (userMongo) {
const alimentoIndex = userMongo.consumoAlimentos.findIndex(
(alimento) => alimento.idAlimento === parseInt(idProduto)
);

if (alimentoIndex === -1) {
return res
.status(400)
.json({ message: "Alimento não encontrado nos consumidos." });
}

// Remove o alimento consumido da lista
const [alimentoRemovido] = userMongo.consumoAlimentos.splice(
alimentoIndex,
1
);


// Busca o alimento específico no banco de dados Postgres
const result = await pg.query(
`SELECT "Proteina", "Caloria", "Carboidrato", gordura, sodio, acucar
FROM public."Alimentos" WHERE "idProduto" = $1`,
[idProduto]
);

if (!result.rows[0]) {
return res
.status(400)
.json({ message: "Alimento não encontrado no banco de dados." });
}

const alimentoDB = result.rows[0];

// Calcula os macros a serem subtraídos com base na quantidade removida
userMongo.macroReal.Caloria -=
alimentoDB.Caloria * alimentoRemovido.quantidade;
userMongo.macroReal.Carboidrato -=
alimentoDB.Carboidrato * alimentoRemovido.quantidade;
userMongo.macroReal.Proteina -=
alimentoDB.Proteina * alimentoRemovido.quantidade;
userMongo.macroReal.acucar -=
alimentoDB.acucar * alimentoRemovido.quantidade;
userMongo.macroReal.gordura -=
alimentoDB.gordura * alimentoRemovido.quantidade;
userMongo.macroReal.sodio -=
alimentoDB.sodio * alimentoRemovido.quantidade;

// Salva a atualização no MongoDB
await userMongo.save();

return res.status(200).json({
message: "Alimento consumido excluído com sucesso.",
alimentoRemovido: alimentoRemovido,
});
}
return res.status(400)
} catch (error: any) {
console.error("Erro ao excluir alimento consumido:", error);
console.error("Erro ao excluir alimento consumido:", error.message);
return res.status(500).json({
message: "Erro ao excluir alimento consumido.",
error: error.message,
Expand All @@ -558,4 +581,5 @@ FROM public."Alimentos" where "nomeProduto" is not null order by "nomeProduto" ;
}
}


export default new AlimentosController();

0 comments on commit 28b2c23

Please sign in to comment.