hice una app en react native estoy creando el pedido y los datos llegan al backend pero no los esta guardando en la bd no están llegando los datos como deberían y por eso no se guardan uso postman y si funciona bien para crear los registros
este es para crear los pedidos en el backend
export const createpedidos = async (req, res) => {
const { mesa, menus, metodo } = req.body;
let session;
console.log({menus});
try {
if (!Array.isArray(menus)) {
return res.status(400).json({ message: 'Los menús deben ser un array' });
}
const session = await Pedido.startSession(); // Inicia una sesión de transacción
session.startTransaction(); // Inicia la transacción
for (const item of menus) {
const menuId = item.menu;
const cantidadVendida = item.cantidad;
// Busca el producto en la base de datos y actualiza la cantidad
await Menu.findByIdAndUpdate(menuId, { $inc: { existencia: -cantidadVendida } });
}
const newPedido = new Pedido({
mesa,
menus,
metodo,
meseros: req.user.id
});
const savedPedido = await newPedido.save();
await session.commitTransaction(); // Confirma la transacción
session.endSession(); // Finaliza la sesión
res.json(savedPedido);
} catch (error) {
if (session) {
if (session.abortTransaction) {
await session.abortTransaction(); // Cancela la transacción si está disponible
}
session.endSession(); // Finaliza la sesión
}
console.error(error);
res.status(500).json({ message: 'Error al realizar el pedido' });
}
}
el front
const Ordenes = () => {
const navigation = useNavigation();
const { ordenes, setOrdenes } = useOrdersContext();
const [clienteMesa, setClienteMesa] = React.useState(undefined);
const [mesas, setMesas] = React.useState([]);
const handleRealizarPedidos = async () => {
try {
await savePedidos({ menus: ordenes });
console.log('Menús guardados exitosamente');
} catch (error) {
console.error('Error al guardar los menús:', error);
}
};
const handleEliminarElemento = (categoria, index) => {
setOrdenes(prevOrdenes => ({
...prevOrdenes,
[categoria]: prevOrdenes[categoria].filter((_, i) => i !== index),
}));
};
const handleSelectMesa = (mesaSeleccionada) => {
setMesa(mesaSeleccionada);
};
const ordenDesayuno = ordenes.desayuno
const ordenAlmuerzo = ordenes.almuerzo
const ordenBebidas = ordenes.bebidas
return (
<>
<ScrollView style={styles.scrollView} overScrollMode="never">
<View style={styles.countContainertitulo}>
<TouchableOpacity style={styles.buttonlisto}>
<Text
style={styles.buttonTextlisto}
onPress={handleRealizarPedidos}
>
Mesa: {ordenes.mesa} Ordenar
</Text>
<Text style={styles.buttonTextlisto}>
<Feather name="arrow-right" size={25} color="white" />
</Text>
</TouchableOpacity>
</View>
<View style={styles.container}>
<Text style={styles.textcount2}>Desayuno seleccionadas </Text>
{ordenDesayuno.map((order, index) => (
<View key={index} style={[styles.card]}>
<Text style={styles.cardTitle}>{order.nombre}</Text>
<Text style={styles.cardmenu}>{order.descripcion}</Text>
<Text style={styles.cardmenu}>Precio total: {order.precio * order.amount} </Text>
<View>
<View style={styles.containercount}>
<View style={styles.countContainer}>
<Text>Cantidad:{order.amount}</Text>
</View>
</View>
</View>
<TouchableOpacity onPress={() => handleEliminarElemento('desayuno', index)}>
<Text style={styles.delete}><AntDesign name="delete" size={24} color="red" /></Text>
</TouchableOpacity>
</View>
))}
el console log asi llegan los datos del front {
menus: { desayuno: [ [Object] ], bebidas: [], almuerzo: [], mesa: 1 }
}
como deberian llegar asi es en cuando los creo en postman menus: [
{ menu: '663438428e070d8c9de4a51f', cantidad: 2 },
{ menu: '663438928e070d8c9de4a523', cantidad: 1 }
]
}
New contributor
ackerman is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.