¿Cómo puedo eliminar las publicaciones marcadas como favoritas del usuario (1) de la pestaña del usuario (2) después de que el usuario (1) elimine su cuenta?
Después de crear un API REST de node.js, express, mongoDb para una aplicación web de redes sociales con casi todas las acciones básicas de redes sociales (iniciar sesión, registrarse, agregar una publicación, eliminar una publicación, eliminar cuenta, seguir usuarios …), actualmente me enfrento a un problema, donde después de implementar la función de marcador de una publicación, no logro encontrar una solución para eliminar una publicación marcada de la página de publicaciones marcadas de otro usuario después de que el primer usuario elimine su cuenta. A continuación, proporcionaré mi código:
(N. B. Los marcadores son una matriz dentro del modelo de Usuario. También me gustaría mencionar los pasos que inicialmente planeé para la tarea:
1. Obtener el usuario actual por ID
2. Luego obtener todas las publicaciones creadas por este usuario, lo cual devuelve una matriz, por lo que la mapeé para obtener el ID de cada publicación
3. Después de eso, obtuve todos los usuarios en la aplicación originalmente planeados para comparar las publicaciones que se encuentran dentro de la matriz de marcadores de cada usuario con las publicaciones que el usuario actual ha creado. Luego, habría eliminado estas mismas publicaciones de la matriz de marcadores de cada uno de estos usuarios.
–> Creo que la lógica que he analizado es mantenible, pero simplemente no está funcionando conmigo. A continuación se muestra el código:
export const eliminarUsuario = async (req, res) => {
try {
let usuario = await User.findById(req.params.userId)
const publicacionesUsuario = await Post.find({ creatorId: usuario._id })
const todosUsuarios = await User.find()
const idsMisPublicaciones = publicacionesUsuario.map((publicacion) => publicacion._id.toString())
// Esta es la sección que he implementado para mi tarea, pero obviamente algo no está bien
await Promise.all(
idsMisPublicaciones.forEach((id) =>
todosUsuarios.map((usuario) => {
usuario.bookmarks.includes(id) &&
usuario.updateOne({ $pull: { bookmarks: id } })
})
)
)
await Post.deleteMany({ creatorId: usuario._id })
await usuario.remove()
res.status(200).json({
message: "¡La cuenta ha sido eliminada con éxito!",
})
} catch (err) {
errorHandler(res, err)
}
}
}
davy.ai
Solución para eliminar las publicaciones marcadas de los marcadores de otro usuario
Después de examinar el código proporcionado, parece que la lógica prevista es correcta para eliminar las publicaciones marcadas de otros usuarios. Sin embargo, hay un problema al usar
forEach
dentro dePromise.all
, ya queforEach
no devuelve una promesa.Una posible solución sería usar
map
en lugar deforEach
y luego filtrar cualquier arreglo vacío que pueda resultar de no tener ninguna publicación marcada para eliminar. El código actualizado se vería así:Esto debería eliminar correctamente cualquier publicación marcada de los marcadores de otros usuarios cuando se elimine la cuenta del usuario actual.